skx / yal

Yet another lisp interpreter

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Make a new release

skx opened this issue · comments

There have been a whole bunch of changes, albeit at reduced speed, so time for a release.

I could look at other lisps forever, so I will continue doing that in the background and leave #115 open for a while longer.

  • Updated the LSP support to only calculate possible completions once.
    • Since we only complete on the standard library this can't change.
    • Reported in #111, resolved in #112.
  • Updated our CI process to run the lisp-specific test-cases on PRs
    • Implemented in #113
  • Added string<, string=, and similar methods.
    • Implemented in #116.
  • Added flexible sort-by method
    • Also implemented in #116.
  • Implemented cos, sin, and tan, as well as variants along with pi.
    • Implemented in #117.
  • Added extra argument testing to (random) and (base)
    • With test-cases and fuzz-testing for more fixes.
    • Implemented in #118.
  • Fixed crashes with empty special forms, e.g. "(print (do))" and (print (let*())).
    • Fuzzing now looks good, though of course it is impossible to say:
      • fuzz: elapsed: 19h4m10s, execs: 5319853 (303/sec), new interesting: 492 (total: 4095)
      • fuzz: elapsed: 19h4m12s, execs: 5319918 (40/sec), new interesting: 492 (total: 4095)
  • Allow loading a file with "(require 'foo)"
    • This will load foo.yal, and return nil if that file is not present.
    • Reported in #114, and implemented in #119.
  • Added stack:push, stack:pop, etc.
    • Implemented in #120.
  • Added a config-package, holding helpers for STDIN/STDOUT.
    • These are used by (read) and (print)
    • Implemented in #123, after a broken attempt in #121.
    • Added STDERR and a -debug flag in #125.
  • Added (version).
    • Reported in #122, implemented in #124.
  • Added hash/digest functions in #126
    • (md5), (sha1), and (sha256).
  • Hashes are converted to strings with their keys sorted.
    • Implemented in #127
    • This allows the following code to return "true", as expected:
      • (eq { :name "Steve" :surname "Kemp" } { :surname "Kemp" :name "Steve" })