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