V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
piqizhu8
V2EX  ›  问与答

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

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

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

    所以我想挑选一门语言,用来开发我的 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   ·   实用小工具   ·   5648 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:53 · PVG 14:53 · LAX 22:53 · JFK 01:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.