Release Notes
The versioning of nature follows Semantic Versioning. Versions 0.1 ~ 1.0 consist of two parts:
The upper half always carries a beta tag, indicating it's not ready for production use.
The lower half has a stable and backward-compatible syntax API. At this point, nature can be used for individual independent/open-source projects, but no LTS version is provided.
When version 1.0 is released, nature will officially be used for open-source/commercial projects and will have an LTS version.
Version | Content | Estimated Release Time |
---|---|---|
v0.1.0-beta | Basic Syntax Release | 2023-05 |
v0.2.0-beta | Type System/Basic Syntax | 2023-07 |
v0.3.0-beta | Package Management/Syntax | 2023-09 |
v0.4.0-beta | Basic Standard Library | 2023-11 |
v0.5.0-beta | Small Test Cases/Bug Fixes | 2024-02 |
v0.6.0-beta | LSP Development/Editor Support | 2024-04 |
v0.7.0 | Medium Test Cases/Stable API | 2024-07 |
v0.8.0+ | Preparations for Official Release | 2024-09 |
v1.0.0 | Official Release | 2025- |
Core features that are still in planning will be gradually integrated into subsequent versions.
- Integration and optimization of key syntax like switch/try
- wasm architecture compilation
- Coroutine feature support
- Compilation for darwin systems
- Function label feature support
- Progressive GC improvements
- Compilation for riscv architecture
- Compilation for windows systems
Changelog
Release history: https://github.com/nature-lang/nature/releases
Version: v0.4.0-beta
Release: 2023-09
Features
- Compile-time error optimization, displaying filename and line number, type errors show original type identifiers
- Runtime error provides stack trace
- Multi-line comments
/****/
support - Import supports prefix-less import
import utils as *
- Small test cases parker
- Parameter destructuring support, example
call(...vec)
- Generic type supports recursion
type numbert = gen intergert|flotert
- Binary operators
||
&&
support - Package management import dir support, will automatically find dir's main.n
- Package management import xxx_temp support, can define temp files to interact with static libraries
- nature struct adjusted to be isomorphic with C, can directly pass nature struct to C language
- Data type
arr<T,len>
support, allocated on the stack, isomorphic to C'sT ident[len]
- New syntax support, nature struct defaults to stack allocation, can get a heap-allocated p through
ptr<person> p = new person
- Type constraints after as, like
var s = {} as {u8}
, declares a set type constrained to{u8}
, equivalent to{u8} s = {}
- Package management supports declaring links for static library linking and temps for template declaration
- New standard library for strings
import strings
- To better interact with C, new types
cptr
andcptr<T>
added - Added built-in syntax keyword sizeof to calculate type size, usage example
int s = sizeof(person)
- New standard libraries fmt/os/path/strings/time
- New template files (for interacting with C) builtin_temp (default import), dirent_temp, libc_temp, strings_temp, syscall_temp
Adjustments
- Type param can only be defined globally
- Global variables support type inference
- Removed set function, declare an empty set through as constraint
- List type definition adjusted to vec, supports declaring vec with original struct and specifying length, example
var terms = vec<u8>{len=12,cap=24}
- String type adjusted to be isomorphic with vec, supports accessing and assigning through
str[0]
, and supports for-in iteration - Vec type method list.len() adjusted to type attribute, list.len, and supports type methods like slice/concat
- For loop expression errors and break and continue redeclaration errors
- Generic type i = gen int|int64 basic types consistent when repeatedly generated
- Register allocation interval_add_range adds range error
- set.contains() calculates hash slot error
- Defining fn in struct exception
- Linker elf rela addend calculation exception, addend = next_inst_offset - current_inst_rel offset
- ssa rename exception, some linear var def not renamed
- If multi-line expression parser parsing exception
- Automatic GC trigger time exception, adjusted GC trigger point to user mode
- malloc allocates repeated memory areas, causing GC exception due to not clearing the area, malloc actively clears the allocated area
- Import priority exception, local ident can override import ident
- Fixed gcc11 global variable redefinition error #16