快速开始

简介

nature 是通用开源编程语言与编译器,期望为开发者提供简洁优雅的开发体验,能够简单高效构建出安全可靠的跨平台软件。

特性

  • ✓ 简洁、自然、一致性的语法设计,即使编程初学者也能够轻松掌握,快速上手
  • ✓ 不依赖 llvm 和虚拟机,直接编译为目标平台机器码,并支持交叉编译
  • ✓ 部署简单,基于 musl libc 进行纯静态链接,无额外依赖,具备良好的跨平台特性
  • ✓ 完善的类型系统,支持泛型、联合类型、接口、空值安全等
  • ✓ 和 go 一样的高性能 GC 实现,具有非常短暂的 STW (Stop The World)
  • ✓ 和 go 一样的高性能内存分配器实现,类似 google/tcmalloc
  • ✓ 高性能共享栈协程实现,每秒能够进行数百万次的协程切换
  • ✓ 内置 libuv 与协程协作处理 IO 事件循环
  • ✓ 基于纯 C 实现的高性能 runtime 和编译器
  • ✓ 模块化与包管理系统 npkg
  • ✓ 内置常用数据结构和简洁的标准库 API 实现
  • ✓ 使用 try+catch 进行错误处理,match 进行模式匹配、channel 进行协程通信、select 进行并发处理
  • ✓ 遵循系统 ABI,内置 c 语言标准库,可以直接调用 C 语言标准库函数加速代码开发
  • ✓ 编辑器 lsp 支持
  • ○ 高性能内存管理方式协助自动 GC
  • ○ 测试 DSL,希望能够高效稳定利用 AI 编码
  • ○ macho 跨平台连接器(目前缺少 macho 链接器导致 darwin 平台无法进行交叉编译)
  • ○ 协作式调度系统完善
  • ○ 跨平台编译支持 wasm、risc64 平台
  • ○ 编译为可读的 go 编程语言

项目概况

nature 编程语言已经达到早期可用版本,语法 API 基本稳定,在 1.0 版本之前不会有大幅的变化。

当前版本 nature 源码支持编译的目标平台有

  • linux/amd64
  • linux/arm64
  • darwin/amd64
  • darwin/arm64

nature 包含一组测试用例及标准库用来测试基本功能和语法的可用性,包含一组小型项目测试整体可用性,还未经过中大型的项目测试。

后续的核心工作是提升 nature 编程语言的可用性,包括标准库完善、性能优化、收集用户反馈以及 bug 修复。

设计理念

go 是我日常工作使用的编程语言,其语法简单,非常方便的进行交叉编译以及部署,拥有非常优秀且高性能的 runtime 实现,拥有先进的并发设计风格。但也有一些不方便的地方

  • 语法过于简洁导致表达能力不足
  • 类型系统不够完善
  • 错误处理机制繁琐
  • 自动 GC 和抢占式调度的设计虽然非常优秀,但是也让 go 的应用范围受限。
  • 包管理方式
  • interface
  • ...

nature 在设计理念上是对 go 编程语言的延续与改进,并追寻一定的差异性。在改善上述问题的同时,nature 拥有和 go 类似的 runtime、GMP 模型、allocator、collector、coroutine、channel、std 等。并且 nature 同样不依赖 llvm,以及高效的编译速度,方便的交叉编译与部署等。

基于 nature 编程语言的现有特性,其适用于游戏引擎和游戏开发、科学计算和 AI、操作系统和物联网、命令行、以及 Web 开发等领域。

使用建议

作为早期的编程语言,目前适合以下类型的开发人员

  • 技术探索者 —— 愿意尝试新事物,并能够承受早期版本存在的各种 bug、有兴趣参与语言设计和改进的讨论
  • 语言开发者和研究者—— 对编程语言设计和实现感兴趣的开发者、学习编译原理、学习如何实现一门编程语言
  • 反馈贡献者 —— 愿意提供使用反馈的开发者、能够提交 bug 报告和改进建议、有兴趣参与项目建设及标准库完善

不适用于以下类型的开发人员

  • 需要在生产环境使用的企业用户
  • 对稳定性要求较高的项目开发者
  • 想要寻找一份编程相关工作的初学者
  • 需要大量第三方库支持的开发者

安装

1️⃣ 在 https://github.com/nature-lang/nature/releases 下载适用于您系统的二进制压缩包并解压。

2️⃣ 将 nature 文件夹移动到 /usr/local 目录下。如果需要将 nature 安装在其他目录,请手动设置 NATURE_ROOT 环境变量指向 nature 所在目录

/usr/local/nature/
├── LICENSE-APACHE
├── LICENSE-MIT
├── VERSION
├── bin
├── lib
└── std

3️⃣ 将 /usr/local/nature/bin 目录加入到系统环境变量中,例如 cat ~/.zshrc

...
export PATH="/usr/local/nature/bin:$PATH"
...

4️⃣ 运行命令 nature --version 查看当前版本

> nature --version
nature v0.5.0-beta - release build 2025-02-22

5️⃣ 运行命令 nature -h 查看帮助

> nature -h
Nature Programming Language Compiler vx.x.x

Usage:
  nature [command] [flags] [arguments]
...

Hello Nature

创建 main.n 文件

import fmt  
  
fn main() {  
    fmt.printf('hello nature')
}  

编译并运行编二进制文件 main

> nature build main.n && ./main
hello nature

指定编译目标平台与架构

> nature build --target darwin_amd64 main.n

指定输出二进制文件名称为 hello

> nature build -o hello main.n

示例项目

parker 轻量打包工具

llama.n Llama2 nature 语言实现

tetris 基于 raylib 实现的俄罗斯方块,仅支持 macos

playground playground server api 实现

编辑器支持

lsp server nls 已经和 nature 安装包一起安装在 /usr/local/nature/bin 目录中,

ls -lh /usr/local/nature/bin
total 44696
-rwxr-xr-x@ 1 root  wheel   764K Feb 24 13:18 nature
-rwxr-xr-x@ 1 root  wheel   6.1M Feb 24 13:20 nls
-rwxr-xr-x@ 1 root  wheel    15M Feb 24 13:20 npkg

在 vscode 扩展商店搜索 nature language 下载 lsp 客户端后即可使用

深入学习

语法文档 - 完整语法说明文档

标准库文档 - 标准库 API 参考

贡献指南 - 包含 nature 编程语言的设计与实现,以及如何参与贡献