@voproser45654
Мечтаю писать на машинных кодах

Какой язык програмирования дает скомпилированый файл с самым маленьким размером?

Недавно начал изучать Haskell и обнаружил что лишь hello world весит 11 мб при том, что на си это будет около 15 кб.
Какой язык програмирования дает скомпилированый файл с самым маленьким объемом и почему такая большая разница?
  • Вопрос задан
  • 643 просмотра
Решения вопроса 4
почему такая большая разница?

Каждый имеет свою стандартную библиотеку и какой-то свой рантайм, которые весят не ноль.
В случае хаскеля, он собой ещё тащит GC.
+ Компилятор в разной степени может наоптимизировать твой код.

Как уже сказали выше - минимальный размер тебе дадут машинные коды (или же ассемблер), если ты будешь писать код прямо на них. В зависимости от ОС и архитектуры, простая программа может занимать считанные сотни байт (если не десятки).

Если смотреть на компилируемые языки чуть более высокого уровня, то самый компактный выхлоп дают C, C++, и Rust, в зависимости от настроек компилятора, подключаемых библиотек, и используемых фич.

В целом - 11 мегабайт даже для консольной утилиты сейчас копейки.
Ответ написан
HemulGM
@HemulGM
Delphi Developer, сис. админ
Delphi
Дает ехе размером 2.5мб для приложения состоящего из одного окна и нескольких контролов на VCL (Only Win)
Дает ехе размером 47кб для консольного "Hello World"
Ну и кроссплатформенный вариант (FMX) так же одно окно и пара контролов под винду (ехе) 9.4мб, под андроид (apk x32) 7.8мб

Здесь хорошо видно, как меняется размер в зависимости от того, что используется в приложении. Консольное приложение совсем ничего не весит, потому что там ничего лишнего не тянется. В том числе ресурсы окна и прочее. VCL - фреймворк по винду тянет за собой не малую либу контролов и прочего, включая ресурсы.
FMX - фреймворк под кроссплатформ таскает с собой стили под разные ОС (растр по умолчанию) и так же не малую либу. Под win64 и andr64 будет размер ещё больше.

Примерно так же обстоят дела с другими языками.
Ответ написан
Комментировать
wiz
@wiz
Ортодоксальный хаскелит
11 мб это если использовать статическую линковку и не использовать опцию сборки "split-sections". Без неё весь библиотечный код запихивается в исполняемый файл вне зависимости используется он или нет. "split-sections" позволяет порезать библиотеки на блоки гораздо меньшего размера и тащить только то, что нужно.

Кроме того, в Haskell будет ещё обязательная часть, т.н. "рантайм", которая обеспечивает все важные для исполнения программ функции вроде доступа к IO и сборке мусора.
Ответ написан
Комментировать
@potan
Функциональный программист
В большинстве компиляторов размер hello world определяется размером стандартной библиотеки. НМаньчжурией а более сложных программах разница сокращается. Самые маленькие программы будут давать языки, компилируемые в байт-код, типа Erlang. Еще небольшой размер обеспечивает Forth.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Assembler
Ответ написан
Комментировать
Griboks
@Griboks
Машинные коды дают минимальный размер программы.
Ответ написан
Комментировать
@pharo
Forth (Форт) - недаром он до сих пор находит применение во встроенных системах с микроконтроллерами, а также его ядра встраивают в минимальные FPGA микросхемы.
Типичный размер ядра автономной Форт системы с большинством включённых в него слов занимает ~8Kбайт, но может быть и меньше и больше в зависимости от того какие характеристики системы
необходимо получить и от архитектуры реализации Форт системы (а их много разных понаделали)
amForth
FlashForth
Mecrisp-Stellaris
SwiftForth
SPF4-Utf8
Win32Forth
VFX Forth Community editions

Разместить FORTH в 512 байтах
Виртуальная машина и скриптовой движок в MSP430G25...
4E4th + TI LaunchPad. Основы языка Forth
4E4th + TI LaunchPad. В начале было Слово.

P.S. И, не надо думать, что Форт применим только для программирования крохотных контроллеров,
на нём можно делать и десктопное ПО (следуя пути Джедаев :)

Статьи по Форт на Хабр в хабе Forth
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы