用 rust 撸了一个 lisp 解释器

2022-07-16 17:46:28 +08:00
 summerLast

前端时间正好有空就学习了 rust 然后用它写了一个lisp 的解释器 这里有个 liunx_x86 版的可执行文件 可以下载下来把玩

有两种模式 一种是 cmd 命令行的形式,一种是直接加载文件运行的模式

在原有 scheme 方言的基础上增加了 tcp 的服务器功能

(
    (define f (call-with-input-file "./demo.html" read-string))
    (call-with-tcp-listener "127.0.0.1:8088" ( lambda (in) (
       (display  (byte-vector->string (read-byte-vector in 4096)))
       (string-append "HTTP/1.1 200 OK\r\n\r\n" f)
    ))))

欢迎大家讨论,也看看后续是否继续迭代新特性

1392 次点击
所在节点   科技
9 条回复
zagfai
2022-07-16 17:52:31 +08:00
手动点赞。
summerLast
2022-07-16 17:53:41 +08:00
@zagfai 谢谢
summerLast
2022-07-16 18:00:19 +08:00
还可以中文编程
```
(
(define 定义 define)
(定义 定义函数 defun)
(定义 显示 display)
(定义 换行 newline)

(定义函数 打印 (打印的字)
(显示 打印的字)
(换行)
)

(打印 '你好 中国')
)
```
kkkiio
2022-07-16 18:36:35 +08:00
你好像没实现 GC ,Arc<RwLock<T>> 有循环引用问题吧
yuelang85
2022-07-16 20:33:36 +08:00
summerLast
2022-07-18 10:37:43 +08:00
@kkkiio 是的 变量相关的信息现在全部放在 env 里面了 ,env 持有者结束之后 env 就结束了 env 是一个树形的结构
kkkiio
2022-07-18 18:55:18 +08:00
@summerLast set-car! 就能制造循环引用了
summerLast
2022-07-19 09:05:10 +08:00
@kkkiio 是的,只有引用次数归 0 后才会被 gc
summerLast
2022-07-20 10:40:49 +08:00
捞一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/866654

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX