小编pka*_*eta的帖子

如何在REPL中重新加载clojure文件

重新加载Clojure文件中定义的函数的首选方法是什么,而不必重新启动REPL.现在,为了使用更新的文件,我必须:

  • 编辑 src/foo/bar.clj
  • 关闭REPL
  • 打开REPL
  • (load-file "src/foo/bar.clj")
  • (use 'foo.bar)

此外,(use 'foo.bar :reload-all)不会产生所需的效果,即评估修改后的函数体并返回新值,而不是表现为源根本没有改变.

clojure reload leiningen read-eval-print-loop

159
推荐指数
6
解决办法
6万
查看次数

将G-Machine源转换为LLVM IR

我正在实现一个简单的惰性函数语言,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).其他想法可能是分配整块内存而不是单个单元.

我的问题是你是否看到了解决问题的更好/不同方式.

compiler-construction haskell translation llvm

7
推荐指数
1
解决办法
1134
查看次数