我写了一个编程语言,受 golang 启发

19 天前
 weiwenhao

大家好,我是 nature 编程语言的作者,自 2021 年第一次提交以来,一直到今天 nature 编程语言达到了早期可用版本。


为什么要实现这样一个编程语言?

golang 是我日常工作使用的编程语言,我一次使用 golang 时就被其所惊艳,语法简单,编程思想简洁自由,非常便利的进行交叉编译以及部署,拥有非常优秀且高性能的 runtime 实现,拥有先进的基于 goroutine 的并发风格设计等等。但是 golang 也有一些不方便的地方

nature 在设计理念上是对 go 编程语言的延续与改进,并追寻一定的差异性。在改善上述问题的同时,nature 拥有和 go 类似但更简洁的 runtime 、GMP 模型、allocator 、collector 、coroutine 、channel 、std 等等。并且 nature 同样不依赖 llvm ,有着高效的编译速度,方便的交叉编译与部署等,

基于 nature 编程语言已实现的特性,其适用于游戏引擎和游戏开发、科学计算和 AI 、操作系统和物联网、命令行、以及 Web 开发等领域。

当 nature 完成所有特性及优化时,预计 nature 可以在任何场景替代 golang 进行开发(转换为可读 golang 代码,以最低的试错成本的使用 nature ,并可以随时切换回 golang)。并且作为通用编程语言 nature 可以和任何的同类型编程语言进行竞争。[注意这还未完成]


两年前 nature 编程语言还不能使用,但我依旧在 V2EX 进行了分享,得到了很多鼓励,这是让我坚持到可用版本发布的动力之一。

但我知道, 这依旧有些迟了,我耗费了太久的时间,仅仅是又带来了一个编程语言而已,毕竟这个世界最不缺的就是编程语言。但是当我真的去思考类似 “我还要继续么?我能做好吗?” 这样的问题的时候,我发现我已经走了很远很远的路。


欢迎体验反馈~

github: https://github.com/nature-lang/nature

官网: https://nature-lang.org/ 首页包含一些语法特性示例,可以直接在 playground 尝试

语法文档: https://nature-lang.org/docs/syntax

playground: https://nature-lang.org/playground 在线尝试


贡献指南(点击右上角切换到中文)

https://nature-lang.org/docs/contribute 我在文档中详细介绍了 nature 编程语言是如何实现的。

nature 和 golang 一样,有着一个自研的编译器后端, 但 nature 的源码结构和实现非常的简洁。

这让参与 nature 编程语言的贡献变得容易且有趣, 不再只是编译器前端 + llvm ,你可以参与 SSA, SIMD, 寄存器分配,汇编器,链接器等等有趣的工作来验证你的学习成果和想法。你可以通过 issue 表达你的想法,我会指导你参与贡献。


这是我用 nature 实现的一些小项目, 我很喜欢使用 nature 编写代码的感觉。

https://github.com/weiwenhao/parker 轻量打包工具

https://github.com/weiwenhao/llama.n Llama2 推理模型 nature 编程语言实现

https://github.com/weiwenhao/tetris 绑定 raylib 实现的俄罗斯方块

https://github.com/weiwenhao/playground nature 官网的 playground server api 实现


最后,我正在寻找工作,如果你觉得这个项目还不错,希望能给我一个 star ,这对我有很大的帮助 🙏

20992 次点击
所在节点    程序员
315 条回复
zeromake
19 天前
虽然我不是很想打击 op ,但是仔细看了一下发现二进制后端竟是手撸的 amd64 仅支持 linux osx ,真的不考虑投奔 llvm 吗……
supuwoerc
19 天前
光是文档质量就能看出来 op 是个大佬
Binwalker
19 天前
问下写这个要看哪些书和资料?我目前把 craftinginterpreters 看完并且用自己熟悉的语言做了个类似的,但是感觉还差得挺远
hd7771
19 天前
不依赖 llvm 的话,其他的都好说,优化器怎么办。
weiwenhao
19 天前
@zeromake arm64 也支持的,毕竟 osx 现在都是 arm64 了,我本地调试也是用 macmini m4 了。

投靠 llvm 的话就失去了简洁高效的编译器后端实现,llvm 太过的繁重,并且无法很好的支持交叉编译。

因为我一开始的设计目标是和 golang 一样方便的交叉编译和高效的编译速度,所以和 golang 一样,自研了编译器后端。
pursuer
19 天前
我很好奇被 Go 语法简单的吸引的用户,其他语言的高级特性不用也没什么影响。而 Go 这样衍生语言很多什么 go+,walang 还有这个 nature ,最终也是将其他特性丰富的语言的碎片组合,除了使生态分裂,感觉也没什么好处。
yituanmaoxian
19 天前
大佬发 hacker news 了吗
c9wB702Sy09OqLkC
19 天前
很棒,加油

写编程语言的复杂度可想而知,op 是怎么坚持下来的。

论编程语言的简洁与优雅,我感觉 python 相当不错了
zlkent
19 天前
虽然看不懂,但这种大牛,github 上还是要 star 一下表示支持~
weiwenhao
19 天前
@yituanmaoxian 今晚或者明晚发。
joyoyao
19 天前
加油,但是编程语言没个 5-10 年成不了气候,还要有自己的杀手锏应用。比如 go 有 docker, k8s 。rust 有 Wasm ,Firecracker 等。
Dreamerwwr
19 天前
NB ,加油!
weiwenhao
19 天前
@pursuer 其实这里有一个很大的区别

vlang/go+/walang 和语法上都和 golang 很像或者是基于 golang 的语法进行了优化, 其他的和 golang 已经没有太大的关系了。
nature 语法上和 golang 不像,但是其他的都和 golang 基本保持一致(runtime ,协程,channel, GMP, GC ,mutex, 编译部署等等)。

生态分裂上面不可否认,但即使没有 go+,vlang,walang 。rust/zig/swfit/vlang 等系统编程语言也在瓜分 golang 的用户。
wlf92
19 天前
优秀
weiwenhao
19 天前
@Cestbonmmm 很有想法,但是信创对编程语言的支持不是很好,主要以数据库,操作系统等运行终端工具为主,编程语言属于开发工具。
kylix
19 天前
强力支持大牛
youyouzi
19 天前
牛逼,STAR 双击了
dp
19 天前
牛的牛的 加油~
weiwenhao
19 天前
@hd7771 在性能和编译速度之间进行一个平衡,只进行主要优化。
sunxfancy
19 天前
打开后发现,已经在当年 star 过了

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

https://yangjunhui.monster/t/1132910

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

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

© 2021 V2EX