Моя цель — создать стандарт на нативный программный код. Мы окружены программами, но нет подходящего стандарта, который бы позволил писать быстрые и переносимые прогаммы, не нанимая армию технологов, перекомпилирующих по сто раз под каждый дистрибутив одно и то же.
Мне не нравится, как с уходом с Windows потерялась многоязыковость и вообще возможность пробиваться не самым популярным языкам программирования. Во имя прогресса языков программирования соревнование должно быть честным.
Мне не нравится, что под соусом кроссплатформенности нам навязали сначала виртуальные машины, потом скрипты, а теперь и вовсе всё пожрал браузер. Хочу обратно проворные программы.
Мне не нравится многочасовая перекомпиляция статически собранных программ. Хочу хорошую поддержку библиотек для нативного кода.
Скомпилируй трижды, запусти везде* *) Рекоммендуемый набор ещё не вполне определился. Сейчас это: x86_64, x86, wasm.
Wine запускает их на POSIX, Odin32 на OS/2, HX DOS Extender под DOS. Многократно пройденная дорога, без особенных требований. Для сравнения, поддержка Linux ELF потребовала аппаратную виртуализацию в macOS, либо поддержку в ядрах Solaris и Windows. Некоторые другие форматы как ANDF (TenDRA), PNaCl, UEFI EBC, wasm, не поддерживаются инструментами разработки или имеют ряд тяжело поддерживаемых особенностей.
Современная его версия существует в macOS. Посредством этого API можно работать с файлами, сетью и рисовать графический интерфейс. Есть две кроссплатформенные реализации: GNUStep и Cocotron.
За основу берём шедевр, описанный в книге «Putting Metaclasses to Work». Реализация вдохновляется System Object Model. Добавляем хорошее из Objective-C 2.0 вроде ARC. Добавляем типы-значения из .NET.
Этот байткод можно исполнять чуть ли не на каждой активно поддерживаемой архитектуре, вот только отношение к нему надо поменять. Сейчас отношение как к конкуренту родному машинному коду, а должно стать отношение как к конкуренту msil. И крайний срок давности патентов 20 лет, и они истекли или истекают. Те, кто повторяют мантру про лицензирование, пропустили момент, когда эти 20 лет прошли, и по инерции продолжают повторять.
Чтобы утолить жажду кроссплатформенности, но не тащить браузер на рабочий стол, мы потащим рабочий стол в браузер. WebAssembly. Зелёные потоки на сегментированных стеках. Структурная многозадачность. RAII. Написанные в синхронном стиле потоки, ждущие мьютексы и условные переменные. Здесь всё взаимосвяано. Например, если, как при использовании EmScripten, поток не может уйти в ожидание, а обязан вернуть управление на самый верх, какое может толком быть RAII в таких условиях?