V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
redwing2003
V2EX  ›  编程

想看下有多少人有兴趣自创一种程序语言

  •  
  •   redwing2003 · 2021-01-10 20:46:32 +08:00 · 2070 次点击
    这是一个创建于 1442 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有没有尝试过的人,想做怎样的?

    7 条回复    2021-01-11 10:03:28 +08:00
    ZingLix
        1
    ZingLix  
       2021-01-10 20:57:37 +08:00
    拿 LLVM 写过一个,想的是简化 C++,但写着写着发现我这想法不如直接去用 Rust

    github.com/ZingLix/R-Cpp,有兴趣的可以看看 test/src.rpp 和 Wiki,分别是已经实现的和其他的想法

    其实我的设计都是拍脑袋想出来的,真写起来细节要考虑的还真的很多
    thedrwu
        2
    thedrwu  
       2021-01-10 21:02:41 +08:00 via Android
    谁没给自己的程序写过 config 语言的解释器?

    若是创造没有新意的语言,只是造个轮子而已。
    Mohanson
        3
    Mohanson  
       2021-01-10 21:11:17 +08:00
    python + llvm 自学了几周, 写过一门叫 douz(最靠近撒哈拉沙漠的人族聚居地) 的简单语言, 它的斐波那契函数长这样:


    ```
    def fib(n) {
    if n 3 < {
    n;
    } or {
    fib(n 1 -) fib(n 2 -) +;
    };
    }

    def main() {
    fib(10); # Exit with code 89
    }

    ```

    https://github.com/mohanson/pydouz/blob/master/examples/fib.dz

    没精力继续做下去, 感觉编译器前端和后端都是体力活, 编译器中端才是精华所在(数学, 统计学... ...). 但是用了 llvm, 基本上就只能去写前端了.
    Mohanson
        4
    Mohanson  
       2021-01-10 21:17:52 +08:00
    我觉得更合理的学习方式是为一门已经存在的语言写

    1) 解释器
    2) 设计解释器的中间代码
    3) 中间代码优化
    4) 基于中间代码的 AOT 编译器
    5) 解释器 + JIT 编译器

    我觉得 Go 拿掉 goroutine, 写 Go 的解释器开始就挺不错的.
    redwing2003
        5
    redwing2003  
    OP
       2021-01-10 22:09:11 +08:00
    那我问一下大家喜欢头文件还是命名空间 module 还是 private public protected 做访问控制
    chengs
        6
    chengs  
       2021-01-11 00:36:33 +08:00 via iPhone
    这个是涉及多元的科学,不是兴趣就能搞定的。看起来是自创实际在模仿。
    love
        7
    love  
       2021-01-11 10:03:28 +08:00
    现在的语言都互相抄得集大成了,以前烂得一 b 的没设计 javascript 现在都出人意料的好用了,写起来比有设计的 python 都舒服
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2785 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 113ms · UTC 14:36 · PVG 22:36 · LAX 06:36 · JFK 09:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.