Development of the Cone language and compiler is ongoing. Neither are even half-way towards a minimally-viable product.
Please realize that the features described on this largely-personal web site are sometimes aspirational in nature: depicting the language as it is envisioned to be. The text accurately describes working features, but it also sketches out features that have not yet been implemented.
The evolving compiler is always left in a working state. Using the LLVM library, it is able to generate minimal, optimized executables for Windows, Linux, OSX and WebAssembly.
The Cone compiler currently supports these basic capabilities:
- Callable functions that use variables, numeric expressions, and simple control structures such as 'if' and 'while', as demonstrated by this code which calculates the value for pi. This includes support for multiple return values and parallel assignment.
- struct types, composed of fields and methods, including operator overloading (see this example).
- Fixed-size arrays and slices (see this example).
- Reference and pointer types, which includes basic support for single-owner, ref-counted and borrowed references. This includes support for nullable and function references, static permissions, move semantics, and raw pointers (including pointer arithmetic).
- Module & Type namespaces.
Development work is currently focused on these areas:
- Extending arrays:dynamically-allocated, struct-based collections, and builder blocks.
- Interfaces, closures, iterators, and 'each' blocks.
- Variant types and pattern matching.
- Constructors, finalizers and "set" methods
Over a longer term, development will focus on:
- Concurrency: threads, channels, runtime permissions
- Generics, traits and metaprogramming
- Adding strict safety checks to a program's use of references.
- Error handling
- Tracing GC, Arenas, Pools