V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
weiwenhao
V2EX  ›  程序员

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

  weiwenhao ·
weiwenhao · 18 天前 · 20926 次点击

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

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

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

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

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

天下之难持者莫如心,天下之易染者莫如欲。祝你能始终如一的贯彻自己的理念。
wensonsmith
    246
wensonsmith  
   17 天前   ❤️ 1
这种坚持太帅了
xiaole269
    247
xiaole269  
   17 天前   ❤️ 1
大佬,牛逼
weiwenhao
    248
weiwenhao  
OP
   17 天前   ❤️ 3
@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
    249
nodesolar  
   17 天前   ❤️ 1
卧槽 膜拜...
jiuzhougege
    250
jiuzhougege  
   17 天前   ❤️ 1
膜拜大佬,已 star
momooc
    251
momooc  
   17 天前 via Android   ❤️ 1
没文化,只会说牛逼,先 star👍
fqns
    252
fqns  
   17 天前   ❤️ 1
开协程还用 go 作为关键字感觉怪怪的, 不如从 nature 取舍, 用 ntr. 开个玩笑, 其实用 spawn 就挺好, 好多有栈协程都这么干
weiwenhao
    253
weiwenhao  
OP
   17 天前
@fqns go 关键字算是 golang 的核心了,本身也是同一种东西,使用 go 关键字主要是表达对 golang 的尊重。另外可以通过宏的方式启动协程,比如 @async(sum(1, 2), co.SAME) 类似这样,可以添加更多的协程参数。ntr 我一下没反应过来 🤣
XIVN1987
    254
XIVN1987  
   17 天前   ❤️ 1
看起来挺好,,楼主加油。。
zthxxx
    255
zthxxx  
   17 天前   ❤️ 1
不要 try+catch !显式抛出 + pattern match 是好文明!

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

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

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

---

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

近日,多家外媒报道,美国网络安全和基础设施安全局( CISA )和联邦调查局( FBI )宣布将说服软件制造商放弃 C 和 C++ 等“内存不安全”的编程语言
wineejam
    294
wineejam  
   16 天前   ❤️ 1
厉害了。大佬。膜拜
kios
    295
kios  
   16 天前   ❤️ 1
大佬牛逼
yechentide
    296
yechentide  
   16 天前   ❤️ 1
这语法... 不 star 不行了! 支持大佬, 希望这个语言能火起来!
freestyle
    297
freestyle  
   16 天前 via iPhone   ❤️ 1
大佬, 支持.
xclimbing
    298
xclimbing  
   16 天前   ❤️ 1
膜拜大牛,必须 star 一下表示支持。
Biem
    299
Biem  
   16 天前   ❤️ 1
膜拜
Biem
    300
Biem  
   16 天前
看了仓库,太强了,满满的热爱和热血在里面,已 star
1  2  3  4  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2550 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 04:48 · PVG 12:48 · LAX 21:48 · JFK 00:48
Developed with CodeLauncher
♥ Do have faith in what you're doing.