V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
weiwenhao
V2EX  ›  程序员

这是我开发的编程语言 nature

  weiwenhao ·
weiwenhao · 2023-05-12 10:52:49 +08:00 · 11032 次点击
这是一个创建于 559 天前的主题,其中的信息可能已经有所发展或是发生改变。

当正式版本发布时,nature 会有稳定语法 API 、类型系统、GC 、协程、泛型、包管理、基础标准库。

nature 支持交叉编译,可以编译到 linux/darwin & amd64/riscv64/wasm ,同样也可以解释到 nature-vm 执行。

这是官网 https://nature-lang.org 你可以在这里得到更多的信息以及它的文档

代码仓库 https://github.com/nature-lang/nature

我不想也不能说 nature 解决了 xxx 问题,或者比 xxx 快多少。实际上 nature 只是我在学习计算机程序的构造与解释时产生的一颗种子。然后在过去的某个时刻,我决定让它发芽 🌱,所以我尽可能的将它完善并发布了出来。接下来我也将继续推动 nature 直到首个正式版本发布 🌳。

v2ex 是我目前唯一关注的程序员相关的论坛了,所以选择在这里发布。虽然 nature 目前还不能帮助大家做什么,但是我依旧希望能够得到大家的支持(求 star),大家如果有摸鱼群也可以帮忙分享一下,谢谢大家了。

另外早上发布过一次,但是节点选错了,不知道沉到哪里去了,我就厚着脸皮再发一次 🙏

第 1 条附言  ·  2023-08-04 10:55:30 +08:00
过去这些天又发布了两个版本,https://github.com/nature-lang/nature/releases 主要是支持了 泛型/联合类型/null 安全/重载/包管理/基础标准库 syscall 以及一些语法优化等等。

不过附言的主要目的是,建了一个群用来同步版本更新信息,编译器/编译原理/编程语言等有意思的东西我也会同步到 wechat 群里里面

可以添加微信号 nature-lang 备注 “申请加群” 进群, 或者留下你的微信号我拉你~
121 条回复    2023-09-27 10:30:31 +08:00
1  2  
TtTtTtT
    1
TtTtTtT  
   2023-05-12 11:00:01 +08:00   ❤️ 1
超 cool ,要是能背靠大厂就不愁没人转发了!
hsfzxjy
    2
hsfzxjy  
   2023-05-12 11:00:47 +08:00 via Android   ❤️ 4
赞~个人觉得,因为“想做”就去做的项目也是值得支持的
dunhanson
    3
dunhanson  
   2023-05-12 11:04:44 +08:00
没有中文文档?
weiwenhao
    4
weiwenhao  
OP
   2023-05-12 11:04:59 +08:00
@hsfzxjy 感谢鼓励 ✨
weiwenhao
    5
weiwenhao  
OP
   2023-05-12 11:05:30 +08:00
kaz10025
    6
kaz10025  
   2023-05-12 11:06:43 +08:00   ❤️ 1
膜拜大佬~已 star🥹
dw2693734d
    7
dw2693734d  
   2023-05-12 11:07:37 +08:00
专业啊
Oktfolio
    8
Oktfolio  
   2023-05-12 11:08:07 +08:00
做了每个 programmer 想做的事
0littleboy
    9
0littleboy  
   2023-05-12 11:14:51 +08:00
nb
githmb
    10
githmb  
   2023-05-12 11:22:19 +08:00
能用了吗?自举一下
weiwenhao
    11
weiwenhao  
OP
   2023-05-12 11:24:55 +08:00
@githmb 可以 docker 快速体验,自举基本还没到考虑的时候,https://nature-lang.org/ 官网首页 fib.n 的例子。

docker run --rm -it -v $PWD:/app --name nature naturelang/nature:latest sh -c 'nature build fib.n && ./main'
xiaotiancheng
    12
xiaotiancheng  
   2023-05-12 11:29:00 +08:00
牛皮
yazinnnn
    13
yazinnnn  
   2023-05-12 11:31:59 +08:00
变量类型在左, 函数返回值类型在右, 函数参数的类型又在左....

