На ассемблере имеет смысл писать только то, что: – делается ради изучения ассемблера или в своё удовольствие; – без ассемлера никак не написать (например, перевод в защищённый режим, низкоуровневый ввод/вывод); – то, что требует предельной оптимизации по скорости; – использование специальных инструкций процессора. В остальных случаях только хуже. Никакой переносимости, никакой проверки корректности логики программы. Да и мозги перенапрягаются, сколь-нибудь сложный алгоритм на ЯВУ выглядит намного понятней.
Что касается размера, то я уверен, что возможности ассемблера сильно преувеличены. Фундаментальный вклад в разбухание вносят: – дублирование кода (в исходниках UEFI несколько разных функций расчёта CRC32 со стандартным полиномом) – копи-паста – утягивание монструозных библиотек ради нескольких функций – мультипарадигмальный подход: это я напишу на C, это на Питоне, стыковать буду через сторонние переходники, часть кода будут готовить TCL-скрипты и пр. – использование и поддержка невыразительных устаревших языков (C) – ориентировка на скорейший результат: "сейчас как-нибудь сделаю, а что будет дальше, не важно" – отсутствие программистского таланта: в моей практике были случаи, когда после исправления ошибок, устранения косяков в исходнике и переписывания алгоритмов он сокращался раз в пять. В результате всех факторов код вырастает не в разы и даже не в десятки — в сотни раз.
Вот тоже из моей практики. В процессе написания нами компилятора с языка C++ на сегодняшний момент реализованы: – лексический анализатор, работающий со всеми кодировками и вариантами Юникода; – весь препроцессор; – линкер, работающий со всеми основными форматами и умеющий линовать вместе код от разных компиляторов, а также вшивать манифест, ресурсы и иконки приложения (без стадии компиляции ресурсов); – полностью работающий ассемблер для i8080 и z80. Компилятор многопоточный, все исходники обрабатываются параллельно, хедеры прекомпилируются в памяти и используются всеми потоками. Поскольку компилятор предназначался для новой ОС (не клон Линукса), а в процессе работы сталкивались с необходимостью использования алгоритмов, неспецифичных для компилятора, было принято решение все алгоритмы писать с нуля (никаких Boost, STL и всяких GNUсностей) и вынести их в отдельную библиотеку. И кроме того, поскольку эта библиотека использовалась в куче разных проектов, в т.ч. научных, то она постоянно пополняется новыми компонентами. В эту библиотеку попали: – все основные криптографические алгоритмы и хэш-функции – универсальная блокировка для многопоточности — майкрософт отдыхает – поддержка параллельных алгоритмов, в разы быстрей майкрософтовской и интеловской реализации OpenMP – куча алгебры – полная поддержка неограниченной арифметики, быстрей, чем GNUMP! – работа с битовыми массивами (требовалось для работы над патентами в области генерации случайных чисел и криптографии) – поддержка булевой математики – собственная работа со строками – полностью свой файловый ввод/вывод, — замена кривейших и устаревших системных функций, поддержка 64-битности и UTF-8 на любых системах – эмуляция плавающей арифметики – куча абстрактых структур и контейнеров, множеств, ассоциативных массивов – поддержка ряда форматов файлов, данных и структур в криптографии и интернет – аллокатор для выделения структур фиксированного размера – парсер аргументов командной строки – огромная библиотека генераторов случайных и псевдослучайных чисел – поддержка арифметики рациональных дробей – функции статистического анализа – генерация очень больших гарантированно простых случайных чисел, проверка числа на простоту – куча всякой мелочи типа конвертации юникодов и расчёта контрольных сумм По сути наш подход следующий, — если в процессе работы возникает необходимость в каком-то алгоритме или библиотеке, то изучаем тему, пишем своё и внедряем в нашу библиотеку.
А теперь внимание! Барабанная дробь... Размер нашей супербиблиотеки — 280 килобайт! Размер самого компилятора — 295 килобайт! Всё написано на чистом C++. Никакого стороннего кода. Скорости выполнения рекордные. Поэтому, если грамотно подходит к вопросу, то (без использования тяжёлой графики) почти полноценную ОС можно вместить на дискету и в 4 мегабайта оперативки и без ассемблера.
_________________ Yet Other Developer of Architecture. The mistery of Yoda’s speech uncovered is: Just an old Forth programmer Yoda was.<<< OS Boot Tools. >>>
|