Skip to content

Latest commit

 

History

History
183 lines (176 loc) · 5.22 KB

TODO.md

File metadata and controls

183 lines (176 loc) · 5.22 KB

TODO

  • Create GitHub repo
  • Create GitHub organization
  • 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 ==
  • 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

Specifications

  • 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 :=
    • 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
  • 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 >=
      • Division
      • Comparison
      • Minimum/maximum (<! and >!)
      • Mixed numeric types
    • Equality operators
    • Boolean operators
      • Not
        • Repeated Not (!!value)
      • And/or (non-short-circuiting)
      • Comparison
    • 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

Design Docs

  • Purpose
  • Goals
  • Features
  • Parsing