• 请不要在回答技术问题时复制粘贴 AI 生成的内容
weiwenhao
1.3D
V2EX  ›  程序员

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

  weiwenhao ·
weiwenhao · May 20, 2025 · 32311 views
This topic created in 536 days ago, the information mentioned may be changed or developed.

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


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

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

  • 语法过于简洁导致表达能力不足
  • 类型系统不够完善
  • 错误处理机制繁琐
  • 自动 GC 和抢占式调度的设计虽然非常优秀,但是也让 go 的应用范围受限。
  • 包管理方式
  • interface{}
  • ...

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 ,这对我有很大的帮助 🙏

315 replies  •  2025-05-24 21:33:40 +08:00
1  2  3  4  
❮ ❯
k4x7UW92WE8
k4x7UW92WE8
May 20, 2025❤️1
201
佬是怎么学习并利用好这些计算机底层知识的 我苦刷力扣多年 连快排都记不住
akin520
akin520
May 20, 2025❤️1
202
加油,支持
darkengine
darkengine
May 20, 2025❤️1
203
看了文档,相当认真,支持一波。
sanyang001
sanyang001
May 20, 2025❤️1
204
膜拜膜拜,已经没有了捯饬的激情。
weiwenhao
weiwenhao
OP
May 20, 2025❤️2
205
@gangstar902 我由于没有刷过 leetcode ,导致字节面试每一次都挂在算法上。我没有刻意去学习这些计算机的知识(除了面试背八股文),而是我需要使用它们的时候才会去学习。
Yang0524
Yang0524
May 20, 2025❤️1
206
已 star ,佩服大佬的执行力,太牛逼了。
WuOtto
WuOtto
May 20, 2025❤️1
207
加油,已 star 支持,持续关注
chiaoyuja
chiaoyuja
May 20, 2025❤️1
208
牛!!大佬,敬佩
madao199
madao199
May 20, 2025❤️1
209
已经 star 支持 加油!
YakumoZi
YakumoZi
May 20, 2025
210
@weiwenhao #100 为什么不推荐用 C 语言写呢?比较好奇
wps353
wps353
May 20, 2025❤️1
211
“阿珍,你来真的啊”
weiwenhao
weiwenhao
OP
May 20, 2025
212
@YakumoZi 编译器本身就是一个一次性运行的文本转换工具,并不需要很好的性能和内存需要。借助高级编程语言的数据结构和字符串处理,可以用更加少量的代码实现。再来一次我会用 rust 写 compiler, 然后 c 写 runtime 的。lsp 我已经用 rust 实现了,虽然感觉一般吧,但是也比 C 好一点。
nullboy
nullboy
May 20, 2025❤️1
213
我只能说一句 NB
pursuit9
pursuit9
May 20, 2025❤️1
214
大佬,点赞支持
zjun5556
zjun5556
May 20, 2025❤️1
215
超出认知无法评价,只能 star 一手表示敬佩!
cj323
cj323
May 20, 2025 via iPhone❤️2
216
> 但我知道, 这依旧有些迟了,我耗费了太久的时间,仅仅是又带来了一个编程语言而已,毕竟这个世界最不缺的就是编程语言。但是当我真的去思考类似 “我还要继续么?我能做好吗?” 这样的问题的时候,我发现我已经走了很远很远的路。

