基于不可变数据结构的微小VM?

时间:2016-10-02 19:24:10

标签: clojure functional-programming immutability vm-implementation

用户可见的主要数据结构(列表,数组,映射,集合等)是否在Clojure或Haskell中是不可变的,是否存在任何“微型”VM(对于任何编程语言)?

“微小”是指一个虚拟机,其实现简单,简洁和便携是关键点:想想Lua或TinyScheme。

2 个答案:

答案 0 :(得分:1)

我不确定它与您的关键点"如何对齐,但您可能会看一下Pixie。 Pixie在RPython中实现了一个VM。它的一个主张是编译的VM +标准库只有10MB以上的小占用空间。这种语言是基于lcp(松散地)在Clojure上。它似乎在默认情况下保持Clojure的不可变策略,并且肯定有Clojure的持久数据类型的实现。

答案 1 :(得分:1)

Owl Lisp

A"纯功能方案"。 VM是1600行C。

  

Owl Lisp是Scheme的纯功能方言。它是基于   适用的R7RS标准子集,主要用线程扩展   和纯功能操作所必需的数据结构。猫头鹰可以   可用于大多数类UNIX系统,例如Linux,BSD和OS X.   程序通常通过C编译为独立的二进制文件,因此Owl   不需要运行用它编写的程序。

     

Owl项目最初是为了扩展R5RS而开始的   具有一些必要功能的方案,例如线程和模块,以及   作为纯粹功能如何影响运行时的实验   和使用纯粹功能性语言的应用程序。而   已经将一些东西添加到Scheme中,Owl试图保留核心语言   尽可能简单。

     

实施方面的目标是获得一个小型便携式系统   可以用来轻松发送程序。这是目前完成的   通过使用基于寄存器的小型虚拟机,可以进行扩展   使用特定于程序的指令来减少解释开销。

ClojureC

  

针对C的Clojure编程语言的编译器   作为后端。它基于ClojureScript ......在你可以运行之前   任何东西都要确保你有GLib 2和Boehm-Demers-Weiser垃圾   收藏家安装。

TinyClojure

  

TinyClojure是一个构建小型,易于嵌入的版本的项目   可移植C ++中的Clojure / ClojureScript。在很多方面,这是我的   尝试创建一个与TinyScheme相当的Clojure。

     

...

     

ClojureC很好,但构建过程很复杂,而且   有外部库依赖... TinyClojure开发的重点是使它成为最简单的方法   在任何应用程序中嵌入Clojure。微小的Clojure由一个组成   头文件,一个源文件,没有外部依赖项,以及   扩展和嵌入界面尽可能简单   是