接之前的帖子 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 版本,详细的更新内容见 发行说明,这里进行简单的总结
预计再肝半年左右,nature 将会推出社区可用版本,届时会有稳定的语法 api ,完善的标准库,以及开发工具支持,我也将会基于 nature 启动项目同时也是大型测试用例 'SAO'。
此外,nature 中所有的标准库代码都会合并至主仓库,欢迎来贡献(从其他语言中搬运)。
如果想更进一步关注 nature 的发展,欢迎加入编程语言交流群,我会在这里分享有意思的提案或者是学习的资料,比如最近在进行的协程提案与相关知识。当然也可以通过 github 进行 watch 来了解相关的进度。也希望能够有新的股东 star 支持,这都是宝贵的动力 💪
1
zhanlanhuizhang 2023-09-26 09:17:41 +08:00 1
语法,看起来有点抽象
|
2
Panameragt 2023-09-26 09:17:54 +08:00 1
这个图标有点意思
|
3
duanquanyong 2023-09-26 09:21:45 +08:00 1
没啥新东西
|
4
LitterGopher 2023-09-26 09:23:03 +08:00 1
有配套 IDE 或 VSCode 插件么?其他编辑器插件也行,因为在官网上并没有看到有关的介绍。不然就这样硬写感觉还是挺难受的。
|
5
horizon 2023-09-26 09:27:39 +08:00 2
很强。
我用 rust |
6
weiwenhao OP @LitterGopher 估计再肝一段时间就有 lsp 了,另外已经有伙伴贡献了 vacode 高亮插件,在 issue 可以看到,我自己则是基于 vim 写的高亮插件进行编码。还没有发布
|
7
weiwenhao OP @horizon 第一版我也是 rust 写的,如果当时没有改用 c 就好了,rust 现在是非常受欢迎的编程语言 🥺
|
8
proxytoworld 2023-09-26 09:43:52 +08:00 1
为啥好像 go
|
9
proxytoworld 2023-09-26 09:44:09 +08:00
不过为啥不用 llvm
|
10
Masoud2023 2023-09-26 09:51:38 +08:00 34
一点建议:如果你想认真搞开源,就不要把什么国产化挂在嘴边蹭那堆粉红的热度
|
11
lingxi27 2023-09-26 09:57:20 +08:00 7
国产可不是什么好词
|
12
duke807 2023-09-26 09:59:42 +08:00 via Android 1
什么时候股东分红,分红协议书什么时候公布
|
13
codeself 2023-09-26 10:02:54 +08:00 via iPhone 1
遥遥领先遥遥领先👍
|
14
Nazz 2023-09-26 10:08:57 +08:00 1
为什么新语言都喜欢把数据类型搞那么短, 就跟变量命名用 a1, b1, c1 似的
结构体看起来挺花哨, 像 js function 一样让人很迷 |
15
weiwenhao OP @Masoud2023 我真心接受你的建议,我很清楚这两个字在 v 站的意义,但是当你评论的时候,其实已经间接的进行了支持。
|
16
weiwenhao OP |
17
Masoud2023 2023-09-26 10:11:28 +08:00 1
@weiwenhao #15 这语言语法设计的挺有趣的,我有点感兴趣,已经 star 了
|
18
weiwenhao OP @Nazz 可以看一下设计理念部分,为什么选择这么短的关键字 https://github.com/nature-lang/nature/blob/master/README_CN.md
|
20
pengtdyd 2023-09-26 10:14:08 +08:00 1
加油!!!!!!!!!!!!!!!!!这是黑暗里面的一束光。
|
21
weiwenhao OP @proxytoworld 最主要的原因是我想掌握原理,也可以叫自主可控? 🤔
|
22
weejulius 2023-09-26 10:17:17 +08:00 3
加油,国产挺好的,v 站的人很多都对国产有生理反应。
|
23
Xzong 2023-09-26 10:19:44 +08:00 1
加油,国内的开源环境真是乌烟瘴气,希望 op 能一直保持初心
|
24
Nazz 2023-09-26 10:21:33 +08:00
@weiwenhao 我觉得 go 关键字长度比较适中, 语义性更好. 我觉得如果语法更接近 go, 且实现了方法泛型完善了错误处理, 提供 oop 风格的数据容器, 会更加有吸引力.
|
25
ragnaroks 2023-09-26 10:23:21 +08:00 1
第一眼像是静态版 node ,如果能有稳定的生态应该是不错的选择
|
26
gaifanking 2023-09-26 10:25:20 +08:00 1
自从这两年看了下 go ,kotlin, c++之后对新语言特性就失去了兴趣,大差不差,有点语言 ed 了。
|
28
weiwenhao OP @gaifanking 这样刚刚好呀,nature 的设计理念之一就是不要自己创造新的语言特性,不需要学任何东西。不能增加用户的使用成本。
|
29
weiwenhao OP @Nazz 这关键字部分可能不会再改了,因为这些关键字在 rust 等语言中的评价很不错。oop 风格后续会基于"组合"的思想进行优化。 方法泛型,错误处理都已经完善了。
|
30
Nazz 2023-09-26 10:33:51 +08:00
不依赖 llvm 是出于什么考虑?
|
31
proxytoworld 2023-09-26 10:35:38 +08:00
@weiwenhao 如果玩具的话可以自己实现,但如果真想弄的话还是基于现有的轮子比较好,像 rust 只是把 llvm 当作一个中间层,用来转化 ir 和 native code
|
32
proxytoworld 2023-09-26 10:36:25 +08:00 1
另外 op 有计划做 Linux 和 Windows 的 FFI 吗
|
33
mightybruce 2023-09-26 10:40:47 +08:00 1
搞新语言和编译器很难盈利的,不是语言特性好不好的问题,而是根本没几个人用。
|
34
mightybruce 2023-09-26 10:44:14 +08:00
语言要考虑解决什么工程问题,有很多语言开发最后都虎头蛇尾,比如七牛搞的 Go+, goplus
|
35
7gugu 2023-09-26 10:45:44 +08:00 2
|
36
zilan2abv 2023-09-26 10:47:42 +08:00 2
加油
支持坚持国产,V 站很多就是国产 PTSD |
37
weiwenhao OP @proxytoworld 在这个版本中,我着重让数据结构变得标准,所以做 FFI 应该不是困难的事情。但是 nature 让其他语言调用我还没有考虑(wasm 除外),调用别的语言的 FFI 我会考虑。
|
38
weiwenhao OP @mightybruce
@duanquanyong 第一目标是可用,第二目标是爬上巨人的肩膀,第三目标是站在巨人的肩膀上走的更远。 接下来我也会用 nature 创造有价值的东西,语言本身没有价值,有价值的是语言创造的东西。比如文中的小型测试用例 parker 我觉得就是一个有价值且有意思的工具。 |
39
qiufengshe 2023-09-26 10:53:07 +08:00 1
加油
|
40
yaott2020 2023-09-26 10:53:31 +08:00 via Android 2
怎么说呢,一会看像 go ,一会看又像 python ,再看一会又像 rust 。。。
|
41
e3c78a97e0f8 2023-09-26 10:57:05 +08:00 via iPhone 1
看到标题我以为是汉语编程语言
|
42
weiwenhao OP @yaott2020 嗯,当你看到 defer 你可能就知道这是做什么用的关键字,当你看到 fn/i8/i16 这些你也能一眼就明白含义,尽可能的减少了学习的成本。
|
44
hronro 2023-09-26 11:22:26 +08:00 1
既然是自己实现的后端,不知道性能对比起 C/Rust/Go 来说如何,有没有这方面的 benchmark 。
另外看了下错误处理的语法,感觉不是很现代,不太喜欢。 |
45
c2const 2023-09-26 11:22:32 +08:00 1
1.很难盈利,客户也怕你维护慢或者维护不下去了,很难 :(
2.国产化现在也不是好词了 :( |
46
littlebrother 2023-09-26 11:26:01 +08:00 1
只能说牛逼
|
47
weiwenhao OP @hronro 无,由于还没有做后端优化,这方面目前是弱势,所以我尽量扬长避短。非标准测试中,fib(40) 这样的 cpu 密集计算耗时是 golang 的 3 倍,GCC -O3 的 6 倍。
|
48
weiwenhao OP |
49
weiwenhao OP @c2const 维护速度这个,我还是挺有自信的,我现在兼职的情况下,我觉得我速度其实是快过一般编程语言的维护速度的。快的主要原因是我熟悉每一行代码。
另外原则上不靠编程语言本身盈利,编程语言本身是没有价值的,我会尽量使用 nature 创造有价值的产品。 |
50
skiy 2023-09-26 12:44:35 +08:00 via iPhone 1
其实,我更想要一款写 gui 的工具…
作者现在还肝“编程语言”,感觉是 49 年入国军…现在写代码,流行的编程语言,不懂的还能去问 gpt…小众语言,gpt 也不懂… 现在搞游戏引擎(图形化)感觉挺不错…rust 的 bevy 都没成熟… |
51
agagega 2023-09-26 12:48:05 +08:00 via iPhone 1
国产这个词确实已经被某些机构组织搞变味了。比如我是中国人,我写了个项目开源出来,某些人跳出来说是国产,总觉得怪怪的,像自己的项目被无偿上交了一样。
我建议以后把这类项目里的「国产」改为「国人产」。一字之差,好感度上升不少。 |
52
weiwenhao OP @skiy 我 44 年的时候入了国军,现在已经没有回头路了。游戏引擎我也很有兴趣,但是这是一个大工程,又要 5 年起步,所以我必须慎重一点启动。
|
53
skiy 2023-09-26 13:14:21 +08:00
@weiwenhao 可以将编程语言跟往这方面靠(哪怕是插件、外部库形式),感觉这将是一个爆点。现在也在推信创了,deepin 也在推它的玲珑。感觉这个应该能够来钱。
|
55
dwzfuck 2023-09-26 13:58:40 +08:00 1
赞, 话说作者实现自举了没
|
57
antonius 2023-09-26 14:15:38 +08:00 3
Yet Another Programming Language ;-)
OP 很厉害,能坚持能做这件事,就已经超越很多人了。 不过“游戏引擎与游戏制作”的过程中,除去引擎本身运行时的开发,更多的是各种工具/工作流的整合,这是一个巨大的工程。对于一门新生的编程语言,这个目标过于庞大。 个人的几点建议: 1. 缩小规模:不先考虑游戏引擎,先考虑对多媒体功能的支持。比如预览 jpeg, png, webp, avif, dds, ktx, basisu 等纹理的工具,压缩/解压/转换纹理的工具等等,或者声音格式 ogg, wav, mp3 等格式的转换工具等等。 2. 精简游戏运行时框架:不和 Unreal, Unity ,甚至 Godot 比拼。可以参考 Love2D 这样的引擎。 3. 增加第三方库的 nature 语言绑定,比如业界常用的 dear-imgui ,sdl2 ,box2d ,bullet ,assimp 等等。 游戏开发也是有生态圈的,维护好生态圈也绝非易事。其实你的语言不必什么都能做,只要在某个方面做到最好,就有一席之地。加油💪! |
58
antonius 2023-09-26 14:21:54 +08:00 1
@skiy 可以了解一下 imgui 。
或者在这几个库里挑一挑。 https://github.com/floooh/sokol https://github.com/nothings/stb https://github.com/mattiasgustavsson/libs |
59
weiwenhao OP @antonius 👍 都是纯 C 。我不会去走正常流程从头做起,现在 nature 可以调用 C 语言库,所以很多方面实现起来比较简单。 另外确实如你所说,我计划就是选择某个特定的方面。尽可能将整体工作量压缩在一年以内,能够已最小代价实现一个 demo 。
|
60
learningman 2023-09-26 14:49:57 +08:00 via Android
所以我还是不明白这个语言可以做到什么其他语言做不到的事情
|
61
learningman 2023-09-26 14:50:25 +08:00 via Android 1
或者说不叫其他语言做不到,指其他语言不方便,但是这个语言可以很轻松的实现的那种,比如 golang 的协程
|
62
weiwenhao OP @learningman nature 是基于 C 语言的改进,有更加现代的类型系统,内置多种数据结构支持,按照模块化管理明明空间,并支持包管理。具备运行时堆栈追踪(而不是 stackoverflow) 等等。 起于 C , 但同时 nature 也可以轻松的与 C 语言的模块进行交互。
|
63
DiamondY 2023-09-26 15:59:47 +08:00 1
已 star ,哈哈
|
64
diggerdu 2023-09-26 16:40:17 +08:00 2
@Masoud2023 不喜欢可以不回复 说个不好听的 你自己又做了什么拿的出手的?
|
65
diggerdu 2023-09-26 16:40:38 +08:00 1
已 star
|
66
Masoud2023 2023-09-26 16:47:45 +08:00
|
67
Masoud2023 2023-09-26 16:49:12 +08:00
|
68
diggerdu 2023-09-26 17:04:49 +08:00 3
@Masoud2023 浑身上下除了一张嘴以外什么成果都拿不出来,就连喷人也只能憋出一个“典”的人确实挺典的 这么恨我国怎么不快进到电子宠物?天天这个环境烂了 那个没法建设了 就你世浊独醒 那你做的东西连这些烂的都不如那你是个什么 真给个机会你润了你一样也是个
|
69
keepRun 2023-09-26 17:08:20 +08:00 1
我提个建议:即使是编程语言也要考虑市场需求,比如 java web 端强势,python 语法简洁易用,人工智能是强项,每个语言都有自己的强项,你也得考虑自己的语言应该偏重哪些方向,解决当前技术中哪些痛点
|
70
Masoud2023 2023-09-26 17:24:34 +08:00 1
@diggerdu #68
典,我又恨国了。 那你去建设啊,我好期待你能建设下我国优秀的开源环境。 要么贴下你 github ,哦不,别 github 了,贴个我国优秀开源社区的 gitee 的 homepage 看看,看看你对我国优秀的开源环境做了什么贡献? |
71
Masoud2023 2023-09-26 17:28:07 +08:00 1
|
72
Aloento 2023-09-26 17:31:19 +08:00
Go + Rust ?缝合
|
73
cyndihuifei 2023-09-26 17:35:49 +08:00 1
加油
|
74
RockShake 2023-09-26 17:54:48 +08:00 1
作为学习完全没问题,但是如果不能有杀手级应用,解决特定问题,最终没法普及使用。
|
76
weiwenhao OP |
77
haha512 2023-09-26 18:25:58 +08:00 1
所有国产操作系统内核都是开源的 Linux ,为什么没人搞“国产操作系统内核”呢,不是要追求自主可控吗
不管怎样支持下,已 star ,不过建议还是不要用“国产”来做卖点,相对于开源的外国产,同为开源的国产项目有什么特别优势呢,仅仅因为作者是中国人吗? java 是非国产的,很多在 java 上搞得国产 xx 框架,这就能增加对 java 的自主可控吗 为啥那么迷恋自主可控呢。1 个国家对 200 个国家 O(∩_∩)O~ |
78
skiy 2023-09-26 20:09:34 +08:00 1
有些问题:
1. 必须安装到 /usr/local/ 下,这个不太好。建议找 full_path 时,可以取得当前 nature 命令的路径后,再查找相找相关路径 。 2. nature 没有 --help / -h 帮助信息。只能直接跑 build ,不可以 nature run main.n 吗? 3. README 中的 http.server ,跑不通:main.n:7:22: parser variable definitions error, ')' not a ident 。 持续关注。以后有问题再到 issue 提。 |
79
B1ankCat 2023-09-26 20:19:04 +08:00 1
版本号有点快了,1.0.0 至少得处于可用状态,然后得找个切入方向展示语言优点
|
80
kneo 2023-09-26 20:22:21 +08:00 via Android 1
某些人不要颠倒主次了。难道把“国产”去掉就能让一个烂项目变成好项目?
|
81
letianqiu 2023-09-26 20:27:30 +08:00 1
看到之后第一反应是后端是 llvm ,没想到看了代码之后发现是自己实现的后端。不过目前的后端的确是比较简单/toy 。想问问楼主为什么不用 llvm ?
|
82
2NUT 2023-09-26 20:39:18 +08:00
你怎么有时间做这个的? 分享下时间管理 和 项目管理 以及 精力管理 的经验
|
83
SHF 2023-09-26 20:49:50 +08:00
不支持 windows 系统吗?那用都用不了
|
84
weiwenhao OP @skiy
1. 目前就是根据 nature 所在路径查找的 NATURE_PATH, /usr/local 只是推荐路径。 2. 确实不支持 -h 以及 run, 只支持 build 。 3. github 用例展示中,标准库还不支持 http ,并且其中 http server 确实有代码问题,第七行参数没有给类型,我记录一下,下一次更新一下用例。 感谢你认真体验。这让我非常有动力。 |
85
weiwenhao OP @B1ankCat 版本号问题不大,只要不能到可用要求,那 0.10 ,0.11 都会往上推进。1.0.0 必须达到商业可用版本。
|
86
weiwenhao OP @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. |
88
weiwenhao OP |
89
skiy 2023-09-26 21:08:49 +08:00 1
@weiwenhao
1. 我是将 export PATH="$PATH:$HOME/nature/bin"。添加到了 PATH ,运行时找不到标准库。 2. 我意思是,添加个帮助文档好些,否则不知道有哪些命令。比如现在有 "build" 和 “--version” 这些参数。 |
90
fpure 2023-09-26 21:15:32 +08:00
变量的类型前置,函数的类型后置,这么随意的吗
|
92
weiwenhao OP |
93
AItsuki 2023-09-27 00:53:32 +08:00 2
先膜拜下大佬,然后提点建议:
关于错误处理,比较推荐 go 或 rust 那种显式返回异常的方式,能降低不少心智负担。 否则就出现 "这个函数要不要 try ,点进去看看",或者 "管他的,try 一下" 这种很让人操蛋的行为。 |
94
Jirajine 2023-09-27 05:00:38 +08:00 via Android
@Masoud2023 #10 错,强烈支持把“国产”、“自主可控”作为卖点,这样就可以节省时间不用点开看了。
|
95
simpx 2023-09-27 06:55:20 +08:00 1
很棒啊!先顶再看,大概瞄了一眼感觉和 zig 有点像啊,作为给 zig donate 了 5$的人,非常期待以后的应用!
|
96
dangyuluo 2023-09-27 07:45:16 +08:00 1
赞一个,国内做编译器的人实在是太少了
|
97
sapjax 2023-09-27 07:53:57 +08:00 1
看 OP 两年前还在写 CLox, 进步这么快的?
|
98
hejingyuan199 2023-09-27 08:01:30 +08:00 1
非常感谢。饶有兴趣地读了一遍英文版文档,对我这个非英语母语者来说这个文档写得比 native english speaker 那些文档更容易让我读通顺。
|
99
weiwenhao OP @AItsuki 嗯嗯,考虑过这个问题,实际上支持多返回值是完全兼容 golang 的错误处理方式。 另外其实 try 吃基于 try catch 的,下个版本会开放 var err = try {} 的形式。
|