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

2023-09-26 09:08:39 +08:00
 weiwenhao

接之前的帖子 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 有以下特点

上述特性已经集成了 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 支持,这都是宝贵的动力 💪

8651 次点击
所在节点    程序员
118 条回复
letianqiu
2023-09-26 20:27:30 +08:00
看到之后第一反应是后端是 llvm ,没想到看了代码之后发现是自己实现的后端。不过目前的后端的确是比较简单/toy 。想问问楼主为什么不用 llvm ?
2NUT
2023-09-26 20:39:18 +08:00
你怎么有时间做这个的? 分享下时间管理 和 项目管理 以及 精力管理 的经验
SHF
2023-09-26 20:49:50 +08:00
不支持 windows 系统吗?那用都用不了
weiwenhao
2023-09-26 20:56:54 +08:00
@skiy

1. 目前就是根据 nature 所在路径查找的 NATURE_PATH, /usr/local 只是推荐路径。
2. 确实不支持 -h 以及 run, 只支持 build 。
3. github 用例展示中,标准库还不支持 http ,并且其中 http server 确实有代码问题,第七行参数没有给类型,我记录一下,下一次更新一下用例。

感谢你认真体验。这让我非常有动力。
weiwenhao
2023-09-26 20:58:07 +08:00
@B1ankCat 版本号问题不大,只要不能到可用要求,那 0.10 ,0.11 都会往上推进。1.0.0 必须达到商业可用版本。
weiwenhao
2023-09-26 21:01:33 +08:00
@letianqiu 后端比较简单,但已经不是 toy 了,已经具备了基础的优化框架。不用 llvm 主要是为了对源码开发者友好,能够让开发者掌握更多的核心知识和原理,同时也更加的可控。


https://github.com/ziglang/zig/issues/16270 zig 也正在脱离 llvm, 作者给到的理由也同样可以参考

In exchange, Zig gains these benefits:

All our bugs are belong to us.
The compiler becomes trivial to build from source and to bootstrap with only a C compiler on the host system.
We stop dealing with annoying problems introduced by Linux distributions and package managers such as Homebrew related to LLVM, Clang, and LLD. There have been and continue to be many.
The Zig compiler binary goes from about 150 MiB to 5 MiB.
Compilation speed is increased by orders of magnitude.
We can implement our own optimization passes that push the state of the art of computing forward.
We can attract research projects such as alive2
We can attract direct contributions from Intel, ARM, RISC-V chip manufacturers, etc., who have a vested interest in making our machine code better on their CPUs.
weiwenhao
2023-09-26 21:03:04 +08:00
@SHF 目前不支持,现在没有 lsp, 对使用者并不友好。预计再肝半年左右会有给大家使用的社区可用版本。
weiwenhao
2023-09-26 21:05:31 +08:00
@2NUT 项目管理就是用 Obsidian + TODO list 。 时间没有管理过,我业余时间只有这一件事情做。

skiy
2023-09-26 21:08:49 +08:00
@weiwenhao

1. 我是将 export PATH="$PATH:$HOME/nature/bin"。添加到了 PATH ,运行时找不到标准库。
2. 我意思是,添加个帮助文档好些,否则不知道有哪些命令。比如现在有 "build" 和 “--version” 这些参数。
fpure
2023-09-26 21:15:32 +08:00
变量的类型前置,函数的类型后置,这么随意的吗
weiwenhao
2023-09-26 21:26:56 +08:00
@skiy 好的,那应该是 bug, 我记录一下。-h 我也支持一下
weiwenhao
2023-09-26 21:27:56 +08:00
@fpure 统一类型前置,包括函数的返回值的类型也是前置的,只是省略了 ident.

fn sum(int a, int b):int c -> fn(int,int):int
AItsuki
2023-09-27 00:53:32 +08:00
先膜拜下大佬,然后提点建议:

关于错误处理,比较推荐 go 或 rust 那种显式返回异常的方式,能降低不少心智负担。

否则就出现 "这个函数要不要 try ,点进去看看",或者 "管他的,try 一下" 这种很让人操蛋的行为。
Jirajine
2023-09-27 05:00:38 +08:00
@Masoud2023 #10 错,强烈支持把“国产”、“自主可控”作为卖点,这样就可以节省时间不用点开看了。
simpx
2023-09-27 06:55:20 +08:00
很棒啊!先顶再看,大概瞄了一眼感觉和 zig 有点像啊,作为给 zig donate 了 5$的人,非常期待以后的应用!
dangyuluo
2023-09-27 07:45:16 +08:00
赞一个,国内做编译器的人实在是太少了
sapjax
2023-09-27 07:53:57 +08:00
看 OP 两年前还在写 CLox, 进步这么快的?
hejingyuan199
2023-09-27 08:01:30 +08:00
非常感谢。饶有兴趣地读了一遍英文版文档,对我这个非英语母语者来说这个文档写得比 native english speaker 那些文档更容易让我读通顺。
weiwenhao
2023-09-27 08:33:52 +08:00
@AItsuki 嗯嗯,考虑过这个问题,实际上支持多返回值是完全兼容 golang 的错误处理方式。 另外其实 try 吃基于 try catch 的,下个版本会开放 var err = try {} 的形式。
weiwenhao
2023-09-27 08:35:13 +08:00
@simpx zig 我就完全没有了解过了,倒是和 vlang 超级像,但是绝对不是抄着 vlang 的语法设计,是真的想法一致了 😄

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/977144

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX