哪些编程语言功能非常适合开发实时编码框架?

Jer*_*rth 13 ruby python lua clojure livecoding

我想建立一个"实时编码框架".

我应该解释一下"实时编码框架"的含义.我将通过将实时编码与传统编码进行比较来实现.

一般来说,在传统编程中,您编写代码,有时编译代码,然后启动可执行文件或在某种解释器中打开脚本.如果要修改应用程序,则必须重复此过程.实时编码框架使代码能够在应用程序运行时更新并按需重新加载.每次更改包含代码的文件或执行其他操作时,可能会发生此重新加载.然后,代码中的更改将在应用程序运行时反映出来.无需关闭程序并重新编译和重新启动它.

在这种情况下,应用程序是一个带窗口的应用程序,它具有更新/绘制循环,很可能使用OpenGL进行图形处理,音频库用于声音处理(SuperCollider?),理想情况下是网络库.

当然我有首选语言,但我不确定它们中的任何一种都适合这种架构.理想情况下,我会使用Python,Lua,Ruby或其他更高级别的语言.然而,一位朋友最近建议将Clojure作为一种可能性,所以我也在考虑它.

我不仅想知道哪种语言适合这种框架,而且通常,哪种语言特性可以使这样的框架成为可能.

Pau*_*nko 5

我在Lua中实现了一个实时编码功能,作为ZeroBrane Studio IDE的一部分.它完全按照您所描述的方式通过在代码更改时重新加载应用程序来工作.我正在研究可能的改进,以便在运行时修改值,以避免完全重新加载应用程序.它是一个纯粹的基于Lua的解决方案,不需要对VM进行任何修改.

您可以在此处查看当前实施的实时编码演示:http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style.

在使用/要求的语言功能方面,我依赖:

  1. 中断/恢复正在运行的应用程序的能力(这是基于debug.hook和error()调用),
  2. 远程与(未修改的)应用程序交互的能力(这是基于debug.hook,与select()支持的TCP交互来检测是否正在从主机发送新请求,以及在协同程序之间切换主要应用程序和实时编码模块),以及
  3. 将新代码注入应用程序的能力(这种机制也使用协同例程,但我确信有其他选择).也有可能只注入一个修改过的片段,但它需要处于一个函数的级别,如果这个函数是某个其他函数的局部函数,你也需要包含它等等.


mik*_*era 4

Clojure 几乎拥有您作为实时编码语言可能想要的一切。主要亮点:

  • 交互式 REPL - 这样您就可以直接与正在运行的程序交互。即使当我进行“传统编程”时,我也倾向于交互式地编写代码,然后将我喜欢的部分复制到源文件中。Clojure 就是为了以这种方式工作而设计的 - 程序中的几乎所有内容都可以在运行时检查、修改和替换。
  • 出色的并发支持- 您可以使用诸如(future (some-function)). 更重要的是,Clojure 的 STM 和对高性能不可变数据结构的强调将处理更微妙的并发方面(例如,如果我在渲染过程中更新实时数据结构会发生什么?)
  • 库可用性- 它是一种 JVM 语言,因此您可以从 Java 生态系统中获取所需的所有音频、视频、IO 或计算工具。很容易将它们包装在 Clojure 的一两行中,这样您就可以获得所需功能的简洁界面
  • - 由于 Clojure 是一种同形语言,因此您可以利用 Lisp 的功能来编写强大的宏来扩展该语言。您可以有效地构建要在实时环境中使用的确切语法,并让编译器完成在幕后创建完整代码的所有艰苦工作。
  • 动态类型——它的好处可以从两方面来论证,但当试图快速、简洁地编写代码时,它无疑是一个巨大的好处。
  • 活跃的社区,有很多很酷的项目- 您可能会在 Clojure 社区中发现很多人对类似的实时编码技术感兴趣。

您可能会发现一些有趣的链接: