当前哪个编程语言适合用来开发新编程语言? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
piqizhu8
V2EX    问与答

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

  • &nsp;
  •   piqizhu8 2021-06-16 22:37:30 +08:00 2708 次点击
    这是一个创建于 1578 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    想听听大家的意见

    谢谢

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

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

    可又没有普及开,只能 wasm 来扛起大梁了。
    hronro
        7
    hronro  
       2021-06-17 00:51:46 +08:00 via iPhone   1
    ocaml 吧,有官方的 LLVM Binding
    levelworm
        8
    levelworm  
       2021-06-17 01:01:03 +08:00
    好奇一把新语言是准备用来做啥的?
    piqizhu8
        9
    piqizhu8  
    OP
       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
        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
    piqizhu8
        11
    piqizhu8  
    OP
       2021-06-17 01:27:25 +08:00
    @GeruzoniAnsasu

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

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

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

    ---

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

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

    都怪我太笨了
    agagega
        12
    agagega  
       2021-06-17 02:01:51 +08:00 via iPhone
    OCaml,有人还总结过为啥这语言适合用来写编译器,一下子找不到了…
    ianva
        13
    ianva  
       2021-06-17 08:35:06 +08:00
    大多都是函数式语言,ocaml , haskell, racket, 等等,毕竟 S-表达式 不就是天然的 AST 么
    wangpugod2003
        14
    wangpugod2003  
       2021-06-17 09:10:44 +08:00
    不是应该是 C 语言么?
    grewer
        15
    grewer  
       2021-06-17 09:35:47 +08:00
    用 c/c++ , 弄好了一点不虚其他语言
    aristolochic
        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 血统的语言来设计新语言是有历史的。
    Leviathann
        17
    Leviathann  
       2021-06-17 11:43:38 +08:00
    @aristolochic 这么说 ML 叫这个名字的原因就很明显了,果然是 meta language
    mmdsun
        18
    mmdsun  
       2021-06-17 12:45:38 +08:00 via Android
    @charlie21 自举?这种应该有很多。Java in Java 虚拟机,Python 也有自举。
    tsutomu
        19
    tsutomu  
       2021-06-18 16:42:48 +08:00
    @3dwelcome 写原生 wasm 和写汇编的感觉差不多,与其相信 wasm 会统一天下,我更信原生 ts 或者 go 开发前端。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1087 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 18:18 PVG 02:18 LAX 11:18 JFK 14:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86