用 try catch+积类型+元组处理异常, 函数签名还不带异常信息

这语法也太逆天了....

-----------------

string car = "hello world"

fn sum(int a, int b):int {
return a + b
}

fn rem(int dividend, int divisor):int {
if (divisor == 0) {
throw "divisor cannot zero"
}

return dividend % divisor
}

// v 对可能出现的错误使用 catch 关键字进行拦截
// 当不存在错误时 err == null ,在 if 判断中, null 会进行隐式类型转换为 false
// 同时利用了 tuple 解构快速赋值来将 catch 的返回结果进行解构
var (result, err) = catch rem(10, 0)
LUO12826
    14
LUO12826  
   2023-05-12 11:36:19 +08:00
竟然没用 LLVM 全手撸,而且还是 c ,有点猛
zttviYang
    15
zttviYang  
   2023-05-12 11:37:40 +08:00
我依稀记得几年前你在 Laravel China 上发布过一些文章
weiwenhao
    16
weiwenhao  
OP
   2023-05-12 11:44:03 +08:00   ❤️ 1
@yazinnnn 是的,这几个月我定了太多的语法,开发语法太简单了,一天就能集成一个语法,但是我觉得这样很不好,所以我希望能得到更多人意见,更好的参考资料。 如果现在是 0.1 版本,不提供稳定的语法 api. 就是希望还能有机会反悔。
weiwenhao
    17
weiwenhao  
OP
   2023-05-12 11:45:27 +08:00
@zttviYang 哇,应该是的,我之前是一名 laraveler 😊
weiwenhao
    18
weiwenhao  
OP
   2023-05-12 11:47:10 +08:00
@LUO12826 你都看起源码了 🫰。 因为一开始是学习目的而非找到工作的目的,所以没有打算去学习怎么调用 llvm 的 api, 另外 c++ 项目对我来说学习成本和源码阅读成本有些高。
ired
    19
ired  
   2023-05-12 11:51:22 +08:00
加油
cohen121
    20
cohen121  
   2023-05-12 11:53:38 +08:00   ❤️ 1
厉害,已 star ,持续关注下
likunyan
    21
likunyan  
   2023-05-12 12:05:48 +08:00
国产第一个编程语言?
woshipanghu
    22
woshipanghu  
   2023-05-12 12:09:58 +08:00
大佬 支持下
ijyuqi
    23
ijyuqi  
   2023-05-12 12:14:19 +08:00
强,持续关注下
itskingname
    24
itskingname  
   2023-05-12 12:15:46 +08:00
在哪个版本会让它自举?用 nature 实现 nature 的编译器
heliker
    25
heliker  
   2023-05-12 12:19:24 +08:00 via Android
关注
weiwenhao
    26
weiwenhao  
OP
   2023-05-12 12:30:43 +08:00
@likunyan 已经有很多了吧,关注度比较高的,比如华为的方舟编译器,凹语言,易语言,go+, 木兰语言等等
weiwenhao
    27
weiwenhao  
OP
   2023-05-12 12:31:34 +08:00
@itskingname 这个感觉不太重要,所以不在规划内,倒是有一个其他的计划,暂时保密。
veike
    28
veike  
   2023-05-12 12:53:01 +08:00
已 star ,顺便收藏了贴子。只要是有人开发语言不论出于什么目的,我都会支持。
另外问一下,能否给一个开发编程语言的学习路径,对这方面非常感兴趣。凹语言的群我也加过了。
weiwenhao
    29
weiwenhao  
OP
   2023-05-12 12:55:32 +08:00
@veike https://nature-lang.org/docs/prologue/contribution-guide 相关资料部分就是我的学习路线
weiwenhao
    30
weiwenhao  
OP
   2023-05-12 12:56:05 +08:00
@likunyan 差点忘了,做的最好的应该是 rescript
veike
    31
veike  
   2023-05-12 13:07:37 +08:00
@weiwenhao 谢谢
excitedXXX
    32
excitedXXX  
   2023-05-12 13:19:39 +08:00   ❤️ 1
