【问题标题】:Tiny VM based on immutable data structures?基于不可变数据结构的微型虚拟机?
【发布时间】:2016-10-02 19:24:09
【问题描述】:

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

我所说的“微型”是指实现简单性、简洁性和可移植性是关键点的 VM:想想 Lua 或 TinyScheme。

【问题讨论】:

    标签: clojure functional-programming immutability vm-implementation


    【解决方案1】:

    我不确定它如何与您的“关键点”保持一致,但您可以看看Pixie。 Pixie 在 RPython 中实现了一个 VM。它的一项声明是编译后的 VM + 标准库仅占用 10MB 多一点的空间。该语言是基于(松散地)基于 Clojure 的 lisp。它似乎默认维护 Clojure 的不可变策略,并且肯定具有 Clojure 持久数据类型的实现。

    【讨论】:

    • 谢谢!似乎比 Lua et.al 重很多。但这可能是最好的竞争者。它肯定似乎有类似的“轻量级”理想。
    【解决方案2】:

    猫头鹰语言

    “纯功能方案”。 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 嵌入到任何应用程序中。 Tiny Clojure 由一个 头文件,一个源文件,没有外部依赖,和 扩展和嵌入接口尽可能简单 是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2012-01-31
      • 2015-07-10
      • 2014-03-17
      相关资源
      最近更新 更多