Skip to content
Mike Lam edited this page Feb 1, 2019 · 1 revision

This page was used to track progress during the 2017-2018 academic year while the primary author (Zamua Nasrawt) completed his honors thesis work. It is no longer maintained. Please see the official repo and the issue list for current information.

DONE:

  • writing
    • first draft (3/13)
    • draft to committee (3/20)
    • comments from committee (3/27)
    • final draft (4/3) (formatting guidelines)
    • due (4/10)
  • feature: OOP
    • short example code (1/23)
    • correct parsing (2/13)
    • re-read EAC on objects (3/13)
    • class definitions, member attributes, and instances (3/13)
    • member methods and constructors (3/13)
    • "this" references and inheritance (3/13)
  • feature: list '[]' (ArrayList) (1/30)
    • list : () -> 'a list
    • add/push/enqueue : 'a list -> 'a -> ()
    • remove : 'a list -> 'a -> 'a
    • pop/dequeue : 'a list -> 'a
    • insert : 'a list -> int -> 'a -> ()
    • removeAt: 'a list -> int -> ()
    • get : 'a list -> int -> 'a
    • set : 'a list -> int -> 'a -> ()
    • size : 'a list -> int
  • feature: set '{}' (HashSet): add/remove/contains, (union/intersection/difference?), size (1/30)
    • set : () -> 'a set
  • feature: map '<>' (HashMap): put/get/remove, getKeys/containsKey, size (1/30)
    • map : () -> ('a,'b) map
    • getKeys : ('a,'b) map -> 'a set
  • fix negative numbers/unary operators (unop.lj example) (1/30)
  • writing
    • create Overleaf document and add Lam (1/23)
    • write outline (1/30)
  • major language feature: no procedural code at global scope (1/23)
    • add 'global' variables initialized to constants
    • fix variable scoping issue
  • fix: floating point equality should be exact (1/23)
  • major language feature: no procedural code at global scope
    • enforce existence of main (1/16)
  • feature: native data types (1/9)
    • int (Integer)
    • bool (Boolean)
    • real (Double)
    • string (String)
  • design: collections (12/12)
  • ready for competitive programming session (12/8)
    • quick-and-easy deployment
    • problems
      • hello world
      • find largest number
      • oddgnome
      • 3n+1
  • fix function-local variable declarations (12/5)
  • major feature: debug type inference
    • fix non-halting problem (11/28)
    • instantiate universal types at function calls (11/28)
  • feature: scanner-based input (11/28)
  • refactoring: Program -> ( Func | Stmt | Test ) * (10/24)
  • major feature: unit tests (10/17)
    • test harness for compiled program output (10/17)
  • feature: vim highlighting! (10/10)
  • major feature: universal type inference (10/10)
  • parser: let function names contain digits (9/26)
  • parser: add comments (9/26)
    • add type annotations to all type-inference.lj functions (9/26)
  • parser: fix operator precedence (9/19)
  • codegen: print to stdout (9/19)

OFFICIAL FUTURE WORK:

  • major feature: OOP
    • passing objects as parameters (fix type inference issues) #18
  • all: testsuite (3/27)
    • external testing framework for invalid programs, crashes, hangs, regressions #19
    • internal testing framework for language correctness #19
    • reformat output from JUnit (will be fixed by #12)
  • documentation for future students #20
  • future work: reimplement Decaf static analysis #11
    • duplicate symbols
    • return/break locations
    • expression types
    • function parameters
    • report line numbers
    • type unification failures
  • future work: runtime exception handler #21
  • future work: add inferred type output flag #22
  • future work: easy installation and one-command build system #23
Clone this wiki locally