Крошечная виртуальная машина на основе неизменяемых структур данных?

#clojure #functional-programming #immutability #vm-implementation

#clojure #функциональное программирование #неизменность #виртуальная машина-реализация

Вопрос:

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

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

Ответ №1:

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

Комментарии:

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

Ответ №2:

Owl Lisp

«Чисто функциональная схема». Виртуальная машина имеет 1600 строк C.

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

Проект Owl изначально начинался как попытка расширить схему R5RS некоторыми необходимыми функциями, такими как потоки и модули, и как эксперимент по изучению того, как чисто функциональное влияние на время выполнения и использование прикладного порядка чисто функционального языка. Несмотря на то, что в Scheme были добавлены дополнительные элементы, Owl старается максимально упростить основной язык.

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

ClojureC

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

TinyClojure

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

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