V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
poulsen
V2EX  ›  程序员

tu-lang 一款 0 依赖,支持动态、静态的编程语言,已实现自举

  •  8
     
  •   poulsen · 2023-05-16 17:32:13 +08:00 · 4749 次点击
    这是一个创建于 374 天前的主题,其中的信息可能已经有所发展或是发生改变。

    仓库地址: https://github.com/tu-lang/tu

    现在 tulang 终于迈出了第一步,已实现自举,已自举实现了 compiler,std,runtime ,覆盖了上百个测试用例

    tu  [options] file.tu        
        build *.tu              编译 tulang 代码成汇编后进行链接生成二进制可执行文件
        -s  *.tu|dir            编译为 tulang 代码为 linux-amd64 汇编文件
        -c  *.s |dir            编译汇编为 elf&pecoff 跨平台可重定向 cpu 指令集文件
        -o  *.o |dir            链接 elf&pecofff 可重定向文件生成最终执行程序
        -d                      开启 trace 日志打印编译详细过程
        -gcc                    支持通过 gcc 链接生成最终可执行程序
        -g                      编译 tu 文件时带上 debug 段信息,支持栈回溯
        -std                    编译 runtime&std 相关内置库代码
    

    到现在为止真正的实现了 0 依赖,坚持写了 4-5 年了,终于可以到试用测试阶段了,之前一直没有宣传过,今天也是第一次在这个论坛发帖,也算是激励一下自己吧

    多年来就一直想不清楚一个问题:国内大牛这么多,为什么都在卷高级的优化,到现在为止都没有一个能用的上的真正意义的普通国产编程语言。

    毕业多年来就一直想自己做一款对程序员友好的语言,感觉现在的语言为了高性能、安全,往越来越极端的方向走,现在工作中就是用的 rust ,简直折磨人,和当初用 php 时比起来,我认为动态语言才是更符合未来的方向,

    但动态语言性能差,而且都是解释型,扩展差,通常通过写 c 语言动态库来实现增加一些底层的特性,最明显的就是 php 生态有个 swoole 扩展,就是写了一套 epoll 网络异步框架动态库,给 php 用,实际用起来效果也够用了,性能也比较好,但这种方式就是有点折磨人

    所以我写 tulang 的目标本来就没有很大,只想走动态语言的方向,同时支持静态写法(自己写底层,自己写 syscall), 平时主要的就写写动态语法,没有心智负担,遇到性能问题的时候 就用静态语法写,也非常方便

    还有一个目标就是,像 php ,python 这种都依赖 c ,gcc ,没有实现自举,环境依赖非常严重,所以 tulang 也要有自举,自己汇编自己链接,100%原汁原味

    最后欢迎大家试用,可以一起优化和做生态,我也会继续做下去,希望有一天能正式发生产版,成为国内的通用编程语言,也谢谢大家的 star

    54 条回复    2023-08-28 17:46:20 +08:00
    superares
        1
    superares  
       2023-05-17 08:20:13 +08:00 via iPhone   ❤️ 1
    Readme 里面 License 时间可以改一下了
    poulsen
        2
    poulsen  
    OP
       2023-05-17 09:21:48 +08:00
    @superares 好的 谢谢
    veike
        3
    veike  
       2023-05-17 21:22:25 +08:00 via Android
    国内这么多搞编程语言的了吗,😅
    不管咋样先支持一个
    faceair
        4
    faceair  
       2023-05-17 21:36:10 +08:00
    猛人 👍
    w568w
        5
    w568w  
       2023-05-17 21:39:36 +08:00   ❤️ 1
    不错啊,先支持一下。目前支持 FFI 吗?有可能直接接入其他语言的生态来弯道超车吗?

    p.s. 这语法好像 Rust 和 Go 的私生子😂
    chaleaochexist
        6
    chaleaochexist  
       2023-05-17 21:43:46 +08:00   ❤️ 2
    有才啊 前有凹后有凸...
    aloxaf
        7
    aloxaf  
       2023-05-17 22:10:42 +08:00   ❤️ 2
    起手就完成了自举,看得出来 LZ 是在认真对待这件事。不过我对文中几点我想提一下自己的看法。

    > 多年来就一直想不清楚一个问题:国内大牛这么多,为什么都在卷高级的优化,到现在为止都没有一个能用的上的真正意义的普通国产编程语言。

    因为「为了国产而国产」实在没意义,以「国产」为卖点只能吸引外行的领导,吸引不到开发者。
    而且要脸的作者,都不会大张旗鼓地以「国产」为卖点来宣传自己的语言——甚至我看了下 LZ 你的项目主页,好像通篇也没提到国产两字吧 2333 。


    > 毕业多年来就一直想自己做一款对程序员友好的语言,感觉现在的语言为了高性能、安全,往越来越极端的方向走,现在工作中就是用的 rust ,简直折磨人,和当初用 php 时比起来,我认为动态语言才是更符合未来的方向,

    我倒是认为这里反了:应该是早期大家只在乎程序员写的爽就行了,但是随着软件规模越来越大,大家才开始慢慢意识到静态强类型的必要性。
    woshipanghu
        8
    woshipanghu  
       2023-05-17 22:45:09 +08:00 via iPhone
    大佬🐮🐮
    确实动态语言用起来真的方便 开发起来也方便
    yrj
        9
    yrj  
       2023-05-17 22:48:56 +08:00
    虽然但是我这辈子应该可能是不会用到的,但我也要说一句大佬牛逼
    kylix
        10
    kylix  
       2023-05-17 22:55:47 +08:00
    大佬牛逼(破音)
    flyqie
        11
    flyqie  
       2023-05-18 00:56:45 +08:00
    看了下代码,挺好奇楼主在语法设计这边的灵感来源是哪些语言..

    有种熟悉但不完全熟悉的感觉..
    inhzus
        12
    inhzus  
       2023-05-18 01:29:05 +08:00
    不管好不好用,但这个仓库本身真是好有意思诶
    laoxigua
        13
    laoxigua  
       2023-05-18 02:35:03 +08:00
    挺有意思 可以完善下文档吗 周末研究研究
    ysmood
        14
    ysmood  
       2023-05-18 03:36:19 +08:00 via Android
    这个不也能吗?而且还有 REPL https://julialang.org/
    Imindzzz
        15
    Imindzzz  
       2023-05-18 08:23:20 +08:00 via Android
    挺好的,不过这名字我就联想到 屠
    weiwenhao
        16
    weiwenhao  
       2023-05-18 10:04:22 +08:00
    牛逼,已经自举了,就表示经过了项目的验证,是可以使用的编程语言
    poulsen
        17
    poulsen  
    OP
       2023-05-18 10:27:19 +08:00
    @ysmood 好的 我学习下
    poulsen
        18
    poulsen  
    OP
       2023-05-18 10:28:21 +08:00
    @weiwenhao 哈哈,不想泼大家冷水,目前只是能自举了,但还少了很多标准库比如 net , 还有在做的 rust 的栈协程机制
    poulsen
        19
    poulsen  
    OP
       2023-05-18 10:28:46 +08:00
    @weiwenhao 大家也可以一起来写 std
    poulsen
        20
    poulsen  
    OP
       2023-05-18 10:28:56 +08:00
    @inhzus 谢谢
    poulsen
        21
    poulsen  
    OP
       2023-05-18 10:29:59 +08:00
    @laoxigua 文档还在做,因为还有一些特性还没做完,第一阶段是实现自举,后面就是优化和加特性了,文档可能会慢点,但 tu/tests 下有很多测试用例,可以看看测试用例
    poulsen
        22
    poulsen  
    OP
       2023-05-18 10:34:21 +08:00
    @aloxaf 哈哈 不知道怎么回你了,你说的现状很正确,但我个人认为整个市场动态语言的场景还是非常大的,不是所有项目都是静态的,动态还是有他的优势的
    poulsen
        23
    poulsen  
    OP
       2023-05-18 10:36:44 +08:00
    @w568w 哈哈,目前可以指定编译出来的静态库 实现了 c 的 abi ,可以通过寄存器传参来调用函数,默认是栈传递参数
    可以给 c 调用,也可以掉用 c 的,非常方便,但其他语言还没想过
    assclb
        24
    assclb  
       2023-05-18 11:28:55 +08:00
    大佬牛的,点个赞
    assclb
        25
    assclb  
       2023-05-18 11:29:39 +08:00
    很有趣,点个 star
    AstroProfundis
        26
    AstroProfundis  
       2023-05-18 17:27:58 +08:00   ❤️ 1
    一般来说新语言要解决的问题是现有语言在某方面不方便、不好用或者不够简洁、不够高效之类的,而“国产”并不是创造一个新编程语言足够有力的理由:如果目标是“自主可控”,投入资源到许多开放源码的语言中去都可以实现,强调“国产”本身反而会限制全球开发者参与和全球用户使用的空间,对这门语言的长期发展不见得有利。

    楼主可以多强调新语言相对现有流行语言的区别以及优势应用场景,感觉会更能吸引到参与者和用户

    已 star
    huyangq
        27
    huyangq  
       2023-05-18 17:29:06 +08:00
    卧槽 牛逼
    Alias4ck
        28
    Alias4ck  
       2023-05-18 17:52:10 +08:00
    这个语言的命名,让我想到了另一个凹语言哈哈哈 ( https://wa-lang.org/),严重怀疑你们是一对,很重的 go 语言味道
    zyy314680012
        29
    zyy314680012  
       2023-05-18 18:04:05 +08:00 via Android
    piaodazhu
        30
    piaodazhu  
       2023-05-18 18:26:30 +08:00
    太强了哥
    Chipmunker
        31
    Chipmunker  
       2023-05-18 18:30:34 +08:00
    点赞!
    Chingim
        32
    Chingim  
       2023-05-18 22:48:57 +08:00
    向您学习!
    Braisdom
        33
    Braisdom  
       2023-05-19 09:12:02 +08:00
    很好的尝试,最近我在写 SQL 的编译器,大家都在往更底层技术的创新,很棒的想法...
    lizhenda
        34
    lizhenda  
       2023-05-19 09:15:34 +08:00
    start 了,确实值得肯定和支持!
    Braisdom
        35
    Braisdom  
       2023-05-19 09:17:32 +08:00
    楼主要以看一下 LLVM ,目前大都数语言的跨平台都在往这个方向发展,有些时候站在别人的肩上也不会太丢人。

    至少从高级语言 到汇编这块 LLVM 处理的还是很棒的。
    opentrade
        36
    opentrade  
       2023-05-19 09:28:19 +08:00
    这下凹凸合璧了
    lanten
        37
    lanten  
       2023-05-19 09:29:13 +08:00
    👍👍👍
    47d7tEUBp521E8fJ
        38
    47d7tEUBp521E8fJ  
       2023-05-19 09:36:20 +08:00
    支持,我也同意动态语言才是未来的方向,动态语言也可以强类型,部署也可以静态。
    kaesi0
        39
    kaesi0  
       2023-05-19 09:44:29 +08:00
    牛批!
    feather12315
        40
    feather12315  
       2023-05-19 09:45:08 +08:00 via Android
    🐮
    8520ccc
        41
    8520ccc  
       2023-05-19 09:51:41 +08:00 via iPhone
    star 支持一下!
    clino
        42
    clino  
       2023-05-19 11:54:58 +08:00
    ”compiler 纯动态语法,asmer 纯静态语法,linker 动静混合语法“
    需要文档来理解一下。
    先赞一个!
    clino
        43
    clino  
       2023-05-19 11:56:54 +08:00
    RbtreeNode* left 这是支持指针吗?
    会不会像 c/c++那样不稳定或引入安全问题?
    alexsunxl
        44
    alexsunxl  
       2023-05-19 12:04:51 +08:00
    @xujinhui1 动态有动态的优势,静态有静态的优势,不能一概而论,偏底层还是需要 c ,c++,rust 这些压榨机器性能的。
    TanLian
        45
    TanLian  
       2023-05-19 12:10:03 +08:00
    这门语言的卖点是啥呢?是性能还是安全性还是别的什么
    admpubcom
        46
    admpubcom  
       2023-05-19 12:48:18 +08:00 via iPhone
    大佬厉害👍。这个中文名是叫土语吗🐶
    ohwind
        47
    ohwind  
       2023-05-19 13:59:45 +08:00
    license 是什么,没有明确许可用起来不放心啊。另外,动态静态用途不一需求不一,不知道你的是怎么实现的动态转动态,是编译成静态时塞一个 runtime ?如果确实是同时兼顾动态静态类型,能编译成机器码,还能和动态语言一样 gc ,那确实挺行的。
    clino
        48
    clino  
       2023-05-19 14:39:14 +08:00
    建议能 make install 到用户目录,现在好像只能 sudo install 到系统里?
    Nazz
        49
    Nazz  
       2023-05-19 15:33:02 +08:00
    可以在开发的时候解释执行, 部署的时候静态链接编译吗?
    lijiangang886
        50
    lijiangang886  
       2023-05-19 17:02:29 +08:00
    有一说一这年头编程语言真不值钱,值钱的是能解决某领域内痛点并且在发展到一定体量之前不会被其他语言迅速吸收其痛点特性然后抄死的语言,只要符合这个条件,什么垃圾都能火,比如 PHP ,不符合的,哪怕语法特性再优雅都白扯
    ChrisCyler
        51
    ChrisCyler  
       2023-05-19 17:10:43 +08:00
    不管怎么样,star 支持一下
    xgdgsc
        52
    xgdgsc  
       2023-05-20 10:15:47 +08:00
    同感,动态语言可选静态是最好的,所以非常喜欢 julia, 现在就是 julia 编译 https://github.com/JuliaLang/PackageCompiler.jl 出来非常大, 楼主有相关知识的话,给 julia 的静态编译 https://github.com/tshort/StaticCompiler.jl 做点贡献应该也是不错的选择, 能够覆盖更大的用户面.
    tianshunovel2
        53
    tianshunovel2  
       2023-05-20 13:35:43 +08:00 via Android
    支持楼主!
    但是我感觉评论区的某些发言有些好笑。
    楼主想怎么做就怎么做,这是人类的自由,这是楼主的自由。
    竟然有人说楼主这样宣传如何如何没有意义,这么做如何如何不正确,笑死,他人的人生意义是你我可以决定的。
    怪不得国内创新少,因为有太多人给你定指标定规范,你不能这样,不能那样,不能宣传国产,必须国际化,最后就是给你套上各种形式的加锁让你与他人赛跑,然后还嘲笑你的笨拙!
    楼主不需要他人指导怎么实现意义,请在技术上给予其反馈和联系。
    veike
        54
    veike  
       270 天前
    老哥项目没动静了啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2535 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:54 · PVG 13:54 · LAX 22:54 · JFK 01:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.