- Create GitHub repo
- Create GitHub organization
- Move repo to the organization
- Add an icon to the organization
- Avatar from https://www.flickr.com/photos/jsjgeology/16310656713
- CC BY 2.0 licensed.
- Avatar from https://www.flickr.com/photos/jsjgeology/16310656713
- Buy domain
- Add a license
- Write a basic README
- Add a TODO list
- Keep a change log
- Add a code of conduct
- Set up GitHub pages
- Point domain at GitHub pages
- Write first specification
- Automate testing of specifications
- Allow testing of more than 1 result per code block
- Show progress
- Allow debugging
- Add some colorization
- Other testing
- Unit tests
- Property-based tests
- Testing optimizations (compare with unoptimized version)
- Code coverage
- Benchmarking (for hotspot location)
- Add design docs
- Start on parser and grammar
- Look into various choices for parsing
- Handle syntax errors gracefully
- Handle specific issues users will likely encounter
- No space around operators
- Using
=
instead of:=
or==
- Handle specific issues users will likely encounter
- Run checks before commits
- Make sure all specs are passing
- RuboCop
- Bundler audit (for vulnerable gem versions)
- Code smell analyzer - RubyCritic
- Compile to LLVM
- REPL
- Multi-line statements
- Jupyter kernel
- Static type tracking/checking
- Complex types
- Self-hosting compiler (this one is WAY off)
- Docs via
--help
- Manual page
- Literals
- Integers
- Text strings
- Decimal floating-point numbers
- Rationals
- Null
- Booleans
- Functions
- Anonymous functions (lambda)
- Applying an anonymous function
- Function definition
- with formal parameters on left-hand side of
:=
- with formal parameters on left-hand side of
- Function call
- Arity checking
- Closures
- Downward funarg problem
- Upward funarg problem
- Recursion
- Tail call optimization (TCO)
- First-class functions
- Varargs
- Default arguments
- Named arguments
- Properties
- arity
- signature
- Anonymous functions (lambda)
- Expressions
- Parenthetical expressions
- Arithmetic operators
- Addition
- Subtraction
- Multiplication
- Multiple operands
- Mixing operators (gives an error in most cases)
- Allowed mixed operators
- Comparison/equality (lower precedence) and anything else
-
+
and-
-
*
and/
-
<
and<=
-
>
and>=
- Allowed mixed operators
- Division
- Comparison
- Minimum/maximum (
<!
and>!
) - Mixed numeric types
- Equality operators
- Boolean operators
- Not
- Repeated Not (
!!value
)
- Repeated Not (
- And/or (non-short-circuiting)
- Comparison
- Not
- Text operators
- Comparison
- Concatenation
- Function application operators
- Function composition operators
- Exceptions
- Comments
- Per-line
- Bracketed
- Nested (would be nice to have)
- Control logic
- Conditionals - if/unless
- Short-circuit and/or
- While/until
- Variables
- Assignment
- Referencing
- References to enclosing scopes
- Classes
- Class definition
- Class instantiation
- Property definition
- Property access
- Computed property definition
- Computed property access
- Class method definition
- Class method call
- Arity checking
- Method definition
- Method call
- Arity checking
- Constructor
- Destructor
- Sequences
- Range
- Basics (empty?, includes?, length)
- Iteration (map/each/fold/foldl)
- Reducing (reduce/inject)
- Filtering (filter/select, reject, ...)
- Misc (uniq, all?, any? ...)
- Collections
- Pair
- List
- Creation
- Basics (empty?, includes?, size/length)
- Access (first/head, rest/tail, last)
- Iteration (map/each)
- Reduction (reduce/inject/fold/foldl, foldr)
- Re-ordering (reversed, sorted)
- Misc (slice, split, join, ...)
- Map
- Creation
- Basics (empty?, has_key?, size/length)
- Access (get)
- Iteration (map/each)
- Reduction (reduce/inject/fold/foldl, foldr)
- Types
- Annotations
- Type inference
- Ensure
if
returns same type for all paths - Refinement types
- Dependent types?
- Substructural (linear, affine, ordered, unique) types?
- I/O
- STDOUT
- STDIN
- Files
- Get random number
- Get date/time
- Purpose
- Goals
- Features
- Parsing