已 star ,能把想法变成现实已经很牛逼啦
matrix1010
    33
matrix1010  
   2023-05-12 13:31:35 +08:00
op 是全职在写这个还是工作之余写一写? 推广的好理论上 star 应该能比普通项目多,但问题是作为一个语言也仅仅是 star 多而已,可能没人会真去用。如果用来找工作估计也效果没那么好
dk7952638
    34
dk7952638  
   2023-05-12 14:03:07 +08:00   ❤️ 2
这语言设计没得说,但是我觉得现阶段想创造一门成功的语言,还是看生态和轮子的丰富程度,我觉得至少出一个像样的框架,比如说一套符合语言设计风格的 web 框架
weiwenhao
    35
weiwenhao  
OP
   2023-05-12 14:03:47 +08:00
@matrix1010 工作之余写一写,我把 star 作为是对我的一个正向反馈,让我更加有动力进行下一阶段。 另外我也期望能有一个全职写的机会,我的工作确实比较忙。
enchilada2020
    36
enchilada2020  
   2023-05-12 14:04:49 +08:00 via Android
厉害…
wilsonsui
    37
wilsonsui  
   2023-05-12 14:07:27 +08:00
666
luckyv2
    38
luckyv2  
   2023-05-12 14:08:01 +08:00   ❤️ 1
挺好的 看起来函数定义和 rust 差不多,最近在看 rust 难搞哦
有自己想法,值得支持的
24Arise
    39
24Arise  
   2023-05-12 14:15:46 +08:00   ❤️ 1
厉害,已 star .
pota
    40
pota  
   2023-05-12 14:16:54 +08:00
star 了 支持一下
matrix1010
    41
matrix1010  
   2023-05-12 14:18:19 +08:00 via iPhone   ❤️ 1
关于名字 op 也可以再考虑考虑,比如我 google nature 或者 nature language 估计都搜不到这个,因为 nature 用的太广泛了
Helsing
    42
Helsing  
   2023-05-12 14:21:21 +08:00 via iPhone   ❤️ 1
厉害,支持
weiwenhao
    43
weiwenhao  
OP
   2023-05-12 14:24:08 +08:00
@matrix1010 @dk7952638

感谢建议
stkstkss
    44
stkstkss  
   2023-05-12 14:25:05 +08:00 via iPhone
proletarius
    45
proletarius  
   2023-05-12 14:26:04 +08:00
大佬有考虑过出视频吗,想学习学习
lfcyme
    46
lfcyme  
   2023-05-12 14:27:12 +08:00
厉害呀,没用 llvm
lsiufD
    47
lsiufD  
   2023-05-12 14:27:21 +08:00
为行动派点赞
ren2881971
    48
ren2881971  
   2023-05-12 14:43:08 +08:00
牛!给你点赞
summerLast
    49
summerLast  
   2023-05-12 14:43:49 +08:00
@proletarius 学习下 sicp 就基本入门了
summerLast
    50
summerLast  
   2023-05-12 14:46:16 +08:00
@summerLast 前者是实现的玩具 https://github.com/sunxyz/rust-lisp
后者是严格按 scheme 语法开发的 https://github.com/sunxyz/scheme4r
tanghongkai
    51
tanghongkai  
   2023-05-12 14:47:37 +08:00
star 了,正好课内也在学习相关内容,甚至还不是用 llvm 纯手撸的
getoffworkontime
    52
getoffworkontime  
   2023-05-12 15:51:06 +08:00
🐂
Stoney
    53
Stoney  
   2023-05-12 15:58:23 +08:00 via iPhone
膜拜大佬
forty
    54
forty  
   2023-05-12 16:02:10 +08:00
JS/TS 人看了觉得很亲切
forty
    55
forty  
   2023-05-12 16:02:50 +08:00
支持函数重载吗?
andytao
    56
andytao  
   2023-05-12 16:03:25 +08:00
fn fib(int n):int
===》 函数定义 C/C++ 已经有很成熟的范式了,为何要跟风搞这些奇怪的语法呢?
ShadowPower
    57