楼主坚持住啊,别管这个世界,别想太多。
pota
pota
May 20, 2025❤️1
217
奇怪,我啥时候 start 的。。
weiwenhao
weiwenhao
OP
May 20, 2025
218
@pota 应该是 2 年前吧,你是种子支持者 🤛
xixi1412
xixi1412
May 20, 2025
219
KorenKrita
KorenKrita
May 20, 2025❤️1
220
这个世界因为种种现实原因让大部分有梦想的人都走向了平淡的生活,但是这依旧不影响我对坚持走向梦的人/事热泪盈眶 加油
tualalis
tualalis
May 20, 2025 via Android❤️1
221
膜拜大神
pkoukk
pkoukk
May 20, 2025❤️1
222
大佬牛逼,这个语法看着确实舒服,有种集百家所长的感觉,我愿称你为中国的 Anders Hejlsberg
weiwenhao
weiwenhao
OP
May 20, 2025❤️1
223
@pkoukk 我最近才知道 Anders Hejlsberg ,这是真正的大佬,能写出 c# 这样优雅的编程语言,一定是有着极高的追求和决断力。
littledogboy
littledogboy
May 20, 2025❤️1
224
每个业务仔的心里都有一个理想。牛逼!
asdblue
asdblue
May 20, 2025❤️1
225
大佬牛逼
littlewing
littlewing
May 20, 2025❤️1
226
🐮🍺
不知楼主是否有兴趣分享下要完整实现这样一个语言需要具备哪些知识,有哪些参考资料,有哪些项目可以参考或利用呢
KickAssTonight
KickAssTonight
May 20, 2025❤️1
227
看着好棒!加油!!
br9852000
br9852000
May 20, 2025❤️1
228
哪个国企招你进去直接可以申请立项吧
mysunshinedreams
mysunshinedreams
May 20, 2025❤️1
229
我是菜鸡,膜拜楼主,star 奉上
18bili
18bili
May 20, 2025❤️1
230
nature 语言之父
lloovve
lloovve
May 20, 2025 via iPhone❤️1
231
可能支持的库太少,建议用 ai 直接转写 golang 常用库,这样生态可能会好起来
glcolof
glcolof
May 20, 2025❤️1
232
高手啊。
花括号可以换行吗?
sunmoon1983
sunmoon1983
May 20, 2025❤️1
233
我只能膜拜了
anriclee
anriclee
May 20, 2025❤️1
234
加油
cybzzz
cybzzz
May 20, 2025❤️1
235
加油
hhkbp2
hhkbp2
May 20, 2025❤️1
236
加油
c3de3f21
c3de3f21
May 20, 2025❤️1
237
每次有这种我都会想:要是我有楼主这么强就好了。。。吧啦吧啦吧啦吧
shinyruo2020
shinyruo2020
May 20, 2025❤️1
238
有点感动
povsister
povsister
May 20, 2025❤️1
239
看了下 demo 和基本语法。就当是我的暴论吧,要真正可用,核心的 syntax 和特性感觉得砍掉至少 1/3 。

语言本身缺乏自己的哲学,即便是 rust 这种写起来有点 brain fuck 的东西都是有迹可循的,但这个 demo 让我感觉它只是“集众家爽点”,没有自己的一条线贯穿始终。
alading11
alading11
May 20, 2025❤️1
240
牛逼,膜拜大佬
timerring
timerring
May 20, 2025❤️1
241
非常非常敬佩楼主,star 了,不过我也好奇楼主的主业是什么方面的
weiwenhao
weiwenhao
OP
May 20, 2025
242
@glcolof 函数的左侧花括号不能单独起一行
weiwenhao
weiwenhao
OP
May 20, 2025
243
@povsister golang 的设计哲学是 “less is more” 在中国经常背翻译为 "大道至简",nature 名字取自一个和大道至简类似的概念,就是道法自然(Tao follows nature)。这也是我的设计理念。

我希望 nature 在设计上继承 golang 大道至简的基础上,同时能够做到自然而然,符合直觉。
weiwenhao
weiwenhao
OP
May 20, 2025
244
@timerring 后端开发,以 golang 语言为主,过去几年在进行 devops 平台研发。
povsister
povsister
May 20, 2025❤️1
245
@weiwenhao
讲出来确实容易,做起来就是另一个问题了。

但众所周知,真正的民主并不民主。人的直觉也会欺骗自己。

天下之难持者莫如心,天下之易染者莫如欲。祝你能始终如一的贯彻自己的理念。
wensonsmith
wensonsmith
May 20, 2025❤️1
246
这种坚持太帅了
xiaole269
xiaole269
May 20, 2025❤️1
247
大佬,牛逼
weiwenhao
weiwenhao
OP
May 20, 2025❤️3
248
@littlewing 这是我之前整理的编译器实现相关知识,但是更多的标准库和 runtime 实现,还是需要参考 golang 的源码或者 golang 相关的博客。

