summerLast
V2EX  ›  科技

用 rust 撸了一个 lisp 解释器

  •  
  •   summerLast · Jul 16, 2022 · 2080 views
    This topic created in 1395 days ago, the information mentioned may be changed or developed.

    前端时间正好有空就学习了 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)
        ))))
    

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

    9 replies    2022-07-20 10:40:49 +08:00
    zagfai
        1
    zagfai  
       Jul 16, 2022   ❤️ 1
    手动点赞。
    summerLast
        2
    summerLast  
    OP
       Jul 16, 2022
    @zagfai 谢谢
    summerLast
        3
    summerLast  
    OP
       Jul 16, 2022
    还可以中文编程
    ```
    (
    (define 定义 define)
    (定义 定义函数 defun)
    (定义 显示 display)
    (定义 换行 newline)

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

    (打印 '你好 中国')
    )
    ```
    kkkiio
        4
    kkkiio  
       Jul 16, 2022   ❤️ 1
    你好像没实现 GC ,Arc<RwLock<T>> 有循环引用问题吧
    yuelang85
        5
    yuelang85  
       Jul 16, 2022   ❤️ 1
    summerLast
        6
    summerLast  
    OP
       Jul 18, 2022
    @kkkiio 是的 变量相关的信息现在全部放在 env 里面了 ,env 持有者结束之后 env 就结束了 env 是一个树形的结构
    kkkiio
        7
    kkkiio  
       Jul 18, 2022 via iPhone
    @summerLast set-car! 就能制造循环引用了
    summerLast
        8
    summerLast  
    OP
       Jul 19, 2022
    @kkkiio 是的,只有引用次数归 0 后才会被 gc
    summerLast
        9
    summerLast  
    OP
       Jul 20, 2022
    捞一下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5314 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 03:57 · PVG 11:57 · LAX 20:57 · JFK 23:57
    ♥ Do have faith in what you're doing.