1
kedebug OP 补充下:LispEx 已经被 Go Community Wiki 收录。https://code.google.com/p/go-wiki/wiki/Projects#Virtual_Machines_and_Languages
|
2
WildCat 2014-07-23 18:09:22 +08:00 via iPad
王垠大神会爱上你的,下个情人节就不蛋疼了,233
|
3
qiukun 2014-07-23 18:09:44 +08:00
ym 西南某高校
|
4
lsmgeb89 2014-07-23 18:45:40 +08:00
楼主是做 PL 的 master?
|
7
haroldwu 2014-07-23 19:47:38 +08:00
樓主菊苣,能問問你對 clojure 的看法嗎 www
也是具併發能力的 lisp 方言 |
8
canesten 2014-07-23 19:50:15 +08:00 via Android
对大量括号过敏所以无法直视lisp代码
祝楼主幸福 |
11
snoopy 2014-07-23 20:43:01 +08:00
|
12
baocaixiong 2014-07-23 20:46:25 +08:00
牛
|
15
standin000 2014-07-23 22:33:35 +08:00
纯函数编程天生支持并发吧。
|
16
kedebug OP @standin000 由于函数式语言不存在状态,计算结果也不依赖于状态,也就是说所有变量都是 immutable,所以类似于
fun1(x) + fun2(y) 如果机器有 2 个核心的话,可以实现并行计算。这点在过程式语言就很难办到,因为 fun2(y) 中的变量可能会依赖 fun1(x) 的计算结果。 至于 Lisp/Scheme,R5RS 中并没有定义 thread, mutex 啊等一系列东西。而 LispEx 是达到语义级别的支持,这点是和 Go 语言类似的。 |
18
standin000 2014-07-24 16:59:33 +08:00 1
@kedebug 对啊,那需要在解释器上去实现语义并发么?另外用宏就可以实现语法糖的。
|
19
kedebug OP @standin000 多谢提醒 :)
搜了下 http://stackoverflow.com/questions/9400410/common-lisp-parallel-programming 确实 Common Lisp 确实有利用宏展开以及编译选项实现 Concurrency,感觉有点撇脚。 https://github.com/sionescu/bordeaux-threads/blob/master/src/default-implementations.lisp http://www.lispworks.com/documentation/lw60/CLHS/Body/s_eval_w.htm 作者也说了:“ Of course, due to the nature of CL, it would likely be possible to implement these features without resorting to creating a new compiler. ” 不像 Haskell 中 GHC 对于并发/并行的天然支持,在 CL 标准以及我参照的 R5RS 标准中(过于古老),都没有定义线程/进程的概念。所以我觉得 Go 语言这种现代编程语言的一些 idioms 还是很有借鉴/学习意义的(虽然早就在 FP 界提出) :) |
20
qinix 2014-07-25 11:11:39 +08:00 via iPhone
是否支持调用外部golib ?
|
21
kedebug OP @qinix 非常不错的想法。
在 LispEx 的基础上,我想是很容易扩展的,你可以定义如下类似原语: (import "fmt") (fmt/println "hello world") 但是还有个问题:Go 语言是不支持动态调用 package 的: http://stackoverflow.com/questions/8076034/how-to-import-package-by-path-from-string-in-go 所以在实现的过程中,要稍微费点周折,比如自己在 fmt 外围封装一层变成自己的 fmt.go 然后加以引用。具体感兴趣可以自己尝试下。 |