1. sicp (有 python 和 js 版本),推荐和视频一起观看。
2. 编译器设计(第二版),部分章节,推荐看英文版,中文版实在是看不懂。
3. 现代编译原理 —— C 语言描述,部分章节,主要是 ssa 部分。
4. [crafting interpreters]( https://craftinginterpreters.com/) 非常推荐
5. 自己动手构造编译系统 —— 编译、汇编、与连接,主要看了汇编部分
6. Linear Scan Register Allocation for the Java HotSpotTM Client Compiler ,线性扫描寄存器分配基于该论文编写
7. Linear Scan Register Allocation on SSA Form ,ssa 形式线性扫描寄存器分配
8. [Writing a Memory Allocator]( http://dmitrysoshnikov.com/compilers/writing-a-memory-allocator/) 内存分配与垃圾回收课程
9. golang/tcmalloc ,内存分配和垃圾回收实现上参考,不过我源码阅读能力有限,所以看的都是文章解析。
10. [bspaans/jit-compiler]( https://github.com/bspaans/jit-compiler) 汇编器部分参考实现,具体指令编码参考 intel 手册第二卷
11. 程序员的自我修养——链接装载与库,学习连接器与 ELF 文件构成
12. [Tiny C Compiler]( https://bellard.org/tcc/) 连接器部分参考实现
nodesolar
nodesolar
May 20, 2025❤️1
249
卧槽 膜拜...
jiuzhougege
jiuzhougege
May 20, 2025❤️1
250
膜拜大佬,已 star
momooc
momooc
May 20, 2025 via Android❤️1
251
没文化,只会说牛逼,先 star👍
fqns
fqns
May 20, 2025❤️1
252
开协程还用 go 作为关键字感觉怪怪的, 不如从 nature 取舍, 用 ntr. 开个玩笑, 其实用 spawn 就挺好, 好多有栈协程都这么干
weiwenhao
weiwenhao
OP
May 20, 2025
253
@fqns go 关键字算是 golang 的核心了,本身也是同一种东西,使用 go 关键字主要是表达对 golang 的尊重。另外可以通过宏的方式启动协程,比如 @async(sum(1, 2), co.SAME) 类似这样,可以添加更多的协程参数。ntr 我一下没反应过来 🤣
XIVN1987
XIVN1987
May 20, 2025❤️1
254
看起来挺好,,楼主加油。。
zthxxx
zthxxx
May 21, 2025❤️1
255
不要 try+catch !显式抛出 + pattern match 是好文明!

对,就类似 rust 的错误处理
fqns
fqns
May 21, 2025❤️1
256
@weiwenhao 如果作者有精力的话, 可以尝试移植到 harmony 平台. 与其和老牌语言抢 WIN/MAC/LINUX 的市场, 不如在鸿蒙上尝试一番, 那玩意现在没几个语言移植, 反而是个打开知名度的好机会.
twig
twig
May 21, 2025❤️1
257
这语法真漂亮。
twig
twig
May 21, 2025❤️1
258
哇奥,大哥,这个可太赞了!

bar = null // x: Assigning null to any composite or simple type is not allowed

// Method 1
string? s = null
s = 'i am string'
sinx003
sinx003
May 21, 2025❤️1
259
牛逼
a33291
a33291
May 21, 2025❤️1
260
语法我还是更喜欢 c#的,不过这个也简单直观,特别是纯静态交叉编译不错,加油👍
xeneizes
xeneizes
May 21, 2025❤️1
261
@weiwenhao #205 字节的 HR 是真的眼瞎
shl3807
shl3807
May 21, 2025❤️1
262
支持楼主加油
YakumoZi
YakumoZi
May 21, 2025
263
@weiwenhao #212 懂了,感谢大佬
shellcodecow
shellcodecow
May 21, 2025❤️1
264
牛逼....这手册作的那个专业
kissice
kissice
May 21, 2025❤️1
265
牛逼,已 star 支持。
yuxian
yuxian
May 21, 2025❤️1
266
太棒了,题主加油。我不喜欢用 go ,就是因为它没有处理好泛型。面对对象语言不解决好泛型,后期的代码就可以膨胀到无法维护。不喜欢 dart ,就是因为 Google 的风味,永远都无法理解,像 shit 的一样的语法和规范,还美其名曰,世界最佳。
题主继续加油,完善整个跨平台生态。这让我看到了希望。
pota
pota
May 21, 2025❤️1
267
@weiwenhao #218 还真是。23 年 5 月 12 的帖子
xgdgsc
xgdgsc
May 21, 2025 via Android❤️1
268
没有 repl 也适合科学计算吗,感觉对科学计算有误解 https://discourse.julialang.org/t/blog-post-rust-vs-julia-in-scientific-computing/101711/22?u=xgdgsc
molika
molika
May 21, 2025❤️1
269
猛男! 加油!
weiwenhao
weiwenhao
OP
May 21, 2025
270
@xgdgsc 看起来 repl 更加适合解释型编程语言。确实我对科学计算的理解确实有偏差,我以为的科学计算是类似 numpy 这样的数学计算库。但是就像你说的,类似 Jupyter Notebook 这样的可以实时验证的笔记工具确实也对科学计算很重要。
chf007
chf007
May 21, 2025❤️1
271
官网看到有 Supported By jetbrains ,能讲讲这个么?给了什么样的支持?是要自已主动申请么
weiwenhao
weiwenhao
OP
May 21, 2025❤️1
272
@chf007 我用 nature 项目申请了一年的 jetbrains idea 使用。我主要是使用 clion 开发和调试,虽然现在 clion 也免费了,但历史赞助那也是赞助。
x1aoYao
x1aoYao
May 21, 2025❤️1
273
struct 在 stack 但 tuple 却是在 heap ? tuple 不是可以理解为匿名结构体吗? tuple 是异构定长数组,怎么会在 heap ?官网文档写错了?
patrickpu
patrickpu
May 21, 2025❤️1
274
还没有 net 标准库吗
CancoSeven
CancoSeven
May 21, 2025
275
已 star ,op 加油,好厉害!
weiwenhao
weiwenhao
OP
May 21, 2025
276
@x1aoYao 没写错,map/set/vec/tup 统一作为复杂结构默认放在 heap 上了,但是使用上应该是没有感知的。性能上可能会有轻微影响。tup 设计是为了支持多返回值。返回值使用大数据结构的时候为了 system abi 实现方便,通过指针传递更加便捷。所以就放在了 heap 里面。
weiwenhao
weiwenhao
OP
May 21, 2025
277
@patrickpu 还没有,标准库实现可能有点太多太杂,计划优先想办法利用 golang 生态。
NowTime
NowTime
May 21, 2025❤️1
278
太强啦 👍🏻!!

---

昨天点 Star 时是 0.9K ⭐️,现在已经 1.6K ⭐️ 了
x1aoYao
x1aoYao
May 21, 2025 via iPhone❤️1
279
@weiwenhao 把 tup 实现成匿名结构也可以吧,毕竟函数返回 tup 是一个挺常见的现象,这样用户想为了避免影响性能只能命名一个结构体…
zeonlamKen
zeonlamKen
May 21, 2025❤️1
280
大佬加油!!
lovedebug
lovedebug
May 21, 2025❤️1
281
支持一下~ 厉害,继续加油!!!!
weiwenhao
weiwenhao
OP
May 21, 2025
282
@x1aoYao 嗯嗯,我考虑一下
zhanlanhuizhang
zhanlanhuizhang
May 21, 2025
283
加油
Lamlam147
Lamlam147
May 21, 2025❤️1
284
已 star ,在我印象还停留在按键精灵是国人开发的变成语言,希望项目越来越好!
xiejay97
xiejay97
May 21, 2025❤️1
285
加油,已 star ,希望能在国内这种环境中坚持住技术信仰
hayala
hayala
May 21, 2025❤️1
286
大佬能适配 JetBrains 全家桶吗,不是很喜欢用 vscode
realpg
realpg
May 21, 2025❤️1
287
我是第一次特意打开 github 切到了个人大号 上去给你专门点了个 star 然后再退出换工作号
you worth it
5had0w
5had0w
May 21, 2025❤️1
288
强!大佬加油!
2Broear
2Broear
May 21, 2025❤️1
289
@weiwenhao 道法自然的设计理念真符合国内语言思想
kamilic
kamilic
May 21, 2025❤️1
290
前些年学过 crafting interpreters 的内容,深知写一个语言 / 解析器有多复杂。
OP 一个人撸出了一个可用成品,简直是太强了 Orz
ychost
ychost
May 21, 2025❤️1
291
太厉害了,同时看到了 Go/C#/Kotlin 的影子(都是精华部分)是我想要的语言🌹
realchaorders
realchaorders
May 21, 2025❤️1
292
厉害 可以加我微信吗 ai-social-media 招人
v2er119
v2er119
May 21, 2025❤️1
293
看文档,好熟悉的代码风格, 支持自动 GC.

近日,多家外媒报道,美国网络安全和基础设施安全局( CISA )和联邦调查局( FBI )宣布将说服软件制造商放弃 C 和 C++ 等“内存不安全”的编程语言
wineejam
wineejam
May 21, 2025❤️1
294
厉害了。大佬。膜拜
devtk
devtk
May 21, 2025❤️1
295
大佬牛逼
yechentide
yechentide
May 21, 2025❤️1
296
这语法... 不 star 不行了! 支持大佬, 希望这个语言能火起来!
freestyle
freestyle
May 21, 2025 via iPhone❤️1
297
大佬, 支持.
xclimbing
xclimbing
May 21, 2025❤️1
298
膜拜大牛,必须 star 一下表示支持。
Biem
Biem
May 21, 2025❤️1
299
膜拜
Biem
Biem
May 21, 2025
300
看了仓库,太强了,满满的热爱和热血在里面,已 star
1  2  3  4  
❮ ❯
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1645 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 258ms · UTC 11:54 · PVG 19:54 · LAX 03:54 · JFK 06:54
♥ Do have faith in what you're doing.