Skip to content

Releases: nature-lang/nature

v0.4.0-beta

26 Sep 01:02
ea64e4a
Compare
Choose a tag to compare

Features

  1. Compile-time error optimization, displaying filename and line number, type errors show original type identifiers
  2. Runtime error provides stack trace
  3. Multi-line comments /****/ support
  4. Import supports prefix-less import import utils as *
  5. Small test cases parker
  6. Parameter destructuring support, example call(...vec)
  7. Generic type supports recursion type numbert = gen intergert|flotert
  8. Binary operators || && support
  9. Package management import dir support, will automatically find dir's main.n
  10. Package management import xxx_temp support, can define temp files to interact with static libraries
  11. nature struct adjusted to be isomorphic with C, can directly pass nature struct to C language
  12. Data type arr<T,len> support, allocated on the stack, isomorphic to C's T ident[len]
  13. New syntax support, nature struct defaults to stack allocation, can get a heap-allocated p through ptr<person> p = new person
  14. Type constraints after as, like var s = {} as {u8}, declares a set type constrained to {u8}, equivalent to {u8} s = {}
  15. Package management supports declaring links for static library linking and temps for template declaration
  16. New standard library for strings import strings
  17. To better interact with C, new types cptr and cptr<T> added
  18. Added built-in syntax keyword sizeof to calculate type size, usage example int s = sizeof(person)
  19. New standard libraries fmt/os/path/strings/time
  20. New template files (for interacting with C) builtin_temp (default import), dirent_temp, libc_temp, strings_temp, syscall_temp

Adjustments

  1. Type param can only be defined globally
  2. Global variables support type inference
  3. Removed set function, declare an empty set through as constraint
  4. List type definition adjusted to vec, supports declaring vec with original struct and specifying length, example var terms = vec<u8>{len=12,cap=24}
  5. String type adjusted to be isomorphic with vec, supports accessing and assigning through str[0], and supports for-in iteration
  6. Vec type method list.len() adjusted to type attribute, list.len, and supports type methods like slice/concat
  7. For loop expression errors and break and continue redeclaration errors
  8. Generic type i = gen int|int64 basic types consistent when repeatedly generated
  9. Register allocation interval_add_range adds range error
  10. set.contains() calculates hash slot error
  11. Defining fn in struct exception
  12. Linker elf rela addend calculation exception, addend = next_inst_offset - current_inst_rel offset
  13. Ssa rename exception, some linear var def not renamed
  14. Ssa calc imm domer exception, recent domer cannot be itself
  15. If multi-line expression parser parsing exception
  16. Automatic GC trigger time exception, adjusted GC trigger point to user mode
  17. malloc allocates repeated memory areas, causing GC exception due to not clearing the area, malloc actively clears the allocated area
  18. Import priority exception, local ident can override import ident
  19. Fixed gcc11 global variable redefinition error #16
  20. Fixed Memory overflow

v0.3.0-beta

04 Aug 02:23
f90a2e3
Compare
Choose a tag to compare

Features

  1. Package management tool npkg #10
  2. Cross-platform compilation based on file names, such as main.linux.n
  3. Support for string symbol escaping, e.g., var str = 'hello\nworld'
  4. Support for coercing strings to [u8] and vice versa
  5. Support for concatenating characters using the + operator and logical comparison between strings
  6. Declaration of hexadecimal literal numbers, e.g., var i = 0x1A
  7. New standard library syscall for interacting with the operating system
  8. New standard library libc for interacting with C language
  9. Declaration of an empty list's type and length through type coercion, e.g., var list = [] as [u8,5]
  10. Maps and sets also support type declarations through empty value type coercion, e.g., var set = {} as {int}
  11. New built-in type cptr, equivalent to C language's void*, commonly used for interacting with C language/OS
  12. String and list types have a new chained method raw(), which directly accesses the raw data in the heap

Changed

  1. Changed for-loop iterator for lists from k to v, e.g., for v in list
  2. Errors generated by try no longer check for duplicate receiving variables
  3. Support for function return values of type void_expr()
  4. Fixed an issue with the assembler's jmp rel8 instruction

v0.2.0-beta

04 Jul 10:24
f6248fc
Compare
Choose a tag to compare

Features

  • Added support for continue and break syntax.
  • Added as for type assertion and type coercion.
  • Added is keyword for checking specific types in union and any types.
  • Added let keyword for type inference.
  • Added support for union types #12 .
  • Added support for type aliases with parameters #13 .
  • Added generic support for global functions #13 .
  • Added support for null type and null safety. Compound types are no longer allowed to be assigned null, and variables must be initialized with a value.
  • Added support for overload resolution based on parameter types for global functions.

Changed

  • Changed catch keyword to a shorter try keyword.
  • Variables must now be initialized upon declaration, and compound types are no longer allowed to be null.
  • Removed mandatory parentheses for if and for statements. For example, if true {}.
  • Changed double quotes to single quotes for characters.
  • Renamed list.length() and map.length() to len.
  • Renamed list.delete() and set.delete() to del.
  • Renamed set.contains() to has.
  • Fixed the issue where try syntax was not available in chained calls #11 .
  • Fixed the issue where type aliases didn't support the module.type format.
  • Temporarily disabled implicit type conversions, but literal assignments like i8 foo = 12 are still supported.

v0.1.0-beta

10 May 14:49
Compare
Choose a tag to compare

Features

  • Variable definition and assignment
  • Control flow statements
  • Functions and closures
  • Type system and custom types
  • Unary and binary operators
  • Support for struct structures
  • Built-in list/map/set/tuple data structures
  • Error handling Module management
  • Cross-compilation, currently supporting the linux/amd64 target platform
  • Memory allocation and automatic garbage collection
  • Static single assignment (SSA)
  • Reflection
  • Register allocation