1

Есть ли «крошечная» виртуальная машина (для любого языка программирования), где основные структуры данных, видимые пользователю (списки, массивы, карты, наборы и т. Д.), Неизменны, как в Clojure или Haskell?Крошечная виртуальная машина на основе неизменяемых структур данных?

Под «крошечным» я имею в виду виртуальную машину, где простота реализации, краткость и переносимость являются ключевыми моментами: думаю, Lua или TinyScheme.

ответ

1

Я не уверен, как он совпадает с вашими «ключевыми моментами», но вы можете взглянуть на Pixie. Pixie реализует виртуальную машину в RPython. Одна из его претензий - небольшая площадь чуть более 10 МБ для скомпилированных виртуальных библиотек VM +. Язык - это lisp, основанный (свободно) на Clojure. По-видимому, он поддерживает политику неизменного политики Клоджуре по умолчанию и определенно имеет реалии постоянных типов данных Clojure.

+0

Спасибо! Кажется довольно тяжелее, чем Lua et.al. но это может быть лучшим соперником. Кажется, у него, похоже, похожие «легкие» идеалы. – Lassi

1

Owl Лисп

А "чисто функциональная схема". VM составляет 1600 строк C.

Owl Lisp - это чисто функциональный диалект Схемы. Он основан на соответствующем подмножестве стандарта R7RS, распространяя его главным образом на потоки и структуры данных, необходимые для чисто функциональной работы. Owl может использовать для большинства UNIX-подобных систем, таких как Linux, BSD и OS X. Программы обычно скомпилируются через C в автономные двоичные файлы, поэтому Owl не требуется для запуска программ, написанных на нем.

проект Owl первоначально началась и как попытка распространить R5RS Схему с некоторыми необходимыми функциями, такими как резьб и модулей, а также в качестве эксперимента о том, как быть чисто функциональных влияний среды выполнения и использование аппликативном порядка чисто функциональный язык. В то время как было добавлено к Схеме, Сова пытается сохранить основной язык настолько прост, насколько это возможно.

Целью внедрения было получить небольшую портативную систему, которую можно было бы легко использовать для отправки программ. В настоящее время это выполняется , используя небольшую виртуальную машину на основе регистров, которая может быть расширена с инструкциями по использованию программы, чтобы уменьшить накладные расходы на интерпретацию.

ClojureC

Компилятор для языка программирования Clojure, который нацелен C в качестве внутреннего интерфейса. Он основан на ClojureScript ... Прежде чем вы сможете запустить , убедитесь, что у вас есть GLib 2 и сборщик Boehm-Demers-Weiser .

TinyClojure

TinyClojure проект построить небольшой, легко встраиваемый вариант из Clojure/ClojureScript в портативном C++. Во многом это моя попытка создать эквивалент Clojure TinyScheme.

...

ClojureC хорошо, но процесс сборки является сложным, и есть внешние зависимости библиотек ... В центре внимания с развитием TinyClojure том, чтобы сделать это самый простой способ встраивать Clojure в любой заявление. Tiny Clojure состоит из одного файла заголовка , одного исходного файла, без внешних зависимостей и интерфейса расширения и встраивания так же просто, как это возможно be.