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

国产系统级编程语言与编译器,轻松与 C 语言进行交互

  •  3
     
  •   weiwenhao ·
    weiwenhao · 225 天前 · 7834 次点击
    这是一个创建于 225 天前的主题,其中的信息可能已经有所发展或是发生改变。

    接之前的帖子 https://www.v2ex.com/t/939430 ,感谢 V 站各位股东们,当时无论是在评论区的鼓励还是 star 支持,都给了莫大的动力,让我极限爆肝了近五个月,在这几个月的 190 多次的 commit log 中,有 60 次是在凌晨以后,18 次是在周末。


    再次介绍一下 nature 项目,这是一个投入近 5 年时间的编程语言与编译器项目。

    github https://github.com/nature-lang/nature 基于 MIT 协议开放源码。

    官网 https://nature-lang.org/zh-Hans/ 有完整可读的中文文档。

    在语言层面 nature 有以下特点

    • 类型系统,null 安全,泛型,联合类型
    • 自研编译器/汇编器/链接器,不依赖 llvm 。能够编译至 amd64/riscv64/wasm 架构
    • 无入侵的方式与 C 语言等交互进行高效率与高性能开发
    • 渐进式 GC ,支持自动与手动 GC
    • 内置 vec/map/set/tup 数据结构
    • 包管理与模块管理
    • 函数标签/闭包/错误提示/运行时堆栈追踪/协程
    • 集成 SSA/线性扫描寄存器分配/反射机制/汇编器与连接器

    上述特性已经集成了 90%,随着标准库以逐步完善,nature 可以应用于游戏引擎与游戏制作、科学与 AI 计算、操作系统与物联网、WEB 开发。其中游戏引擎将作为 nature 0.7 ~ 1.0+ 的核心任务。

    nature 适合于开源创作者/独立创作者以及学习和研究使用,我们不仅希望你能够在语言中得到便利,同样也希望你使用 nature 创作快乐且有趣的事情。


    今天发布 0.4.0-beta 版本,详细的更新内容见 发行说明,这里进行简单的总结

    1. 使用 temp 模式与 C 语言等进行交互。在数据结构上和调用规范上完全兼容 C 语言,使用安全指针避免 C 语言中的空指针问题。
    2. 实现编译时错误提示与运行时错误追踪功能,能够使用 nature 进行项目代码编写与调试。
    3. 支持标准库 fmt/syscall/os/strings/time/path/compress
    4. 使用 nature 语言实现小型测试用例 parker,这是一个类似 docker 的轻量级容器,能够将工作目录打包成一个可执行文件,又或者是将 python/php 等脚本语言打包成可执行文件并运行在一个轻量级容器运行时上。
    5. 在之前的 0.2/0.3 两个版本中主要支持了泛型,联合类型,包管理等功能。

    预计再肝半年左右,nature 将会推出社区可用版本,届时会有稳定的语法 api ,完善的标准库,以及开发工具支持,我也将会基于 nature 启动项目同时也是大型测试用例 'SAO'。

    此外,nature 中所有的标准库代码都会合并至主仓库,欢迎来贡献(从其他语言中搬运)。

    如果想更进一步关注 nature 的发展,欢迎加入编程语言交流群,我会在这里分享有意思的提案或者是学习的资料,比如最近在进行的协程提案与相关知识。当然也可以通过 github 进行 watch 来了解相关的进度。也希望能够有新的股东 star 支持,这都是宝贵的动力 💪

    118 条回复    2023-09-28 12:18:45 +08:00
    1  2  
    weiwenhao
        101
    weiwenhao  
    OP
       224 天前   ❤️ 1
    @sapjax 在看 clox 之前我就已经实现了编译器前端了(使用的 c++), 看完 clox 之后发现教的非常的好,我就整个用 C 语言重写了编译器前端。clox 中我收货最大的是 parser 的方式和 闭包转换。
    vialon17
        102
    vialon17  
       224 天前   ❤️ 1
    牛皮;但暂时没有转语言的动力,
    op 应该把 nature 的特性和与其他语言的对比说明一下,
    这样大家才知道 nature 的特色。
    (不过 国产这个标题挺吸引人的,哈哈)
    MrSheng
        103
    MrSheng  
       224 天前   ❤️ 2
    不大赞同 OP 的设计理念。

    很难说 i8 代替 int8_t 是降低了学习者的心里负担,毕竟 int8_t 无歧义,而 i8 需要猜一下。

    另外不看文档的话,谁能猜出 cptr 类型跟什么有关?

    另外的使用 “单引号能够减少一次 shift 的输入,减轻开发者的小拇指负担” 这个理由就更勉强了,不信你看大家的回帖,双引号使用率明显比单引号多的多的多。

    vec/vector 、tup/tuple 、arr/array ,真的有意义吗?

    我的 IDE 真的不需要输入完整的 function 才能写出 function 关键字,输入 f -> tab ,整个函数框架都写好了。
    himcheobeolx
        104
    himcheobeolx  
       224 天前   ❤️ 1
    star 下,就等你的应用出来了
    Huelse
        105
    Huelse  
       224 天前   ❤️ 1
    支持,真的很难得,尤其是在这种环境下。
    likunyan
        106
    likunyan  
       224 天前   ❤️ 1
    必须支持
    weiwenhao
        107
    weiwenhao  
    OP
       224 天前
    @MrSheng 我不具备权威属性,所以我一定尽量避免发明新的语法或者关键字。 例如 i8 这样的类型声明方式在 rust/zig 这样的编程语言中已经得到了推广。 至于 vec/tup/arr 在平时的使用中是不会用到的。 可以通过 [int] 这样的方式声明一个 vec 类型。使用 (int,float) 声明 tup 类型, 至于 arr 我还没有思考到具体的表现形式。 包括 ident<T> 目前是一种通用的类型声明方式,在没有思考到更好的表达方式之前,都会保留入 ident<T> 的方式。 ctpr 同样也是普通用户不需要关心的类型。在 golang 中对应的是 unintptr 类型。

    这里 vec/tup 这里后续将不作为一个关键字,而是可以随时进行覆盖的类型声明。当然这里面最需要考虑的是会不会和用户的编码明明方式冲突, 比如很多用户喜欢使用 list 这个 ident 作为变量名称,如果我使用了 list 作为关键字。那就严重影响的用户的使用习惯,其他关键字也是同理。 毕竟大多数情况下我们可能不需要去声明 vec/tup 这样的关键字。

    至于单引号的形式,只是推荐使用单引号,双引号也是可以使用的,这和脚本语言表达形式一致。大多数语言也都支持使用单引号字符串。
    droppedbytech
        108
    droppedbytech  
       224 天前   ❤️ 1
    可以有 discord 或者 tg 的交流渠道吗
    Nich0la5
        109
    Nich0la5  
       224 天前   ❤️ 1
    这年头没有大厂背书推广一门语言太难了 点个 star 支持一下
    mightybruce
        110
    mightybruce  
       224 天前   ❤️ 1
    @weiwenhao 既然提到实现轻量级容器, 那么了解一下业界的趋势,
    wasm + wasi 虽然不成熟,但在未来有可能取代容器。
    目前完整支持 wasm 的系统级开发编程语言而非浏览器的只有 c / c++, rust, golang 提供了部分 wasm 支持,可以编译为 wasm ,另外还有一个 tinygo 编译器。
    wasi 运行时 目前可以做到类似 namespace 的隔离,还没有做到 cgroup 隔离。
    weiwenhao
        111
    weiwenhao  
    OP
       224 天前
    @mightybruce 嗯嗯,wasm 是 nature 的核心目标之一哦,也是 nature 可以跨平台的保障。我相信 wasm 以后会全平台预装不仅仅是浏览器,是比 jvm 更加厉害的存在。
    weiwenhao
        112
    weiwenhao  
    OP
       224 天前
    @droppedbytech 没有哦,如果不方便加微信群也可以通过 issue 进行沟通,我看到都会回复的。
    wuqiangroy
        113
    wuqiangroy  
       224 天前   ❤️ 1
    Looking forward to bootstrap ASAP.
    zhong666666
        114
    zhong666666  
       224 天前   ❤️ 1
    加油!!!
    Terry3366
        115
    Terry3366  
       224 天前
    @weiwenhao #15 不只是在 V 站 在大部分地方都是这样
    说在 V 站 好像是我们给污名化了

    你这个宣传文本可以放在小红书 抖音
    satuk2
        116
    satuk2  
       223 天前 via Android
    大佬,考虑增加( Rust 式功能的)宏的支持吗?还有一些 Lisp 系的其他特性。另外,推荐一个 Discord 造(编程)语交流频道:“/r/ProgrammingLanguages”
    weiwenhao
        117
    weiwenhao  
    OP
       223 天前 via Android
    @satuk2 考虑 c 语言的形式(会做调研改进),后续很多关键字以及常量支持都会通过宏的形式支持。 这个频道我加了,类型问题就是在这群里解决的。
    satuk2
        118
    satuk2  
       223 天前 via Android
    @weiwenhao 👌未来对函数式编程怎么看呢?
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1090 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:46 · PVG 03:46 · LAX 12:46 · JFK 15:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.