ShadowPower  
   2023-05-12 16:13:14 +08:00
@andytao 这种语法形式写 parser 比 C/C++那种简单一些
andytao
    58
andytao  
   2023-05-12 16:16:07 +08:00
能否基于 C/C++/C#/Vala 并再做一些减法,输出一个新的原生语言:
C --> C++ --> C#(C++++) -->Vala(C#+) --> C niubility(C#++,C++++++, sample.niu / sample.ctrip)
andytao
    59
andytao  
   2023-05-12 16:17:14 +08:00
@ShadowPower 能省则省,简洁为上。
mooddance
    60
mooddance  
   2023-05-12 16:21:33 +08:00
大致看了下语法,看到了很多语言的样子。能介绍下你这个语言有哪些特点吗?
ShadowPower
    61
ShadowPower  
   2023-05-12 16:24:50 +08:00   ❤️ 1
@andytao C/C++的语法里,一个函数定义的开头是函数返回值,parser 至少要读取到第 3 个 token 才能确定第一个 token 是什么类型。
如果语言要支持泛型,哪怕照搬 C#的那种写法,这个工作量就更大了。

把函数返回值放在末尾,还方便在语法设计里省略书写返回值类型,只需要编译器自己推导。尤其是类型特别复杂的时候。而不需要用 var 、auto 之类的东西作为代替。
Margarethe
    62
Margarethe  
   2023-05-12 16:56:14 +08:00
给你点赞,做了我一直想做,但是没时间也没能力做的事
weiwenhao
    63
weiwenhao  
OP
   2023-05-12 16:59:45 +08:00
@ShadowPower 一开始是想类型全部前置的,可以在 examples 目录里面看到,但是在最后几个月,我发现 虽然函数返回类型前置能够省略 fn 符号的编写,但是在编写高阶函数时,尤其是匿名函数会非常的丑陋和不可读
weiwenhao
    64
weiwenhao  
OP
   2023-05-12 17:02:20 +08:00
@forty 目前不支持哦,但是这是我非常喜欢的一个功能,我计划在设计泛型时一起考虑进来。
weiwenhao
    65
weiwenhao  
OP
   2023-05-12 17:02:55 +08:00
@Margarethe 每个人都有能力的,时间才是问题。
weiwenhao
    66
weiwenhao  
OP
   2023-05-12 17:05:48 +08:00
@mooddance 官网首页有三个特征,都是和某一我使用过的热门语言对比,但是因为这是属于拿硬币的直径和笔记本的厚度做对比,所以我不太好意思直说是什么语言了。

https://nature-lang.org/docs/getting-started/meet-nature 文档这里包含 nature 自身具有的一些特征。 如果使用雷式对比法则的话,其实是有一些特点的。但是目前都不太敢明目张胆的说出来,怕话说的太满反而适得其反
lilei2023
    67
lilei2023  
   2023-05-12 17:07:25 +08:00
这玩意没点功底,搞不定,厉害
Esen
    68
Esen  
   2023-05-12 17:15:44 +08:00
厉害了,膜拜大佬
TwoCookie
    69
TwoCookie  
   2023-05-12 17:24:41 +08:00
star 支持一下
kangkag0231
    70
kangkag0231  
   2023-05-12 17:25:19 +08:00
cool 做了很多人想做的事
bruce0
    71
bruce0  
   2023-05-12 17:32:35 +08:00
吊啊卧槽, 整个全手撸的 我还以为是套了其他编译器或者语言的东西(比如 llvm) 竟然全手撸 牛逼
17681880207
    72
17681880207  
   2023-05-12 17:37:13 +08:00
不服不行...😀
arvinsilm
    73
arvinsilm  
   2023-05-12 17:39:43 +08:00
Github 的 README 是否可以加上官网和文档的链接,只看这个 README 感觉介绍的太简洁了
shenjinpeng
    74
shenjinpeng  
   2023-05-12 17:41:43 +08:00
有点像 PHP 和 Go 的结合体
kujio
    75
kujio  
   2023-05-12 17:44:28 +08:00
