当前哪个编程语言适合用来开发新编程语言?

2021-06-16 22:37:30 +08:00
 piqizhu8

我打算开发一个编程语言, 打算和其他语言一样,刚开始用别的语言开开发,先站到巨人肩膀上,然后慢慢发展

所以我想挑选一门语言,用来开发我的 xx 编程语言

想问问大家, 用啥语言好呢

我的 xx 语言是需要跨平台的

我目前待选的语言是:rust 、go 、Python

其中 Python 比较慢,可能不会选

目前 rust 比较火, 比较倾向于 rust

想听听大家的意见

谢谢

2318 次点击
所在节点    问与答
19 条回复
IgniteWhite
2021-06-16 22:59:32 +08:00
当然是汇编
jimages
2021-06-16 23:19:30 +08:00
只需要实现一个前端,然后接 llvm,完事了
gotounix
2021-06-16 23:20:15 +08:00
选一门你熟悉的语言开发,成熟了以后自举。
charlie21
2021-06-16 23:23:20 +08:00
历史上完成过用本门编程语言做另一门的有哪些呢?
Jirajine
2021-06-16 23:40:50 +08:00
这个叫 bootstrap,在该领域 ocaml 、haskell 等函数式语言比较常用。
对编译型语言来说该语言跑的快慢与目标语言完全没关系,一般来说要快速的先把新语言最小化实现出来,然后在用该语言重写编译器,实现自举( self-host )。
3dwelcome
2021-06-17 00:48:07 +08:00
现在只有一个可见的语言一统天下,那就是 wasm 。

javascript 真的是拉垮,怒其不争,大家都喜欢用 typescript 。

可又没有普及开,只能 wasm 来扛起大梁了。
hronro
2021-06-17 00:51:46 +08:00
ocaml 吧,有官方的 LLVM Binding
levelworm
2021-06-17 01:01:03 +08:00
好奇一把新语言是准备用来做啥的?
piqizhu8
2021-06-17 01:20:32 +08:00
@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/
GeruzoniAnsasu
2021-06-17 01:21:25 +08:00
我觉得答案可能会出乎你意料

是 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
piqizhu8
2021-06-17 01:27:25 +08:00
@GeruzoniAnsasu

我用 antlr+Python 开发过一个简单的脚本语言

我现在想更进一步,想让我的 xx 语言更工业级一点(更成熟), 但是我不知道未来的路如何走

我看很多语言后端都接上了 llvm,所以我也想接上,我觉得这样可能更工业级、更高大上

---

如果不接 llvm,只在 antlr 里,我感觉似乎语言有些过于玩具了,我也不知道这个想法是否正确,这方面我是半路出家,懂得不多

可能是我担心基于 antlr 的语言 ,无法添加 高级复杂的特性吧,

都怪我太笨了
agagega
2021-06-17 02:01:51 +08:00
OCaml,有人还总结过为啥这语言适合用来写编译器,一下子找不到了…
ianva
2021-06-17 08:35:06 +08:00
大多都是函数式语言,ocaml , haskell, racket, 等等,毕竟 S-表达式 不就是天然的 AST 么
wangpugod2003
2021-06-17 09:10:44 +08:00
不是应该是 C 语言么?
grewer
2021-06-17 09:35:47 +08:00
用 c/c++ , 弄好了一点不虚其他语言
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 血统的语言来设计新语言是有历史的。
Leviathann
2021-06-17 11:43:38 +08:00
@aristolochic 这么说 ML 叫这个名字的原因就很明显了,果然是 meta language
mmdsun
2021-06-17 12:45:38 +08:00
@charlie21 自举?这种应该有很多。Java in Java 虚拟机,Python 也有自举。
tsutomu
2021-06-18 16:42:48 +08:00
@3dwelcome 写原生 wasm 和写汇编的感觉差不多,与其相信 wasm 会统一天下,我更信原生 ts 或者 go 开发前端。

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

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

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

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

© 2021 V2EX