Roadmap
Fennec is in early design. The plan is to start with a small, solid core, then add each feature when real programs need it.
Now: the interpreter runs most of the language
fennec run,fennec test(including property tests that shrink failures) andfennec repl.- Names and
mut, functions with inferred returns, nested functions, arrow functions. - Structs with defaults, methods, named constructors and
whererules; enums andmatch; operators withdef +anddef []. - Errors with
error,fail,?,else,matchandfrom; optional values withNone,?.andelse. - Lists, dicts, sets, tuples, comprehensions, slices, generators,
with,IdMapandVec3. - Values without references: copies are independent, and changes happen in place without copying when nothing else shares the value.
- Every example in the repository’s
examples/folder is a test, including the error messages.
v0.1: checked before it runs
The next milestone moves Fennec’s checks from runtime to compile time.
- The type checker: inferred types, exhaustive
match, and errors andNonethat can’t be ignored. - The formatter and the language’s lints.
- The intermediate representation, designed for native code from the start.
- The interpreter.
- Names and
mut,defwith inferred return types, structs with defaults, named constructors andwhere,enumandmatch. - Errors with
error,fail,?,else,matchandfrom, and optional types withNoneand?.. - Implicit interfaces and generics.
- Values without references: automatic moves, sharing until changed, and the check that
mutaccess is exclusive. list,dict,set,tuple, comprehensions, generators and the builtins.withandtestblocks.
v0.2: native speed
- The fast compiler for development builds, compiling each function on its first call.
- The optimizing compiler for release builds.
- The shared build cache.
- The benchmark suite and the performance check on every change.
- Standard library core:
fs,path,json,toml,time,random,re,collections.
v0.3: games
noalloc, per-frame memory arenas, struct-of-arrays layout, SIMD and math types.- C interop with
extern,ptr[...],def delandunsafe. - A platform layer for windows, input, audio and graphics.
v0.4: concurrency and networking
- Waiting on I/O without
async: the runtime runs other work, and independent reads overlap automatically. parallel(...)loops, with the compiler suggesting where they’re safe and worthwhile.- Tasks scoped to a
withblock, locks and channels. http,net,tlsandsqlite.
Later
- Views into lists that avoid copies, as string slices already do.
- Contracts with automatic testing, and property tests for every type.
- Hot reload.
- Shared objects with their own identity, if real programs turn out to need them.
- A Fennec compiler written in Fennec.
Open questions
These are still being decided. Decisions already made, and why, are in the design decisions.
- How a function declares the errors it can fail with.
- How closures longer than one line should look, beyond nested functions.
- Whether independent writes, not just reads, should overlap automatically.
- The exact syntax for property tests.
- The file extension (currently
.fen).