有大厂的话就可以 “国产、自研、创新” 了
Radiation
    76
Radiation  
   2023-05-12 17:47:44 +08:00   ❤️ 1
已 Star ,希望可以坚持下去,加油!
littlewing
    77
littlewing  
   2023-05-12 17:49:38 +08:00   ❤️ 1
"我不想也不能说 nature 解决了 xxx 问题,或者比 xxx 快多少。实际上 nature 只是我在学习计算机程序的构造与解释时产生的一颗种子。然后在过去的某个时刻,我决定让它发芽 🌱,所以我尽可能的将它完善并发布了出来。"
就为了这句话点赞
fionasit007
    78
fionasit007  
   2023-05-12 17:52:12 +08:00
@likunyan 这个就没必要硬扯了。。。语言能好开放的,但是开发是一回事使用是一回事
weiwenhao
    79
weiwenhao  
OP
   2023-05-12 18:11:07 +08:00
@arvinsilm 可以,我现在去搞一个
xrr2016
    80
xrr2016  
   2023-05-12 18:14:56 +08:00
牛,star 了
keith233
    81
keith233  
   2023-05-12 18:27:32 +08:00
有点 cool
also1412
    82
also1412  
   2023-05-12 18:28:26 +08:00
⭐️
x2ve
    83
x2ve  
   2023-05-12 18:37:32 +08:00
点赞
janus77
    84
janus77  
   2023-05-12 18:39:12 +08:00   ❤️ 1
建议可以发一下初步的性能评估,如果有后来者真想用他做什么东西的时候,其实这方面会是很大的一个推动理由
buxudashi
    85
buxudashi  
   2023-05-12 18:41:36 +08:00   ❤️ 1
建议作者看看另一个以前遇到过的小软件。aardio, 很多功能也是挺简洁的。尤其类库看看。windows 上用的。
yujieyu7
    86
yujieyu7  
   2023-05-12 18:48:41 +08:00
虽然是造轮子,但 op 绝对是大佬,而且对自身提高蛮大的,膜拜
kokdemo
    87
kokdemo  
   2023-05-12 18:50:04 +08:00
很酷哇
mustcool
    88
mustcool  
   2023-05-12 18:57:07 +08:00
很强,加油
Nzelites
    89
Nzelites  
   2023-05-12 18:58:07 +08:00
有没有用另说 但是酷啊!
jsjjdzg
    90
jsjjdzg  
   2023-05-12 19:01:04 +08:00
牛啊,已 Star
imMetaverse
    91
imMetaverse  
   2023-05-12 19:08:35 +08:00
牛 膜拜下
fan1234nm
    92
fan1234nm  
   2023-05-12 19:13:25 +08:00
star 了 , 屌
iPhone11
    93
iPhone11  
   2023-05-12 19:21:21 +08:00
看了示例 第一眼觉得像 golang 再看像 Rust 详细回家看 先 star 支持大佬
24bit
    94
24bit  
   2023-05-12 19:22:23 +08:00
cool!
rus4db
    95
rus4db  
   2023-05-12 20:14:18 +08:00   ❤️ 1
很棒啊☆
在下多年前也做了一个语言实现,只不过是 Scheme 的: https://github.com/bd4sur/Animach
自举、完备、性能、生态、生产力、自己用,实现一门程序语言不容易。
加油☆
x500
    96
x500  
   2023-05-12 20:41:43 +08:00
已 starred
Mooon
    97
Mooon  
   2023-05-12 21:18:08 +08:00
后排合影
w3cll
    98
w3cll  
   2023-05-12 22:46:45 +08:00
火钳刘明
UKnowMe
    99
UKnowMe  
   2023-05-12 22:53:46 +08:00
支持 OP 太帅了
balabalaguguji
    100
balabalaguguji  
   2023-05-12 22:54:54 +08:00
佩服,大佬
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3182 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 26ms · UTC 12:20 · PVG 20:20 · LAX 04:20 · JFK 07:20
Developed with CodeLauncher
♥ Do have faith in what you're doing.