我很喜欢OCaml,我正在等待我的《Real World OCaml》!我是一个初学者,只了解函数式部分,略懂命令式,但对于模块、函数子、对象等并不熟悉。
为了一个解释器项目,我创建了一个类似Emacs的新手评估。我保留了一个三元组列表,其中包含一组命令名称绑定字符串、一个描述字符串和要调用的OCaml函数。主循环只是在列表中查找匹配的条目并调用函数。
然后添加新功能非常简单,只需编写一个函数并在列表中放置一个条目即可。
我喜欢像Emacs一样具有自扩展性的概念,这很容易扩展,但不是真正的自扩展。 我能用OCaml使程序具有自扩展性吗?我该怎么做? 我知道Emacs是一个大型虚拟机,因此它通过自身解释代码并修改其运行时环境来实现,但是否有一种方法可以通过用户添加的模块或其他方式向OCaml程序添加功能?
附注:如果我的项目对您来说看起来很基础,请不要嘲笑我,因为我是一个初学者!
谢谢
为了一个解释器项目,我创建了一个类似Emacs的新手评估。我保留了一个三元组列表,其中包含一组命令名称绑定字符串、一个描述字符串和要调用的OCaml函数。主循环只是在列表中查找匹配的条目并调用函数。
然后添加新功能非常简单,只需编写一个函数并在列表中放置一个条目即可。
我喜欢像Emacs一样具有自扩展性的概念,这很容易扩展,但不是真正的自扩展。 我能用OCaml使程序具有自扩展性吗?我该怎么做? 我知道Emacs是一个大型虚拟机,因此它通过自身解释代码并修改其运行时环境来实现,但是否有一种方法可以通过用户添加的模块或其他方式向OCaml程序添加功能?
附注:如果我的项目对您来说看起来很基础,请不要嘲笑我,因为我是一个初学者!
谢谢
loadfile
中: "加载的编译单元中的所有顶层表达式都将被评估。没有提供访问单元定义的值名称的工具。因此,单元必须通过修改函数表将其入口点与主程序注册,例如。" 它是如何工作的?当我调用 loadfile 时,它会运行 ocaml 代码并修改函数入口吗?如果有一些非声明性代码,那么会执行吗? 连接的代码可以访问加载器的变量吗? 如果可以的话,我可以拥有一个函数列表并将加载的函数添加到该列表中。 - Nicolas Scotto Di Perto