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

2019-08-07 14:44:19 +08:00
 Mohanson

项目地址: 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

3646 次点击
所在节点    程序员
28 条回复
Sornets
2019-08-07 17:22:13 +08:00
@Mohanson 明年你再来看看你说的这些话,看看会不会感到尴尬
keith1126
2019-08-07 18:05:38 +08:00
@Mohanson #20

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

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

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

你所说的交给编译器解决是对的,有些语言会做前置的预编译?可能是这个名词,就是用户用中缀写,但是预编译阶段会将中缀替换为前缀或后缀再交给真正的编译器,有点类似编译器在真正编译前会自动给每行加分号一样。
alcarl
2019-08-08 00:31:06 +08:00
@Mohanson 机器方便的还是交给机器,人方便的交给人。汇编好不好不重要,重要的是它不适用于绝大多数人。手撸一个编程语言应该也是一样。当然自己写着玩的无所谓了,美的标准不好讨论一千个人有一千个样子
fluorinedog
2019-08-08 05:33:54 +08:00
tokenizer 和 parser 是编译器的基本操作,这一块都要迁就机器只能说明太菜。
还拿 lisp 举例,当年是什么 CPU,多大内存?
低层次级别优化,都是先考虑 intrinsic,不行再上 llvm ir,手写汇编维护性是最差的,手动分配的寄存器也不见得比图染色算法搞得好。
cstj0505
2019-08-08 09:22:17 +08:00
@fluorinedog lz 加油,先不用考虑使用者感受。这里没几个人手写过编译器,大部分人都是拿自己用的熟的语言和你的对比。很多事情不是一次就能成功的,但是你只要做了,至少在编译器这块,你就进了这个门槛。至于好与不好,别人用不用,别人怎么说,那是后话了。
Mohanson
2019-08-08 09:35:16 +08:00
@cstj0505 谢谢你的鼓励!!
wslzy007
2019-08-08 10:24:58 +08:00
开源过一个类 c 的脚本引擎,供参考: https://github.com/lazy-luo/lazyExcel

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

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

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

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

© 2021 V2EX