Боже упаси от такого. Предлагаешь мне со своим софтом ещё и компилятор прилагать? Нее сишарпы не для меня, только если по работе потребуют.
Знаешь, как-то очень давно был какой-то сайт где был написан эмулятор SPECCY, то ли на джаве то ли на флеше. Этот эмулятор был через браузер, и набранные очки в играх вписывались в топы. Ну там всякие соревнования EXELONов можно было проводить. И начал с авторами переписываться, простите, уже не помню кто это был, что вот эмулятор полностью защищён от взлома, потому что там, что-то применяется, что в памяти ксорится код исполняемой программы, вообщем не взломать одной бутылкой пива. Ну я сразу начал пробовать что к чему, и всё оказалось банально. Вся память 49152 байт в памяти хранилась DWORD'ами, где и вправду первый байт DWORD'а был заксоренный и видно, что он менялся, все 49152 байта в каждом DWORD'е молотились, однако третий байт этого DWORD'а не менялся. то есть видать где-то был код типа MEM[n]=MEM[n] XOR SUPER_BYTE_FOR_XORING, но автор да же не догадывался что в памяти остаётся оригинал. Там я был зарегистрирован под именем HACKER, и договорился с авторами, что я пытаюсь накрутить очки, а они придумывают метод защититься от этого. Мало того весь этот джава или флеш был такой супер ООП и так следил за памятью, что,! вникаем! — я находил в памяти, допустим, очки в Earth Shaker'е, менял на нужные байты НЕ ЗАКСОРЕННЫЕ ДАННЫЕ, то есть это биты с 16 по 23. И универсальный язык программирования выдавал мне в окошке аккуратную надпись «CRC memrory region error, correct?». Эврика!!! Отвечаешь ДА, и новые данные, которые я подставил автоматически вписывались под ксор!
Поэтому, да, я не хочу писать свой код, под вот такие вот виртуальные машины. Я уж лучше по старинке, на асме, под эмулятором Z80 быстрее будет исполняться, чем на таком вот «нативном» языке.
Кто ж тебе виноват, что ты используешь устаревшее ПО (10 лет назад это уже 2005 год, XP уже довольно стабильна), сваливая на железо неумение софта работать с ним.
Т.е. ты не писал разработчику с сообщением о его проблеме только потому что он в Копенгагене? Серьезно?
Давай ты откроешь исходники своих проектов для аудита на предмет педантичности, неленивости и «деструкции данных»? Заодно отделим рукожопость от невнимательности.
Все имеют право ошибаться, но сторонний разработчик плевать хотел что у какого-то там робуса не работает софт. Сидовский плеер попортил память, как раз тот случай о котором мы говорили. В те времена все уже вожделели ХР, а у меня был всё ещё 98ой, и судя по всему память закончилась, автоматическая диструкция памяти, при переходе с мелодию на мелодию не работала, и в какой-то момент пошло по памяти гулять. Я постоянно сохранялся, тяжёлое детство глючного софта, и побил половину своих проектов. Плеер выдал кучу хрипов в динамик, и всё остановилось. Потом сидел и восстанавливал остатки с винта, а результатом сбоя был запись артефактов на винт. Может, конечно за 10 лет его поправили, и возможно что на ХР этого всего не было бы, но факт остаётся фактом, код плеер испортил мне часть проектов, и никакой ММУ не помог.
А глюки своего софта я всегда могу поправить, если бы автором плеера был бы ты, я бы тебе написал письмо и возможно плеер больше бы такое не делал, но автор где-то там в Копенгагене.
«деструкция данных» это попытка заткнуть дырки людей которые любят у системы попросить попросить байтики, а отдавать не хотят. были бы программисты педантичными как кодеры, занимались бы деструкцией сами, тем более, что это одна-две строчки кода. Лень это всё. И в чём тут рукопожатие, экономия на двух строчках кода? Тогда можно выпилить из Z80 команду DI, будет рукопожатие, что бы HALTы не мешали работать ядру.
Яб добавил что MMU не только для надежности, но и для удобства и экономии ресурсов. Т.е. swap, mmap, copy-on-write, вот эти все ништяки. Ну и там границы не только между процессами, но и внутри процесса, чтоб стек не рос неограниченно, или чтоб код нельзя было модифицировать, например.
Я пробовал мелкий тест, который строит подобие игровой карты, используя стейтмашинку-итератор на ISR от DMA. При окончании каждой транзакции ДМА ему подбрасывается новое задание. При этом в ISR ДМА стоит EI, так как могут быть активными строчные прерывания, которые пропускать нельзя.
Факт того, что я являюсь циничным мудаком (не к пидарасам, извините, ориентацией не вышел), совершенно не мешает мне уважать Робуса, его проды и статьи. Также разный взгляд на вещи (порой диаметрально противоположный) не мешает лично мне общаться, хотя и вносит определенный градус пыла в дискуссии.
Равно как и идея использования многопоточности именно в демах не отменяет озвученных спектрумовских проблем оной, возникающих во время разработки на пути к ровно одному сценарию использования.
Ну попробуй на АРМе из пользовательского пространства ОС сделать DI или выключить на контроллере таймер или испортить код.
Зависит на каком арме. На STM32 — запросто. (Там кстати никакого «DI» там нету, там задается разрешение для каждого канала на NVIC либо битами разрешения на соответствующей периферии.)
Витамин, бида робусова в том, что он не умеет и не слишком стремится отвечать на троллинг таких циничных пидарасов как ты и я. На его месте я бы дополнил название словами "… in demos". Алсо, в тексте нигде не говорится про ОСи или системные утилиты. А для демы надежно то, что не упало при показе сабжа. У системной утилиты бесконечное количество сценариев использования, а у демы ровно 1 (если пробелонажимание не предусмотрено).
Ваш Лейтенант Вежливость.
лучше победить проблему куском памяти, чем молотить что-то кодом(скриптом)
И таки зачастую он будет прав. Ибо память дешевая и ее относительно много, а работа процессора требует энергии, которой не всегда много, особенно на мобильных устройствах.
Так что не существует единственно верного способа писать оптимально.
Ты будешь удивлен, но конечным результатом работы джавера и сишарпника как раз является нативный код. И это уже довольно давно так. Ибо код для виртуальной машины можно уже рассматривать как промежуточный вариант, преобразуемый в конце концов к нативному.
Не соглашусь.
Что тебе пришлось восстанавливать после падения плеера сида? Пропавший плейлист? Или упала вся система, не умеющая 10 лет назад толком обеспечить защиту приложений друг от друга и тебе пришлось восстанавливать сеанс?
По твоей логике получается, что любая защита- это порождение лени. Давай уберем перила на лестницах и мостах (кто-то ленится ходить правильно чтоб не падать с края), подушки и ремни безопасности из автомобилей (кто-то ленится научиться хорошо водить). Да, наличие средств безопасности, совершенно не повод эту безопасность соблюдать, у них другая задача- минимизировать ущерб, если что-то пошло не так.
И еще одна нестыковка. Себе ты оставляешь право на ошибки в софте, хотя и стараешься минимизировать их. А вот другим почему-то не хочешь давать. Глючит — никогда не буду использовать. И плевать что это первая версия. И плевать, что если все так будут делать, то следующей версии не будет. И плевать, что «деструкция данных при закрытии программы» — это рукожопие определенного программиста, а не подход современного кодинга. Не надо так.
Знаешь, как-то очень давно был какой-то сайт где был написан эмулятор SPECCY, то ли на джаве то ли на флеше. Этот эмулятор был через браузер, и набранные очки в играх вписывались в топы. Ну там всякие соревнования EXELONов можно было проводить. И начал с авторами переписываться, простите, уже не помню кто это был, что вот эмулятор полностью защищён от взлома, потому что там, что-то применяется, что в памяти ксорится код исполняемой программы, вообщем не взломать одной бутылкой пива. Ну я сразу начал пробовать что к чему, и всё оказалось банально. Вся память 49152 байт в памяти хранилась DWORD'ами, где и вправду первый байт DWORD'а был заксоренный и видно, что он менялся, все 49152 байта в каждом DWORD'е молотились, однако третий байт этого DWORD'а не менялся. то есть видать где-то был код типа MEM[n]=MEM[n] XOR SUPER_BYTE_FOR_XORING, но автор да же не догадывался что в памяти остаётся оригинал. Там я был зарегистрирован под именем HACKER, и договорился с авторами, что я пытаюсь накрутить очки, а они придумывают метод защититься от этого. Мало того весь этот джава или флеш был такой супер ООП и так следил за памятью, что,! вникаем! — я находил в памяти, допустим, очки в Earth Shaker'е, менял на нужные байты НЕ ЗАКСОРЕННЫЕ ДАННЫЕ, то есть это биты с 16 по 23. И универсальный язык программирования выдавал мне в окошке аккуратную надпись «CRC memrory region error, correct?». Эврика!!! Отвечаешь ДА, и новые данные, которые я подставил автоматически вписывались под ксор!
Поэтому, да, я не хочу писать свой код, под вот такие вот виртуальные машины. Я уж лучше по старинке, на асме, под эмулятором Z80 быстрее будет исполняться, чем на таком вот «нативном» языке.
Т.е. ты не писал разработчику с сообщением о его проблеме только потому что он в Копенгагене? Серьезно?
Давай ты откроешь исходники своих проектов для аудита на предмет педантичности, неленивости и «деструкции данных»? Заодно отделим рукожопость от невнимательности.
А глюки своего софта я всегда могу поправить, если бы автором плеера был бы ты, я бы тебе написал письмо и возможно плеер больше бы такое не делал, но автор где-то там в Копенгагене.
«деструкция данных» это попытка заткнуть дырки людей которые любят у системы попросить попросить байтики, а отдавать не хотят. были бы программисты педантичными как кодеры, занимались бы деструкцией сами, тем более, что это одна-две строчки кода. Лень это всё. И в чём тут рукопожатие, экономия на двух строчках кода? Тогда можно выпилить из Z80 команду DI, будет рукопожатие, что бы HALTы не мешали работать ядру.
потоки полезны будут как вариант выполнения кода под конфой.
под спеком эта обвязка относительно много ест.
Равно как и идея использования многопоточности именно в демах не отменяет озвученных спектрумовских проблем оной, возникающих во время разработки на пути к ровно одному сценарию использования.
Без подписи
Ваш Лейтенант Вежливость.
Так что не существует единственно верного способа писать оптимально.
Что тебе пришлось восстанавливать после падения плеера сида? Пропавший плейлист? Или упала вся система, не умеющая 10 лет назад толком обеспечить защиту приложений друг от друга и тебе пришлось восстанавливать сеанс?
По твоей логике получается, что любая защита- это порождение лени. Давай уберем перила на лестницах и мостах (кто-то ленится ходить правильно чтоб не падать с края), подушки и ремни безопасности из автомобилей (кто-то ленится научиться хорошо водить). Да, наличие средств безопасности, совершенно не повод эту безопасность соблюдать, у них другая задача- минимизировать ущерб, если что-то пошло не так.
И еще одна нестыковка. Себе ты оставляешь право на ошибки в софте, хотя и стараешься минимизировать их. А вот другим почему-то не хочешь давать. Глючит — никогда не буду использовать. И плевать что это первая версия. И плевать, что если все так будут делать, то следующей версии не будет. И плевать, что «деструкция данных при закрытии программы» — это рукожопие определенного программиста, а не подход современного кодинга. Не надо так.