This describes stages of development for the project. The main idea is to make development iterative and get a something functional very soon and then just add features one by one when I'm in the right mood. Given that I have little time for the project, it's essential that I don't embark on something that will require considerable efforts before it becomes useful.
Basic feature set, only tiny subset of language is implemented, but all components and documentation are in place.
- Configuration language features:
- String literals in simplest form, no antiquotation, no multiline syntax, no special handling of URIs
- Numeric literals: integers and floats
- Set literal, but no attribute selection or
or
operator, no support for recursive sets.
- Implement all functionality around the selected feature set.
- Tests.
- Proper readme explaining wtf.
- Documentation of language itself
LANG.md
file.
- Add URIs.
- Add Booleans.
- Add
null
value.
- Add paths, all features except for
<nixpkgs>
syntax (which may be totally inapplicable for this library). - List literal.
- Comments: sinlgle-line and multi-line.
- Antiquotataion in strings but still no multiline strings.
let
expressions.
- Recursive sets with detection of infinite recursion.
- Inheriting attributes in sets.
if
expressions.
- Assertions.
with
expressions.
- Implement all operators, their evaluation, etc.
- Functions (lambda abstraction) disallowing recursive invocations though.
- Some built-in functions, not necessarily the same functions that Nix has though. Determine when we get to this.
- Minor corrections, etc.
- Add parser benchmarks.
- Announce.