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

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

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

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

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