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

最近正在设计并实现一门编程语言(续)

  •  
  •   Mohanson · 98 天前 · 2220 次点击
    这是一个创建于 98 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址: https://github.com/mohanson/pydouz

    该语言前端由 Python 书写, 后端采用 LLVM. 因此原生支持 LLVM 的一切生态, 包括编译到 wasm 或 riscv 指令集(编译到 riscv 指令集已经过简单测试).

    Example: 斐波那契数列

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

    (这个操作符后置的表达式学名叫 "逆波兰表示法")

    目前还是早期开发状态, 但已经有可供运行测试的 Demo.


    前情提要: https://www.v2ex.com/t/589166

    28 回复  |  直到 2019-08-08 10:24:58 +08:00
        1
    SingeeKing   98 天前
    一直觉得 RPN 很难受。。为什么要叫优化
        2
    luoyou1014   98 天前
    都采用后缀表达式了,不如采用前缀表达式好了,前缀表达式还能将操作符等价为函数,同样能避免优先级问题。

    不过不管是后缀还是前缀,应该都不会被大众接受。
        3
    slanternsw   98 天前 via Android
    逆波兰式是给你让人写的??你让人手工画二叉树再遍历一遍给你写?
        4
    zjsxwc   98 天前
    不好阅读
        5
    PALELESS   98 天前
    后缀表达式只是便于计算机解析, 对于人而言相当相当不友好
        6
    missdeer   98 天前
    为啥前缀、后缀表达式混用?
        7
    lumotian   98 天前
    干脆做成 Lisp 算了
        8
    darksword21   98 天前
    说得好,我选择 python
        9
    aijam   98 天前
    @luoyou1014 lisp 情何以堪
        10
    luoyou1014   98 天前
    @aijam lisp 已经够小众了,我指的大众接受,至少要到 lua ruby 这一级别
        11
    kilen3a   98 天前
    逆波兰这是给人写?
        12
    nguoidiqua   98 天前 via Android
    代码是写给人看的,硬要标新立异的话,用前缀表示法感觉也要好些。
        13
    AsceticBear   98 天前
    xixi, haha
        14
    janxin   98 天前
    还是别用 def 了,用 fn 挺好的
        15
    Tomotoes   98 天前 via Android
    没有 return,即没有可读性。
        16
    Aruforce   98 天前
    非要跟习惯两道...
    你们数学公式 1 1 + =2 这么写啊?
    为不一样而不一样...
    不解决问题总想弄个新闻...
    混娱乐圈的啊...
        17
    gpra8764   98 天前
    看完之后觉得很棒,所以我选择 Python
        18
    Mistwave   98 天前
    代码是给人读的,顺便给机器运行。
    demo 看起来不伦不类,比如这个 if-or,比起常见的 if-else,除了少敲两个字符,有什么实际的意义吗?
        19
    inhzus   98 天前 via Android
    都已经用后缀表达式了,不如彻底消灭括号,所以语法应该是(滑稽):
    n 1 - fib n 2 - fib +
        20
    Mohanson   98 天前 via Android
    统一回复下:保持对世界的好奇心和宽容心。感觉上升到语法战争了…… 不同的人对 美 的认知是不一样的,在我看来因为后缀表示法天生贴合栈结构,因此我认为后缀利于计算机理解,是美的。

    不用中缀的语言有很多,比如 Lisp。世上除了恰饭语言外还有很多有意思的语言,比如 brainfuxk。
        21
    Sornets   98 天前
    @Mohanson 明年你再来看看你说的这些话,看看会不会感到尴尬
        22
    keith1126   98 天前
    @Mohanson #20

    "利于计算机理解,是美的",照你这么说,机器语言最美?

    程序语言是给人用的,所以应该优先考虑使用者的感受,至于怎么让计算机执行起来方便,这应该交给你的编译器。
        23
    Mohanson   98 天前 via Android
    @keith1126 你可以在许多 c 库中见到作者手写 asm 代码,即使是 go 这种高级语言,标准库中也大量手写汇编,比如 go 标准库的加密库,早期有许多汇编, 比如 rc4 算法是纯汇编实现的,今年才大部分用 go 原生代码进行了替换。汇编直接操作的 cpu 寄存器,这可太不考虑使用者的感受了。我之前写的开源项目,用的测试用例就是零几年一位开发者写的纯汇编,熟悉后读起来并不比高级语言差。机器码和高级语言并不是有你没我的状态,他们都将长期共存,希望你能理解这一点。我说计算机容易理解所以美的意思并不是“机器容易理解牛逼,所以高级语言就不牛逼”的意思,它们不存在因果性。

    中缀表示法是上世纪波兰数学家提出的,而 Lisp 语言的成功已经证明小部分计算机工程师可以接受非中缀表示法。

    你所说的交给编译器解决是对的,有些语言会做前置的预编译?可能是这个名词,就是用户用中缀写,但是预编译阶段会将中缀替换为前缀或后缀再交给真正的编译器,有点类似编译器在真正编译前会自动给每行加分号一样。
        24
    alcarl   98 天前 via Android   ♥ 1
    @Mohanson 机器方便的还是交给机器,人方便的交给人。汇编好不好不重要,重要的是它不适用于绝大多数人。手撸一个编程语言应该也是一样。当然自己写着玩的无所谓了,美的标准不好讨论一千个人有一千个样子
        25
    fluorinedog   97 天前 via Android
    tokenizer 和 parser 是编译器的基本操作,这一块都要迁就机器只能说明太菜。
    还拿 lisp 举例,当年是什么 CPU,多大内存?
    低层次级别优化,都是先考虑 intrinsic,不行再上 llvm ir,手写汇编维护性是最差的,手动分配的寄存器也不见得比图染色算法搞得好。
        26
    cstj0505   97 天前
    @fluorinedog lz 加油,先不用考虑使用者感受。这里没几个人手写过编译器,大部分人都是拿自己用的熟的语言和你的对比。很多事情不是一次就能成功的,但是你只要做了,至少在编译器这块,你就进了这个门槛。至于好与不好,别人用不用,别人怎么说,那是后话了。
        27
    Mohanson   97 天前 via Android
    @cstj0505 谢谢你的鼓励!!
        28
    wslzy007   97 天前
    开源过一个类 c 的脚本引擎,供参考: https://github.com/lazy-luo/lazyExcel
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   935 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 20:57 · PVG 04:57 · LAX 12:57 · JFK 15:57
    ♥ Do have faith in what you're doing.