重新加载Clojure文件中定义的函数的首选方法是什么,而不必重新启动REPL.现在,为了使用更新的文件,我必须:
src/foo/bar.clj(load-file "src/foo/bar.clj")(use 'foo.bar)此外,(use 'foo.bar :reload-all)不会产生所需的效果,即评估修改后的函数体并返回新值,而不是表现为源根本没有改变.
我正在实现一个简单的惰性函数语言,LLVM作为Haskell的后端.我读过Simon Peyton Jones编写的两本书("函数式编程语言的实现",以及"实现函数式语言:教程"),并在此基础上设法实现了G-Machine编译器和解释器.
我现在正处于从G-Machine指令生成LLVM IR代码的问题上.主要问题是G-Machine是堆栈机器而LLVM IR是寄存器机器.因此,为了将G-Machine转换为LLVM IR,我必须在LLVM IR中维护某种运行时堆栈(如果我错了,请纠正我).我正在考虑使用其IR指令在LLVM堆栈上分配后续堆栈节点,但后来我必须以链表方式创建该堆栈,其中每个堆栈元素都有一个指向前一个堆栈元素的指针,第一个堆栈元素具有空指针.然而,这种方法不是非常理想的,并且在G-Machine的"Push n"操作的情况下,它将具有O(n)的复杂度而不是优选的O(1).其他想法可能是分配整块内存而不是单个单元.
我的问题是你是否看到了解决问题的更好/不同方式.