V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
weiwenhao
1.3D
V2EX  ›  程序员

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

  weiwenhao ·
weiwenhao · May 20, 2025 · 28752 views
This topic created in 346 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  
no13bus
    301
no13bus  
   May 21, 2025   ❤️ 1
@weiwenhao 嗨,时代的悲哀。这么有志向,品味的工程师,大公司应该破格录取。
hutoer
    302
hutoer  
   May 22, 2025   ❤️ 1
看到介绍说:Compile to readable go programming language 。我觉得你可以做个 golang 转 nature 的工具,这样可以快速完善生态。这些生态不一定要你来做,有转换工具,会有人来做这些事情。
marunrun
    303
marunrun  
   May 22, 2025   ❤️ 1
🐂的 , 初步看到了 golang + kotlin 的各种优点
weiwenhao
    304
weiwenhao  
OP
   May 22, 2025
@no13bus 不是这样,我之前面试的岗位就是后端开发,不是编译器相关。企业有自己的快速的筛选人才的标准,我很尊重这种做法。
wurtwzs
    305
wurtwzs  
   May 22, 2025   ❤️ 1
佩服大佬,真的厉害👍
patrickpu
    306
patrickpu  
   May 22, 2025   ❤️ 1
@weiwenhao 兼顾收入和兴趣就挺好了
kir4
    307
kir4  
   May 22, 2025   ❤️ 1
IDA 看了一下,有点意思,可以出个逆向题玩一下
realpg
    308
realpg  
PRO
   May 22, 2025 via iPhone   ❤️ 1
@no13bus 去大公司拧螺丝钉吗?
jeck5001
    309
jeck5001  
   May 22, 2025   ❤️ 1
厉害啊!!!
hikarumx
    310
hikarumx  
   May 22, 2025   ❤️ 1
膜拜大佬,大神级别了。 这种可以上央视了吧。
vus520
    311
vus520  
   May 22, 2025   ❤️ 1
```
type person = struct {
string name
int age
bool active
}

```
这个等号作用似乎不大
fpure
    312
fpure  
   May 22, 2025   ❤️ 1
令人惊异的完成度,这已经完全不是玩具了,成熟度非常高,可以想象作者的投入有多么大
football
    313
football  
   May 23, 2025   ❤️ 1
太优秀了,为大佬点赞!加油!!
weiwenhao
    314
weiwenhao  
OP
   May 23, 2025
@vus520 存在泛型的时候,有个等号隔开会比较清晰可读, 比如 type person<T> [T] 和 type person<T> = [T] 的区别
charles0
    315
charles0  
   May 24, 2025   ❤️ 1
我也曾经想开发一个编程语言,可惜止步于一个简单的 demo ,而这个 nature 语言已经达到了相当完善的地步,实在厉害。
而且我发现 https://nature-lang.org/docs/contribute 这篇文档很不错,信息量很大,值得那些对现实中的编译器感兴趣的人阅读
1  2  3  4  
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1025 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 54ms · UTC 18:11 · PVG 02:11 · LAX 11:11 · JFK 14:11
♥ Do have faith in what you're doing.