Version 0.1 (2022-03-10)
First release! The main focus has been the design of the Nickel language itself.
Language features
- Gradual type system with row types, polymorphism and type inference
- Contract system for data validation
- Merge system for recursive records that supports one level of overriding
- Metadata annotations (default values, documentation, etc.)
- Unified syntax for terms, types and contracts (RFC002)
- Record destructuring
Tooling
-
The main binary supports the following subcommands:
nickel query
to show metadata and documentation of library functions,
the field of a configuration, etc.nickel export
to serialize to JSON, YAML, or TOMLnickel repl
to launch an REPLnickel typecheck
to do typechecking without evaluating
-
An LSP-server is included
Documentation
- User manual sections on syntax, correctness (types and contracts), and
merging - The standard library has been documented in-code (use
nickel query
/:query
to retrieve it)
Known limitations
-
The roadmap for overriding and the merge system (RFC001) has not been
implemented fully yet. -
Performance has not been prioritized.
-
Due to the use of reference counting as a memory management strategy,
mutually recursive record fields are currently leaking memory. This
shouldn't be an issue in a standard workflow. -
Standard library APIs and language features are subject to change. There
is no backward compatibility guarantees for this version. In general, this
release is meant for experimenting and getting user feedback, but isn't
intended to be used in production.