大家好,我是 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 ,这对我有很大的帮助 🙏
201
gangstar902 17 天前 ![]() 佬是怎么学习并利用好这些计算机底层知识的 我苦刷力扣多年 连快排都记不住
|
![]() |
202
akin520 17 天前 ![]() 加油,支持
|
![]() |
203
darkengine 17 天前 ![]() 看了文档,相当认真,支持一波。
|
![]() |
204
sanyang001 17 天前 ![]() 膜拜膜拜,已经没有了捯饬的激情。
|
![]() |
205
weiwenhao OP ![]() @gangstar902 我由于没有刷过 leetcode ,导致字节面试每一次都挂在算法上。我没有刻意去学习这些计算机的知识(除了面试背八股文),而是我需要使用它们的时候才会去学习。
|
![]() |
206
Yang0524 17 天前 ![]() 已 star ,佩服大佬的执行力,太牛逼了。
|
207
WuOtto 17 天前 ![]() 加油,已 star 支持,持续关注
|
208
chiaoyuja 17 天前 ![]() 牛!!大佬,敬佩
|
![]() |
209
madao199 17 天前 ![]() 已经 star 支持 加油!
|
211
wps353 17 天前 ![]() |
![]() |
212
weiwenhao OP @YakumoZi 编译器本身就是一个一次性运行的文本转换工具,并不需要很好的性能和内存需要。借助高级编程语言的数据结构和字符串处理,可以用更加少量的代码实现。再来一次我会用 rust 写 compiler, 然后 c 写 runtime 的。lsp 我已经用 rust 实现了,虽然感觉一般吧,但是也比 C 好一点。
|
213
nullboy 17 天前 ![]() 我只能说一句 NB
|
![]() |
214
pursuit9 17 天前 ![]() 大佬,点赞支持
|
215
zjun5556 17 天前 ![]() 超出认知无法评价,只能 star 一手表示敬佩!
|
216
cj323 17 天前 via iPhone ![]() > 但我知道, 这依旧有些迟了,我耗费了太久的时间,仅仅是又带来了一个编程语言而已,毕竟这个世界最不缺的就是编程语言。但是当我真的去思考类似 “我还要继续么?我能做好吗?” 这样的问题的时候,我发现我已经走了很远很远的路。
楼主坚持住啊,别管这个世界,别想太多。 |
![]() |
217
pota 17 天前 ![]() 奇怪,我啥时候 start 的。。
|
219
xixi1412 17 天前
|
![]() |
220
KorenKrita 17 天前 ![]() 这个世界因为种种现实原因让大部分有梦想的人都走向了平淡的生活,但是这依旧不影响我对坚持走向梦的人/事热泪盈眶 加油
|
221
tualalis 17 天前 via Android ![]() 膜拜大神
|
![]() |
222
pkoukk 17 天前 ![]() 大佬牛逼,这个语法看着确实舒服,有种集百家所长的感觉,我愿称你为中国的 Anders Hejlsberg
|
224
littledogboy 17 天前 ![]() 每个业务仔的心里都有一个理想。牛逼!
|
225
asdblue 17 天前 ![]() 大佬牛逼
|
226
littlewing 17 天前 ![]() 🐮🍺
不知楼主是否有兴趣分享下要完整实现这样一个语言需要具备哪些知识,有哪些参考资料,有哪些项目可以参考或利用呢 |
227
KickAssTonight 17 天前 ![]() 看着好棒!加油!!
|
![]() |
228
br9852000 17 天前 ![]() 哪个国企招你进去直接可以申请立项吧
|
229
mysunshinedreams 17 天前 ![]() 我是菜鸡,膜拜楼主,star 奉上
|
230
newbie111 17 天前 ![]() nature 语言之父
|
231
lloovve 17 天前 via iPhone ![]() 可能支持的库太少,建议用 ai 直接转写 golang 常用库,这样生态可能会好起来
|
![]() |
232
glcolof 17 天前 ![]() 高手啊。
花括号可以换行吗? |
![]() |
233
sunmoon1983 17 天前 ![]() 我只能膜拜了
|
234
anriclee 17 天前 ![]() 加油
|
235
cybzzz 17 天前 ![]() 加油
|
![]() |
236
hhkbp2 17 天前 ![]() 加油
|
![]() |
237
c3de3f21 17 天前 ![]() 每次有这种我都会想:要是我有楼主这么强就好了。。。吧啦吧啦吧啦吧
|
238
shinyruo2020 17 天前 ![]() 有点感动
|
![]() |
239
povsister 17 天前 ![]() 看了下 demo 和基本语法。就当是我的暴论吧,要真正可用,核心的 syntax 和特性感觉得砍掉至少 1/3 。
语言本身缺乏自己的哲学,即便是 rust 这种写起来有点 brain fuck 的东西都是有迹可循的,但这个 demo 让我感觉它只是“集众家爽点”,没有自己的一条线贯穿始终。 |
240
alading11 17 天前 ![]() 牛逼,膜拜大佬
|
![]() |
241
timerring 17 天前 ![]() 非常非常敬佩楼主,star 了,不过我也好奇楼主的主业是什么方面的
|
![]() |
243
weiwenhao OP @povsister golang 的设计哲学是 “less is more” 在中国经常背翻译为 "大道至简",nature 名字取自一个和大道至简类似的概念,就是道法自然(Tao follows nature)。这也是我的设计理念。
我希望 nature 在设计上继承 golang 大道至简的基础上,同时能够做到自然而然,符合直觉。 |
![]() |
245
povsister 17 天前 ![]() |
![]() |
246
wensonsmith 17 天前 ![]() 这种坚持太帅了
|
247
xiaole269 17 天前 ![]() 大佬,牛逼
|
![]() |
248
weiwenhao OP ![]() @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/) 连接器部分参考实现 |
249
nodesolar 17 天前 ![]() 卧槽 膜拜...
|
![]() |
250
jiuzhougege 17 天前 ![]() 膜拜大佬,已 star
|
251
momooc 17 天前 via Android ![]() 没文化,只会说牛逼,先 star👍
|
252
fqns 17 天前 ![]() 开协程还用 go 作为关键字感觉怪怪的, 不如从 nature 取舍, 用 ntr. 开个玩笑, 其实用 spawn 就挺好, 好多有栈协程都这么干
|
![]() |
253
weiwenhao OP |
![]() |
254
XIVN1987 17 天前 ![]() 看起来挺好,,楼主加油。。
|
![]() |
255
zthxxx 17 天前 ![]() 不要 try+catch !显式抛出 + pattern match 是好文明!
对,就类似 rust 的错误处理 |
256
fqns 17 天前 ![]() @weiwenhao 如果作者有精力的话, 可以尝试移植到 harmony 平台. 与其和老牌语言抢 WIN/MAC/LINUX 的市场, 不如在鸿蒙上尝试一番, 那玩意现在没几个语言移植, 反而是个打开知名度的好机会.
|
![]() |
257
twig 17 天前 ![]() 这语法真漂亮。
|
![]() |
258
twig 17 天前 ![]() 哇奥,大哥,这个可太赞了!
bar = null // x: Assigning null to any composite or simple type is not allowed // Method 1 string? s = null s = 'i am string' |
![]() |
259
sinx003 17 天前 ![]() 牛逼
|
260
a33291 17 天前 ![]() 语法我还是更喜欢 c#的,不过这个也简单直观,特别是纯静态交叉编译不错,加油👍
|
![]() |
262
shl3807 17 天前 ![]() 支持楼主加油
|
![]() |
264
shellcodecow 17 天前 ![]() 牛逼....这手册作的那个专业
|
![]() |
265
kissice 17 天前 ![]() 牛逼,已 star 支持。
|
![]() |
266
yuxian 17 天前 ![]() 太棒了,题主加油。我不喜欢用 go ,就是因为它没有处理好泛型。面对对象语言不解决好泛型,后期的代码就可以膨胀到无法维护。不喜欢 dart ,就是因为 Google 的风味,永远都无法理解,像 shit 的一样的语法和规范,还美其名曰,世界最佳。
题主继续加油,完善整个跨平台生态。这让我看到了希望。 |
268
xgdgsc 17 天前 via Android ![]() 没有 repl 也适合科学计算吗,感觉对科学计算有误解 https://discourse.julialang.org/t/blog-post-rust-vs-julia-in-scientific-computing/101711/22?u=xgdgsc
|
269
molika 17 天前 ![]() 猛男! 加油!
|
![]() |
270
weiwenhao OP @xgdgsc 看起来 repl 更加适合解释型编程语言。确实我对科学计算的理解确实有偏差,我以为的科学计算是类似 numpy 这样的数学计算库。但是就像你说的,类似 Jupyter Notebook 这样的可以实时验证的笔记工具确实也对科学计算很重要。
|
![]() |
271
chf007 17 天前 ![]() 官网看到有 Supported By jetbrains ,能讲讲这个么?给了什么样的支持?是要自已主动申请么
|
![]() |
272
weiwenhao OP ![]() @chf007 我用 nature 项目申请了一年的 jetbrains idea 使用。我主要是使用 clion 开发和调试,虽然现在 clion 也免费了,但历史赞助那也是赞助。
|
![]() |
273
x1aoYao 17 天前 ![]() struct 在 stack 但 tuple 却是在 heap ? tuple 不是可以理解为匿名结构体吗? tuple 是异构定长数组,怎么会在 heap ?官网文档写错了?
|
![]() |
274
patrickpu 17 天前 ![]() 还没有 net 标准库吗
|
275
CancoSeven 17 天前
已 star ,op 加油,好厉害!
|
![]() |
276
weiwenhao OP @x1aoYao 没写错,map/set/vec/tup 统一作为复杂结构默认放在 heap 上了,但是使用上应该是没有感知的。性能上可能会有轻微影响。tup 设计是为了支持多返回值。返回值使用大数据结构的时候为了 system abi 实现方便,通过指针传递更加便捷。所以就放在了 heap 里面。
|
![]() |
278
NowTime 17 天前 ![]() 太强啦 👍🏻!!
--- 昨天点 Star 时是 0.9K ⭐️,现在已经 1.6K ⭐️ 了 |
![]() |
279
x1aoYao 17 天前 via iPhone ![]() @weiwenhao 把 tup 实现成匿名结构也可以吧,毕竟函数返回 tup 是一个挺常见的现象,这样用户想为了避免影响性能只能命名一个结构体…
|
![]() |
280
zeonlamKen 17 天前 ![]() 大佬加油!!
|
![]() |
281
lovedebug 17 天前 ![]() 支持一下~ 厉害,继续加油!!!!
|
283
zhanlanhuizhang 16 天前
加油
|
![]() |
284
Lamlam147 16 天前 ![]() 已 star ,在我印象还停留在按键精灵是国人开发的变成语言,希望项目越来越好!
|
![]() |
285
xiejay97 16 天前 ![]() 加油,已 star ,希望能在国内这种环境中坚持住技术信仰
|
286
hayala 16 天前 ![]() 大佬能适配 JetBrains 全家桶吗,不是很喜欢用 vscode
|
![]() |
287
realpg 16 天前 ![]() 我是第一次特意打开 github 切到了个人大号 上去给你专门点了个 star 然后再退出换工作号
you worth it |
![]() |
288
5had0w 16 天前 ![]() 强!大佬加油!
|
290
kamilic 16 天前 ![]() 前些年学过 crafting interpreters 的内容,深知写一个语言 / 解析器有多复杂。
OP 一个人撸出了一个可用成品,简直是太强了 Orz |
![]() |
291
ychost 16 天前 ![]() 太厉害了,同时看到了 Go/C#/Kotlin 的影子(都是精华部分)是我想要的语言🌹
|
![]() |
292
realchaorders 16 天前 ![]() 厉害 可以加我微信吗 ai-social-media 招人
|
293
v2er119 16 天前 ![]() 看文档,好熟悉的代码风格, 支持自动 GC.
近日,多家外媒报道,美国网络安全和基础设施安全局( CISA )和联邦调查局( FBI )宣布将说服软件制造商放弃 C 和 C++ 等“内存不安全”的编程语言 |
294
wineejam 16 天前 ![]() 厉害了。大佬。膜拜
|
![]() |
295
kios 16 天前 ![]() 大佬牛逼
|
![]() |
296
yechentide 16 天前 ![]() 这语法... 不 star 不行了! 支持大佬, 希望这个语言能火起来!
|
![]() |
297
freestyle 16 天前 via iPhone ![]() 大佬, 支持.
|
![]() |
298
xclimbing 16 天前 ![]() 膜拜大牛,必须 star 一下表示支持。
|
![]() |
299
Biem 16 天前 ![]() 膜拜
|
![]() |
300
Biem 16 天前
看了仓库,太强了,满满的热爱和热血在里面,已 star
|