Ранее в теме была упомянута библиотека KOL (Key Objects Library) для Delphi. Там же была и эффективная "эвалуациея бизнес-объектов" (из "теории метапрограммирования" по ссылке). Для ещё более экономного потребления ресурсов предлагалось и внедрение некой а-ля форт-машины (двухстековый интерпретатор, размером всего лишь несколько сотен байт). Была возможность заменить код инициализации компонент (где, как правило, нет интенсивных вычислений) на байт-код, существенно более компактный, чем машинный.
На сегодня, всё же, актуальность разработок а-ля KOL не утрачена. Вспомнилась заметка по поводу проекта
Автор статьи рассказывает о применении библиотеки для мелких утилит (а также и для игр:
). Авторы библиотеки (современной) использовали С (причём С89) вместо modern C++, в том числе и для прикладной разработки на С (затем прочие желающие слепили биндинги для других языков, перетянули на emscripten).
Ниже выдержка из комментариев к статье насчёт того, почему именно С, а не С++, и про прочие проблемы сборочного слоя:
Вспоминается FLTK
[...]
FLTK написан на С++, а не на Си. Соответственно, будет занимать значительно больше места (примерно +200kb за stdlibc++). Лицензия у него LGPL, а не Public Domain. Но лично меня оттолкнул внешний вид.
А вообще я бы хотел Qt, но в 100kb
[...]
Благодаря си его еще можно например скриптовать tcc. Я его использую в мини аля-флеш плеере, у которого рантайм около 300кб (размер apk увеличивается на 100кб). Причем работает оно на десктопе, телефонах и веб через emscripten
[...]
Только обычно библиотеку для GUI на микроконтроллер не нужно делать такой. Там нет мыши (ну можно конечно втулить), и окон, и даже тач редко используется. Обычно пара кнопок и тогда требования к UI совершенно другие. И библиотека рендера часто тоже есть. Остается только воплощать идею заказчика. И 100кб там это сильно больше 16Мб Qt приложения на декстопе.
[...]
Почему стоит требование малого размера? Потому, что мне жаль из-за утилитки на 20 строчек заставлять пользователя каждый раз тянуть с собой ещё несколько мегабайт Qt. Если проект крупный и серьёзный, то никто не спорит, что инструментарий должен быть соответствующим. Только вот для совсем маленьких проектов я очень долго не мог найти ничего кроссплатформенного...
[...]
Вы не сможете сделать утилиту на 100кб, портабельную и которая заработает под всеми дистрибутивами, которую просто скопировал в фаре и работай. Я пробовал, тут даже libstdc++ приходится линковать статически. Под виндой таскать с такими утилками несколько громадных dll тоже не айс, или копировать их в загрузочные пути чтобы все эти утилки заработали. Доп рантайм это гиблое дело, не заставите вы его никого ставить, все проекты эмбедят Qt внутрь. Под виндой даже С++ рантаймы новых студий ставить отдельно не хотят — эмбедят его установщик вместе с софтом. Причем версий рантайма установленных в системе придется делать 100500 т.к. разные утилки будет слинкованы с разными версиями Qt.
А так да, Qt конечно рулит.
[...]
В ваших словах конечно есть истина, как и в моих. Как я уже говорил — я пытался заюзать Qt для данного сценария, проблема не только в размере, официальные сборки не статические, и в винде и в дистрибутивах. В винде приходится прикладывать dll, в лине или делать appimage\snap\flatpak или универсальный бинарь в который все надо линковать статически (из реп может не стоять по дефолту, а если бы стояло — версии разношерстные), на маке тоже придется постараться, в .app формате там приложение — это структура директорий. И универсальная сборка сильно усложняется. Для бльшого софта это норм, для мелкоутилок — ужас, ужас (./util.app/Contents/MacOS/util -f file :3 ).
Размер тоже может иметь значение. Если это мелкоутилка лично моя — меня не будет сильно парить ее размер, разве что не сотни мегабайт. А вот если я в apk на андройд эту либу заюзаю, как в примере с аля-флешкой выше — меня парить уже будет. Или если я эту «флешку» в сайт какой встрою — тоже размер парить будет. Так же если это вдруг не персональная утилита, а какая-то сверх массовая, типа гнушных утилит, то мелкость по функции и черезмерная толстота тоже начнет вызывать вопросы даже на десктопе, а количество утилит в масштабах дистрибутива очень много.
[...]
Насчет рантаймов студий — все было хорошо, пока его не вынесли в WinSxS, так что dll из текущей диры уже не подхватываются, и ищутся из недр WinSxS по манифесту. В 2015 студии пошли на попятную и dll можно снова просто прилагать к проге.
[...]
20 mb Qt много? У нас есть простая GUI утилика написанная на node.js + angular.js + electron. Так вот её дистрибутив весит 466 MB, который, конечно для удобства, заботливо положен в GIT репозиторий. (GIT LFS? нет не слышал...)
[...]
Да сейчас и на сотни гигабайт софт можно найти. Только что в этом хорошего?...
[...]
Да ничего хорошего, конечно, нет. Каждый раз открываю я эту тулзу и плачу. Только вот писал её один наш co-op student и стоила она компании практически ничего. Другой новый co-op student может её спокойно продолжать пилить, поскольку все они сейчас знают JS.
Я хочу сказать то, что для постых задач нужна такая технология, которую можно отдать студенту, которая будет минимизирать стоимость разработки и для которой не нужен хардкорный программист который будут реализовывать загрузку изображений через OpenGL — для них и так работы хватает.
Другое дело, если задача — сложная, но тогда, все рано, придется использовать Qt или что то подобное.
Вот такие дела.
А несколько лишних мегабайт никого сейчас не волнует (хотя повторюсь, без слез на нашу тулзу смотреть нельзя, но она работает)