~tim/scheme-vm

ee0229cba6922c74e8f0ccb155a94815357bec18 — Tim Morgan 5 years ago f70385d
Remove todo list in favor of GH issue
2 files changed, 1 insertions(+), 146 deletions(-)

M README.md
D todo.md
M README.md => README.md +1 -1
@@ 4,6 4,6 @@

a R7RS scheme implementation in Ruby for my own amusement

See [todo.md](https://github.com/seven1m/scheme-vm/blob/master/todo.md) lest you think it's usable.
[the todo list](https://github.com/seven1m/scheme-vm/issues/12)

Licensed MIT.

D todo.md => todo.md +0 -145
@@ 1,145 0,0 @@
# TODO

- [x] GC
- [x] show proper error when source is another file
- [x] optimize `JUMP` to `RETURN` if jump lands on a return (fixes TCE in some cases)
- [x] proper closures

## Missing things from R7RS:

- [x] `|pipe delimited identifiers|` (pp 7)
- [ ] case folding directives (pp 8)
- [x] block comments `#| ... |#` (pp 8)
- [x] `#;` comments (pp 8)
- [x] pairs separated with `.` (pp 8)
- [ ] datum labels `#<n>=` and `#<n>#` (pp 9)
- [ ] `eof-object?` (pp 10)
- [x] proper tail recursion (pp 11)
- [x] `set!` (pp 14, 26)
- [x] `include` takes multiple file paths (pp 14)
- [x] `include` allows relative and absolute paths (pp 14)
- [ ] `include-ci` (pp 14)
- [x] `cond` (pp 14)
- [x] `case` (pp 14)
- [x] `when` (pp 15)
- [x] `unless` (pp 15)
- [ ] `cond-expand` (pp 15)
- [x] `let*`, `letrec*` (pp 16)
- [ ] `let-values`, `let*-values` (pp 16)
- [x] `do` (pp 18)
- [ ] `delay`, `delay-force`, `force` (pp 18)
- [ ] `promise?`, `make-promise` (pp 19)
- [ ] dynamic bindings, `make-parameter` (pp 19), `parameterize` (pp 20)
- [ ] exception handling, `guard` (pp 20)
- [ ] `case-lambda` (pp 21)
- [x] `let-syntax`, `letrec-syntax` (pp 22)
- [x] hygienic macro bindings (pp 22)
- [ ] referentially transparent macro bindings (pp 22)
- [x] literals in `syntax-rules` (pp 23)
- [ ] underscore matches anything in `syntax-rules` and other matching semantics (pp 23)
- [ ] syntax errors in macro expansion (pp 24)
- [x] `import` (pp 25)
- [x] `define` with body (pp 25)
- [x] internal definitions (pp 26)
- [ ] `define-values` (pp 26)
- [x] internal syntax definition, e.g. `define-syntax` is local to the scope (pp 26)
- [ ] `define-record-type` (pp 27)
- [ ] `define-library` (pp 28)
      - [x] `export`
      - [x] `begin`
      - [ ] `import`
      - [ ] `include`
      - [ ] `include-ci`
      - [ ] `include-library-declarations`
      - [ ] `cond-expand`
- [ ] repl (pp 29)
- [x] `eqv?` semantics (pp 30)
- [x] `equal?` semantics (pp 32)
- [x] `number?` (pp 32)
- [x] `integer?` (pp 32)
- [ ] complex, real, and rational numbers, and other predicates:
      `complex?`, `real?`, `rational?` (pp 32)
- [ ] numerical constant syntax, `#b`, `#o`, `#d`, `#x` (pp 34)
- [ ] exact and inexact prefixes, `#e` and `#i` (pp 34)
- [ ] `exact?`, `exact-integer?`, `inexact?` (pp 35)
- [ ] `finite?`, `infinite?` (pp 35)
- [ ] `nan?` (pp 36)
- [x] `positive?`, `negative?`, `zero?` (pp 36)
- [ ] `odd?`, `even?` (pp 36)
- [ ] `max`, `min` (pp 36)
- [ ] `abs` (pp 36)
- [ ] `floor/`, `floor-quotient`, `floor-remainder`,
      `truncate/`, `truncate-quotient`, `truncate-remainder` (pp 36)
- [ ] `quotient`, `remainder`, `modulo` (pp 37)
- [ ] `gcd`, `lcm` (pp 37)
- [ ] `numerator`, `denominator` (pp 37)
- [ ] `floor`, `ceiling`, `truncate`, `round` (pp 37)
- [ ] `rationalize` (pp 37)
- [ ] `exp`, `log`, `sin`, `cos`, `tan`, `asin`, `acos`, `atan` (pp 38)
- [ ] `square`, `sqrt`, `exact-integer-sqrt`, `expt` (pp 38)
- [ ] `make-rectanguler`, `make-polar`, `real-part`, `imag-part`, `magnitude`, `angle` (pp 39)
- [ ] `inexact`, `exact` (pp 39)
- [ ] `number->string` (pp 39)
- [ ] `string->number` (pp 40)
- [ ] `boolean=?` (pp 40)
- [x] `set-car!` (pp 41)
- [x] `set-cdr!` (pp 42)
- [ ] `caar`, `cadr`, `cdar`, `cddr`, `caaar`, `caadr` ... `cdddar`, `cddddr` (pp 42)
- [x] `list?` (pp 42)
- [ ] `make-list` (pp 42)
- [ ] `reverse` (pp 42)
- [ ] `list-tail`, `list-ref` (pp 42)
- [ ] `list-set!` (pp 43)
- [x] `memq`, `memv` (pp 43)
- [ ] `member` (pp 43)
- [ ] `assq`, `assv`, `assoc` (pp 43)
- [ ] `list-copy` (pp 43)
- [ ] symbols (pp 43)
- [ ] `symbol?`, `symbol=?` (pp 44)
- [ ] `symbol->string`, `string->symbol` (pp 44)
- [ ] characters (pp 44)
- [ ] `char?`, `char=?`, `char<?`, `char>?`, `char<=?`, `char>=?` (pp 44)
- [ ] `char-ci=?`, `char-ci<?`, `char-ci>?`, `char-ci<=?`, `char-ci>=?` (pp 45)
- [ ] `char-alphabetic?`, `char-numeric?`, `char-whitespace?`, `char-upper-case?`, `char-lower-case?` (pp 45)
- [ ] `digit-value` (pp 45)
- [ ] `char->integer`, `integer->char` (pp 45)
- [ ] `char-upcase`, `char-downcase`, `char-foldcase` (pp 45)
- [x] `string?` (pp 46)
- [ ] `make-string`, `string` (pp 46)
- [ ] `string-set!` (pp 46)
- [ ] `string=?`, `string-ci=?` (pp 46)
- [ ] `string<?`, `string>?`, `string<=?`, `string>=?` (pp 47)
- [ ] `string-upcase`, `string-downcase`, `string-foldcase` (pp 47)
- [ ] `substring` (pp 47)
- [ ] `string-append` (pp 47)
- [ ] `string->list` (pp 47)
- [ ] `string-copy`, `string-copy!` (pp 47)
- [ ] `string-fill!` (pp 48)
- [ ] vectors (pp 48-49)
- [ ] bytevectors (pp 49-50)
- [ ] `procedure?` (pp 50)
- [ ] `map` (pp 51)
- [ ] `string-map` (pp 51)
- [ ] `vector-map` (pp 51)
- [ ] `for-each` (pp 51)
- [ ] `string-for-each` (pp 52)
- [ ] `vector-for-each` (pp 52)
- [ ] `call-with-current-continuation`, `call/cc`, et al (pp 52-53)
- [ ] exceptions (pp 54-55)
- [ ] environments (pp 55)
- [ ] ports (pp 55-57)
- [ ] input (pp 57-59)
- [ ] output (pp 68-69)
- [ ] `load` (pp 59)
- [ ] `file-exists?`, `delete-file`, `command-line` (pp 60)
- [x] `exit` (pp 60)
- [ ] `emergency-exit` (pp 60)
- [ ] `get-environment-variable`, `get-environment-variables` (pp 60)
- [ ] `current-second`, `current-jiffy`, `jiffies-per-second` (pp 60)
- [ ] `features` (pp 61, 77)
      - [ ] `r7rs`
      - [ ] `exact-closed`
      - [ ] `ieee-float`
      - [ ] `full-unicode`
      - [ ] implementation name
      - [ ] implementation name + version