我打算开发一个编程语言, 打算和其他语言一样,刚开始用别的语言开开发,先站到巨人肩膀上,然后慢慢发展
所以我想挑选一门语言,用来开发我的 xx 编程语言
想问问大家, 用啥语言好呢
我的 xx 语言是需要跨平台的
我目前待选的语言是:rust 、go 、Python
其中 Python 比较慢,可能不会选
目前 rust 比较火, 比较倾向于 rust
想听听大家的意见
谢谢
1
IgniteWhite 2021-06-16 22:59:32 +08:00 via iPhone
当然是汇编
|
2
jimages 2021-06-16 23:19:30 +08:00 2
只需要实现一个前端,然后接 llvm,完事了
|
3
gotounix 2021-06-16 23:20:15 +08:00 1
选一门你熟悉的语言开发,成熟了以后自举。
|
4
charlie21 2021-06-16 23:23:20 +08:00
历史上完成过用本门编程语言做另一门的有哪些呢?
|
5
Jirajine 2021-06-16 23:40:50 +08:00 via Android 2
这个叫 bootstrap,在该领域 ocaml 、haskell 等函数式语言比较常用。
对编译型语言来说该语言跑的快慢与目标语言完全没关系,一般来说要快速的先把新语言最小化实现出来,然后在用该语言重写编译器,实现自举( self-host )。 |
6
3dwelcome 2021-06-17 00:48:07 +08:00
现在只有一个可见的语言一统天下,那就是 wasm 。
javascript 真的是拉垮,怒其不争,大家都喜欢用 typescript 。 可又没有普及开,只能 wasm 来扛起大梁了。 |
7
hronro 2021-06-17 00:51:46 +08:00 via iPhone 1
ocaml 吧,有官方的 LLVM Binding
|
8
levelworm 2021-06-17 01:01:03 +08:00
好奇一把新语言是准备用来做啥的?
|
9
piqizhu8 OP @jimages
词法分析,语法分析我都用 Python 写好了,卡在怎么对接 llvm,因为我不懂 c 、c++,且 llvm 这方面中文资料少, 借助翻译工具,始终过不去这个坎,卡住了 @gotounix 我目前打算用 Python 开发,不过不知道后面自举是否会很困难,因为 Python 不是静态语言 @Jirajine 我用 Python 这样的动态语言,后期自举会很复杂吗? @charlie21 很多的,市面上大多数语言都是如此的,如 python,java,rust,go 等等 @hronro 我目前掌握的语言是 Python,似乎也有 llvm bingding https mlir.llvm.org/docs/Bindings/Python/ |
10
GeruzoniAnsasu 2021-06-17 01:21:25 +08:00 1
我觉得答案可能会出乎你意料
是 java…… https://www.antlr.org/ jvm 跨平台是不是分分钟? 如果不用 antlr,一般能选的只有 yacc/bison 了,同时也意味着可以抛弃虚拟机但要写复杂得多的 IR generation 顺带一提还有 golang 版的 yacc https://pkg.go.dev/modernc.org/goyacc,所以用 golang 来写这门语言的 interpreter 也算是可以跨平台的 ---- 从问题描述来看感觉 lz 可能并没有开发一门新语言的概念,也不清楚语言要设计的方向,那我的建议是好好研究研究前 yacc/C,后 llvm |
11
piqizhu8 OP @GeruzoniAnsasu
我用 antlr+Python 开发过一个简单的脚本语言 我现在想更进一步,想让我的 xx 语言更工业级一点(更成熟), 但是我不知道未来的路如何走 我看很多语言后端都接上了 llvm,所以我也想接上,我觉得这样可能更工业级、更高大上 --- 如果不接 llvm,只在 antlr 里,我感觉似乎语言有些过于玩具了,我也不知道这个想法是否正确,这方面我是半路出家,懂得不多 可能是我担心基于 antlr 的语言 ,无法添加 高级复杂的特性吧, 都怪我太笨了 |
12
agagega 2021-06-17 02:01:51 +08:00 via iPhone
OCaml,有人还总结过为啥这语言适合用来写编译器,一下子找不到了…
|
13
ianva 2021-06-17 08:35:06 +08:00
大多都是函数式语言,ocaml , haskell, racket, 等等,毕竟 S-表达式 不就是天然的 AST 么
|
14
wangpugod2003 2021-06-17 09:10:44 +08:00
不是应该是 C 语言么?
|
15
grewer 2021-06-17 09:35:47 +08:00
用 c/c++ , 弄好了一点不虚其他语言
|
16
aristolochic 2021-06-17 11:08:53 +08:00
用函数式语言 /设计函数式语言优势实在是太大了。且不说 ML 语言的模式匹配,这些语言就算不是 Lisp 这种自己就是 AST 的,也大多十分愿意把 AST 暴露给你看,至少也是十分擅长操控 AST 。
看看 Elixir 的实现吧,基本思路是先用 Erlang 把 AST 设计出来,把 defmacro 实现一遍后,第二次迭代就能用 defmacro 把很多语法构件之外的宏( defmodule 自己、def 、if 、in,甚至|>都是啥?都是宏)都设计出来。至于词法 /语法解析也是用 Flex/Bison 那样的,只不过是 Erlang 生态的东西(叫 yecc,很明显了吧)。 剩下的工作就是用 defmacro 定义更多的宏、用 defmacro 实现不了的语法构件,写编译器 pass 实现(比如很基本的 cond 和 case )、编译 AST 、设计标准库,以及在十分必要的时候(比如 Elixir 引入新的中缀表达式|>)调整词法 /语法解析,等等。虽然工作量上没少,但开发维护起来清晰多了。 但其实考虑到 Elixir 是伪装成 Ruby 、蹭 Erlang 虚拟机和并发模型生态的真·Lisp,其实吧……设计自己的 Lisp 大概也是这个流程,还简单点儿? (以上为胡言乱语,不过用函数式语言尤其是带有 ML 血统的语言来设计新语言是有历史的。 |
17
Leviathann 2021-06-17 11:43:38 +08:00
@aristolochic 这么说 ML 叫这个名字的原因就很明显了,果然是 meta language
|