我发现了自研编程语言的一条出路

xuld 2026-07-23 17:29 1

一个月前,我将编译器的 23 万行源码全部移植到了自研编程语言。


功能不变,但代码量直接缩减到了 19 万行。


然后这个月用自研的语言继续自举开发,感觉越用越爽,也终于感受到了自研的价值。




之前一直被质疑做小众语言毫无意义,但现在觉得:


生产力才是硬道理。


产品初期,不需要寻求他人认可。


只要自己有用,那就 OK 了。


等自己用了一段时间,产品也稳定后,必然能找到同样觉得它好用的用户。




在我的语言里面,最重要的功能是“模式匹配、自动导入、自动构造函数、编译期装饰器、部分类”,之前的 4 万行代码就是靠这些功能省下来的。


再也不用等主流语言支持,已经先用上了,确实很爽。


不过,目前还有很多功能没实现。如果都实现了,开发效率还能再提升几个台阶。




我觉得未来编程语言的价值不是为了让代码写起来更短,而是为了让代码读起来更清晰、测试起来更轻松,因为 AI 编程是趋势。


我将其他语言的代码移植到自己的语言时,是写了一个小工具自动翻译的,而不是人工移植。这样正确性和效率都高很多。


面向 AI 的编程语言,需要支持更多的静态分析和自我修复能力,同时也需要暴露更多的 LSP API 。


未来编程语言的主战场,不是比谁的代码写起来更快,而是 AI 生成什么语言能更正确、token 更少。

最新回复 (19)
  • llsquaer 07-23 17:46
    1
    你倒是发出来观摩下啊
  • cc9910 07-23 17:49
    2
    娱乐就好,其实有很多小语种编程,但是没生态有什么用,难道一人维护全行业?
  • xuld 楼主 07-23 18:19
    3
    @cc9910 初期,生态不需要自己建,可以直接导入 go 的包,然后也做了工具直接将 go 的代码翻译过来。其他配套工具比如 ide 插件,都已经完善了
  • xuld 楼主 07-23 18:25
    4
    @llsquaer 语法风格和主流语言差不多,我认为多数程序员看了都不会反感。比如这是一段实际的代码:

    ```
    private getArrayElementTypeNode(node: TypeNode) {
    match (node) {
    case ParenthesizedTypeNode:
    return getArrayElementTypeNode(node.type)
    case ArrayLiteralTypeNode:
    if (node.elements.length == 1) {
    node = node.elements[0]
    if (node is ArrayLiteralTypeNode.RestElement) {
    return getArrayElementTypeNode(node.type)
    }
    }
    case ArrayTypeNode:
    return node.elementType
    }
    }
    ```

    优势在语言的自动分析、性能优化的能力。
  • june4 07-23 19:10
    5
    这个语言可以用 ai vibe 吗
  • xuld 楼主 07-23 19:31
    6
    @june4 AI 没学过新语言。

    但 AI 可以正确理解这个语言写的代码(因为语法和主流语言差不多,AI 能猜对语法啥意思)。

    只是让他写这个语言的代码,容易按其他语言的习惯写了,容易写错。

    所以,我做了一个工具,AI 只生成 go 的代码,然后通过工具自动翻译成新语言。

    我自己就是这样用的。
  • kissthekidlu 07-23 22:49
    7
    人家说 ai 都是用现有的代码训练了,新的语言没有什么优势.
  • redbule 07-23 23:33
    8
    怎么感觉你说的就是 moonbit 在做的…
  • xinyu391 07-24 09:23
    9
    内存管理是 手动还是 GC ?

    能创造编程语言,牛
    能写编译器,更牛
  • skuuhui 07-24 09:27
    10
    我觉得未来不再需要编程语言或者不再需要人类能看得懂和习惯的编程语言。
  • xuld 楼主 07-24 09:44
    11
    @xinyu391 我的语言是比较创新的设计:可选 GC ,意思是手动和 GC 都支持,而且是自动的:
    只要你的代码里出现了 new XX(),那就是自动 GC
    如果代码没有 new XX(),那就没有 GC ,这时内存有多种方式。
    1. 通过 Allocator.allocate<XX>() 申请,那就和 C 一样,需要开发者自己调用 Allocator.free() 释放。
    2. 通过 Allocator.createReferenceCounter<XX>() 申请,那就引用计数。
    3. 通过 Allocator.createSmartPointer<XX>() 申请,那就和 Rust 一样,编译器在作用域释放。
  • 1018ji 07-24 09:56
    12
    放出来让我们小白学习一下
  • cloverzrg2 07-24 10:09
    13
    "能自动翻译为 go 语言", go 的 typescript 吗
  • SmiteChow 07-24 10:13
    14
    相信我写法只选一种是正道,人类需要束缚。ai 更甚。
  • xuld 楼主 07-24 10:23
    15
    @1018ji 语言我是从 2015 立项的,到现在 11 年,开发的其实比较完善了。

    之前的实践证明,放出来的意义不大,因为不会有路人真的去用这门语言,更不会有人贡献有质量的代码。

    我目前的策略是:

    不需要向外人证明这个语言很好用。

    只要我自己,以及少数愿意使用它的程序员,在使用了这门语言之后,开发效率确实提高了,那就继续开发下去。

    我不靠这个项目盈利,因为靠不了。

    但如果我自己靠这门语言,干活的效率比其他程序员高很多,那就很容易从其他程序员嘴里抢饭吃。

    所以现在践行方向是:语言不公开,一切以提升自己开发效率为目的。

    如果你认为这个项目可能对你也有帮助,可以发邮件私聊。
  • panlatent 07-24 10:25
    16
    自己写编程语言,操作系统可能很好玩,但 99.99% 都是死路一条。
  • xuld 楼主 07-24 10:32
    17
    @SmiteChow 对的。一个功能只需要一种写法即可,大家只追求早点干完活下班,而不关心代码是否“优雅”
  • levelworm 07-24 11:24
    18
    需要写工具和文档吗?你这个自举了已经比较成熟了。
  • xuld 楼主 07-24 11:38
    19
    @levelworm 凡是自己做业务项目时用的到的工具都开发完了,比如 ide 插件、调试器、mcp 插件。
    文档没写,因为就自己以及几个熟人用,要啥文档。
    后面准备补一些文档,不过不是给人看的,是给 ai 看的
* 帖子来源V2EX
返回