Vasilij Schneidermann [Sat, 31 Oct 2020 12:54:34 +0000 (13:54 +0100)]
Merge pull request #532 from dubek/vhdl-fix-defmacro
vhdl: Fix defmacro! so it doesn't modify existing functions
Vasilij Schneidermann [Sat, 31 Oct 2020 12:53:37 +0000 (13:53 +0100)]
Merge pull request #535 from dubek/vimscript-fix-defmacro
vimscript: defmacro! doesn't modify existing functions
Vasilij Schneidermann [Sat, 31 Oct 2020 12:52:54 +0000 (13:52 +0100)]
Merge pull request #538 from dubek/ts-fixes
typescript: Upgrade to 4.0.3 + soft-failure fixes
Vasilij Schneidermann [Sat, 31 Oct 2020 12:52:21 +0000 (13:52 +0100)]
Merge pull request #537 from dubek/tcl-soft-fixes
tcl: Soft failure fixes
Dov Murik [Mon, 26 Oct 2020 18:32:48 +0000 (20:32 +0200)]
ts: defmacro! doesn't modify existing functions
Dov Murik [Mon, 26 Oct 2020 18:23:45 +0000 (20:23 +0200)]
ts: Fix (keyword) of keywords
Dov Murik [Mon, 26 Oct 2020 18:18:03 +0000 (20:18 +0200)]
ts: Upgrade to TypeScript 4.0.3
This required one code change in the name of the encoding passed to
`fs.readFileSync`.
Dov Murik [Wed, 30 Sep 2020 17:50:29 +0000 (20:50 +0300)]
tcl: defmacro! doesn't modify existing functions
Dov Murik [Wed, 30 Sep 2020 17:59:05 +0000 (20:59 +0300)]
tcl: Fix (keyword) of keywords
Dov Murik [Wed, 30 Sep 2020 17:28:12 +0000 (20:28 +0300)]
vhdl: defmacro! doesn't modify existing functions
Dov Murik [Wed, 30 Sep 2020 14:53:48 +0000 (17:53 +0300)]
vimscript: defmacro! doesn't modify existing functions
Vasilij Schneidermann [Wed, 9 Sep 2020 06:05:43 +0000 (08:05 +0200)]
Merge pull request #530 from mpritham/master
Fix typos in step 7 - quoting
Pritham Marupaka [Tue, 8 Sep 2020 23:27:45 +0000 (19:27 -0400)]
Fix 2 additional typos
Pritham Marupaka [Mon, 7 Sep 2020 19:14:29 +0000 (15:14 -0400)]
Fix typo in step 7.
Vasilij Schneidermann [Mon, 7 Sep 2020 09:37:25 +0000 (11:37 +0200)]
Merge pull request #529 from harryvederci/patch-2
Fix path to common lisp readme.
Harry Prins [Thu, 3 Sep 2020 18:44:13 +0000 (19:44 +0100)]
Fix path to common lisp readme.
Joel Martin [Tue, 11 Aug 2020 17:06:58 +0000 (12:06 -0500)]
Merge pull request #401 from asarhaddon/quasiquote
New soft tests, quasiquote algorithm described at #103 on some impls.
Nicolas Boulenguez [Tue, 21 Jul 2020 16:01:48 +0000 (18:01 +0200)]
Change quasiquote algorithm
- Add a `vec` built-in function in step7 so that `quasiquote` does not
require `apply` from step9.
- Introduce quasiquoteexpand special in order to help debugging step7.
This may also prepare newcomers to understand step8.
- Add soft tests.
- Do not quote numbers, strings and so on.
Should ideally have been in separate commits:
- elisp: simplify and fix (keyword :k)
- factor: fix copy/paste error in let*/step7, simplify eval-ast.
- guile: improve list/vector types
- haskell: revert evaluation during quasiquote
- logo, make: cosmetic issues
Nicolas Boulenguez [Tue, 21 Jul 2020 16:34:36 +0000 (18:34 +0200)]
ada.2: typo
Nicolas Boulenguez [Tue, 21 Jul 2020 15:57:41 +0000 (17:57 +0200)]
Fix (keyword :k) on erlang and fsharp
Nicolas Boulenguez [Sun, 5 Jul 2020 20:17:23 +0000 (22:17 +0200)]
Improve answer to exercises
The identity function is not used in the answers.
Sort list, prn, hash-map by increasing difficulty.
Fix indentation consistency in concat.
Avoid using the same identifier twice.
In do3, make explicit that acc is not used.
In _quasiquote_iter, call the tested quasiquote2 instead of the original quasiquote.
In the quoting section, add foldr_pairs to hide recursions.
The compose function is not used in the answers.
Joel Martin [Tue, 16 Jun 2020 19:24:41 +0000 (14:24 -0500)]
Add link to glisp project.
Self-bootstrapping graphic design tool on Lisp (a TypeScript mal
implementation)
Joel Martin [Mon, 15 Jun 2020 17:43:22 +0000 (12:43 -0500)]
Merge pull request #519 from dubek/fix-ruby-keyword
ruby: (keyword :abc) should just return same keyword
Joel Martin [Mon, 15 Jun 2020 17:28:33 +0000 (12:28 -0500)]
Merge pull request #518 from oilshell/dev/andy
impls/bash: Minor changes to make it run under OSH
Dov Murik [Sun, 14 Jun 2020 20:02:13 +0000 (23:02 +0300)]
ruby: (keyword :abc) should just return same keyword
Andy Chu [Sat, 13 Jun 2020 17:57:13 +0000 (10:57 -0700)]
impls/bash: Minor changes to make it run under OSH
OSH is a bash-compatible shell: https://www.oilshell.org/
reader.sh:
- Put the constant regex pattern in a string literal. This simplifies
it by removing mixed regex vs. shell quoting, and implicit
concatenation with $'\n'.
This is suggested by the bash manual:
https://www.gnu.org/software/bash/manual/bash.html#Conditional-Constructs
"Storing the regular expression in a shell variable is often a useful
way to avoid problems with quoting characters that are special to the
shell."
- Initialize __reader_tokens as an array, not a string.
https://www.oilshell.org/release/0.8.pre6/doc/known-differences.html#values-are-tagged-with-types-not-cells
env.sh:
Simplify quoting in 'eval' expressions. This quotes associative array keys,
which is required by OSH to avoid dynamic parsing.
https://www.oilshell.org/release/0.8.pre6/doc/known-differences.html#strings-vs-bare-words-in-array-indices
http://www.oilshell.org/blog/2016/10/20.html
core.sh:
Quote associative array keys. '<' and '>' are shell operators and OSH doesn't
have a special case when inside [].
----
With this change, OSH can run tests just like bash, e.g.:
$ osh impls/bash/stepA_mal.sh tests/step4_if_fn_do.mal
----
Test results are the same before and after this change:
$ NO_DOCKER=1 ./.travis_test.sh test bash
FAILURES:
SOFT FAILED TEST (line 295): (f (+ 1 1)) -> ['',true]:
Expected : '.*\ntrue'
Got : '(f (+ 1 1))\nfalse'
TEST RESULTS (for ../tests/stepA_mal.mal):
1: soft failing tests
0: failing tests
106: passing tests
107: total tests
Joel Martin [Wed, 3 Jun 2020 17:46:34 +0000 (12:46 -0500)]
Remove "conj" from step9_try image.
It was already removed from the gliffy source but the export hadn't
been updated.
Joel Martin [Tue, 11 Feb 2020 16:30:28 +0000 (10:30 -0600)]
runtest-old.py: remove unused backup version
Joel Martin [Mon, 1 Jun 2020 19:27:47 +0000 (14:27 -0500)]
Merge pull request #497 from alimpfard/xslt
XSLT impl
AnotherTest [Mon, 1 Jun 2020 17:30:24 +0000 (22:00 +0430)]
README: Add XSLT and bump up counters
AnotherTest [Sat, 30 May 2020 18:40:10 +0000 (23:10 +0430)]
XSLT: Use blocking reads instead of a polling thread
Joel Martin [Mon, 1 Jun 2020 16:11:48 +0000 (11:11 -0500)]
Merge pull request #515 from bjh21/bjh21-runtest-timeout
runtest: Treat test timeouts as fatal
Ben Harris [Mon, 1 Jun 2020 14:08:10 +0000 (15:08 +0100)]
runtest: Treat test timeouts as fatal
If a test times out, that means it hasn't returned a prompt within
reasonable time. Continuing to type at it is unlikely to be helpful,
since the lack of a prompt indicates that the subprocess has hung, so
subsequent tests are likely to time out as well.
This is particularly annoying in step 5, where the line that usually
times out, "(def! res2 (sum2 10000 0))" has its output ignored, so a
timeout is treated as success, meaning that runtest proceeds to the next
test, which of course also times out.
AnotherTest [Tue, 26 May 2020 21:48:52 +0000 (02:18 +0430)]
XSLT impl: Limit jvm memory to 2GB
AnotherTest [Sat, 23 May 2020 21:55:07 +0000 (02:25 +0430)]
Break some lines to make the code more readable
AnotherTest [Sat, 29 Feb 2020 19:21:07 +0000 (22:51 +0330)]
only print last result if in repl
AnotherTest [Sat, 29 Feb 2020 19:16:25 +0000 (22:46 +0330)]
no more infinite boot times!
move the repl inside XSLT itself, as a result, we'll exit the repl
after
100000000 iterations, but...that's probably enough for a lot
of things
AnotherTest [Sat, 29 Feb 2020 14:30:00 +0000 (18:00 +0330)]
attempt to speed execution up
by booting up multiple instancees of saxon, waiting for a signal
This doesn't really help much, since most of our tests are very small
however, it does lower the overall boot time (assuming travis can do
real concurrency)
AnotherTest [Sat, 29 Feb 2020 05:12:25 +0000 (08:42 +0330)]
...add default target back :facepalm:
I'm sorry, travis....
AnotherTest [Sat, 29 Feb 2020 04:24:22 +0000 (07:54 +0330)]
makefile tweak to avoid failure~
AnotherTest [Sat, 29 Feb 2020 04:22:24 +0000 (07:52 +0330)]
eliminate unnecessary env serialisations
gains about 40% performance (on average?)
AnotherTest [Sat, 29 Feb 2020 03:15:29 +0000 (06:45 +0330)]
format all xslt files
AnotherTest [Fri, 28 Feb 2020 23:31:19 +0000 (03:01 +0330)]
remove irrelevant comment
AnotherTest [Fri, 28 Feb 2020 23:27:39 +0000 (02:57 +0330)]
we can now self-host :tada:
AnotherTest [Thu, 27 Feb 2020 19:39:43 +0000 (23:09 +0330)]
try to avoid spammy "No such file or directory" errors
it doesn't happen on my machine, not sure why it does that
AnotherTest [Thu, 27 Feb 2020 17:24:57 +0000 (20:54 +0330)]
we can now self-host...almost
Atoms still need some ironing out, something is not updating them
properly
Also unknown is an issue where `def!` is not updating the env, probably
related to the above problem
AnotherTest [Thu, 27 Feb 2020 03:32:54 +0000 (07:02 +0330)]
apply @kanaka's patch to Dockerfile
AnotherTest [Tue, 25 Feb 2020 20:18:59 +0000 (23:48 +0330)]
add xslt to build matrix :facepalm:
Joel Martin [Sat, 30 May 2020 01:53:22 +0000 (20:53 -0500)]
Merge pull request #514 from alimpfard/jq-fix
Jq: Fix our share of #513
AnotherTest [Sat, 30 May 2020 01:27:37 +0000 (05:57 +0430)]
Jq: Fix our share of #513
Joel Martin [Fri, 29 May 2020 18:34:30 +0000 (13:34 -0500)]
Merge pull request #512 from bjh21/bjh21-step2-empties
Step 2: Test empty vectors and hash-maps
Ben Harris [Fri, 29 May 2020 08:57:33 +0000 (09:57 +0100)]
yorick: Fix evaluation of empty vectors in steps 2 and 3
This is achieved simply by propagating the code to detect empty vectors
(and lists, though I suspect that is unused) back from step 4 to the
earlier steps.
Ben Harris [Thu, 28 May 2020 10:28:38 +0000 (11:28 +0100)]
Step 2: Test empty vectors and hash-maps
An empty vector or hash-map should evaluate to itself, but I reached
the test of (empty? []) in step 4 before I discovered that I'd got []
evaluating to 0. Add tests for both cases to step 2.
AnotherTest [Tue, 25 Feb 2020 20:05:20 +0000 (23:35 +0330)]
add a dockerfile with saxon in it
AnotherTest [Tue, 25 Feb 2020 19:57:34 +0000 (23:27 +0330)]
be more spec-compatible with readline
AnotherTest [Thu, 20 Feb 2020 22:50:52 +0000 (02:20 +0330)]
add 'xpath-eval', and fix most running issues
- step7 still has the replEnv-values-are-not-captured issue
AnotherTest [Thu, 20 Feb 2020 21:17:22 +0000 (00:47 +0330)]
fix (fn? +) ;=> false
AnotherTest [Thu, 20 Feb 2020 21:00:48 +0000 (00:30 +0330)]
oops.
AnotherTest [Thu, 20 Feb 2020 20:59:17 +0000 (00:29 +0330)]
rebase to kanaka/mal
AnotherTest [Thu, 20 Feb 2020 20:54:32 +0000 (00:24 +0330)]
generate perf analysis
AnotherTest [Thu, 20 Feb 2020 18:48:09 +0000 (22:18 +0330)]
fix previous env issue
perf tests run, still can't self-host
AnotherTest [Thu, 20 Feb 2020 00:51:36 +0000 (04:21 +0330)]
impl everything, passes tests, has some weird bug with eval
- investigate the case where (eval ...) loses the entire env
AnotherTest [Wed, 19 Feb 2020 21:36:45 +0000 (01:06 +0330)]
Implement step9 fully. pass all tests~
AnotherTest [Wed, 19 Feb 2020 18:06:55 +0000 (21:36 +0330)]
Finish step8
Issue: yanking out the replEnv from closures has an adverse effect in
that symbols meant to be captured from it will not be captured
We could get around this by copying all the used symbols, but
find-all-lexically-bound-symbols is quite complex
AnotherTest [Wed, 19 Feb 2020 11:35:13 +0000 (15:05 +0330)]
fix in-file step name
AnotherTest [Wed, 19 Feb 2020 11:33:59 +0000 (15:03 +0330)]
implement step7-quote
AnotherTest [Wed, 19 Feb 2020 10:32:28 +0000 (14:02 +0330)]
remove debug function
AnotherTest [Wed, 19 Feb 2020 10:29:00 +0000 (13:59 +0330)]
impl step6
separate replEnv from function environments, so as to decrease base size
(state size is still O(2^n))
AnotherTest [Wed, 12 Feb 2020 21:02:32 +0000 (00:32 +0330)]
impl step4, fix string parsing
AnotherTest [Mon, 10 Feb 2020 20:18:32 +0000 (23:48 +0330)]
print functions as #<fn name>
AnotherTest [Sun, 9 Feb 2020 21:48:20 +0000 (01:18 +0330)]
impl step3 fully. passes all tests
AnotherTest [Sun, 9 Feb 2020 18:10:59 +0000 (21:40 +0330)]
handle vectors and hashmaps
AnotherTest [Sun, 9 Feb 2020 18:07:11 +0000 (21:37 +0330)]
impl step2, remove interleaved calls in READ/EVAL/PRINT
AnotherTest [Sat, 8 Feb 2020 11:52:05 +0000 (15:22 +0330)]
start step2-eval
AnotherTest [Sat, 8 Feb 2020 08:01:19 +0000 (11:31 +0330)]
pass all step1 tests
AnotherTest [Fri, 7 Feb 2020 23:44:40 +0000 (03:14 +0330)]
add reader macros
AnotherTest [Fri, 7 Feb 2020 20:36:01 +0000 (00:06 +0330)]
complete required functionality for step1
AnotherTest [Fri, 7 Feb 2020 20:28:36 +0000 (23:58 +0330)]
starting xslt impl
Joel Martin [Sat, 23 May 2020 16:39:13 +0000 (11:39 -0500)]
Merge pull request #510 from bjh21/bjh21-runtest-simpler
Simplify runtest.py's input handling
Ben Harris [Sat, 23 May 2020 10:02:18 +0000 (11:02 +0100)]
runtest: Strip CR on input
Implementations don't generally deliberately emit CR, so any CR we see
was introduced either by the host language runtime or the OS terminal
driver, neither of which we're trying to test.
Ben Harris [Sat, 23 May 2020 09:58:57 +0000 (10:58 +0100)]
runtest: Don't worry about how implementation echoes input
Some of the complexity of runtest is in the way that it insists on
checking whether the implementation managed to echo its input line
correctly. This isn't really an important part of the implementation,
though, and when using friendly line-editing libraries the echoing can
often end up containing escape sequences. Simplify things by just
assuming that anything up to the first newline is our input being echoed
back.
This also means that various pre-processing of input is no longer
required.
Joel Martin [Thu, 21 May 2020 23:39:49 +0000 (18:39 -0500)]
Merge pull request #506 from gabrielmadruga/master
Update and fixes for the lua implementation.
Joel Martin [Thu, 21 May 2020 23:07:15 +0000 (18:07 -0500)]
Merge pull request #508 from bjh21/bjh21-throwtests
Add tests for nested exception handlers
Joel Martin [Thu, 21 May 2020 23:05:03 +0000 (18:05 -0500)]
Merge pull request #509 from bjh21/bjh21-ps-catch
ps: Fix handling of exceptions thrown from `catch*` clause
Ben Harris [Thu, 21 May 2020 19:50:42 +0000 (20:50 +0100)]
ps: Fix handling of exceptions thrown from catch* clause
PostScript's exception handling doesn't restore the dictionary or
operand stacks to the state they were in when the "stopped" operator
started, so mal's EVAL needs to do that itself. To do this, it records
the current height of the stacks, but of course it does that in a
dictionary. This means that when catching at exception, it relies on
the highest instance of "dictcnt" on the dictionary stack being the
correct one. EVAL, however, was failing to restore the dictionary stack
at the right time.
For instance, conside this code (from the tests):
(try* (try* (throw "e1") (catch* e (throw "e2"))) (catch* e "c2"))
Each "try*" clause saves "dictcnt" into a dictionary on the dictionary
stack. When the inner "catch*" clause fires, it pops the dictionary and
operand stacks to the correct point, but then calls the second "throw"
with the wrong value of "dictcnt" still visible. The result is that the
"catch*" clause ends up running with the wrong value of "dictcnt" and
restoring the stacks to the wrong place, essentially executing the
_inner_ "catch*" clause again, whereupon the error doesn't get caught
because there's no "stopped" left on the PostScript execution stack.
The fix is to add another dictionary that's just used to hold "dictcnt"
and "stackcnt", and to pop that from the dictionary stack as soon as the
stacks have been restored (or when it becomes unnecessary because the
"try*" clause has returned normally).
Ben Harris [Tue, 19 May 2020 09:28:21 +0000 (10:28 +0100)]
Add tests for nested exception handlers
When implementing exceptions on top of longjmp() or similar, it's
necessary to make sure that exception handlers get properly restored
after the try* clause, and none of the existing step 9 tests covered
this.
There are two cases covered here: throwing an exception after a
successful try*, and throwing and exception from within a catch*. In
both cases we make sure that an outer catch* does its job.
Gabriel M [Sun, 17 May 2020 17:23:54 +0000 (14:23 -0300)]
Change os.clock multiplier, update Dockerfile to use lua 5.3.5.5
Joel Martin [Sat, 16 May 2020 22:52:52 +0000 (17:52 -0500)]
Merge pull request #505 from bjh21/bjh21-test-readatom
Step 6: Test read-string of a single atom at the end of input
Gabriel M [Sat, 16 May 2020 02:33:26 +0000 (23:33 -0300)]
Update README.md
Gabriel M [Sat, 16 May 2020 02:09:09 +0000 (23:09 -0300)]
Change \177 to \u{029e}, correctly define keyword, change loadstring to load
Gabriel M [Fri, 15 May 2020 19:05:10 +0000 (16:05 -0300)]
Add lrexlib-pcre through luarocks.
Gabriel M [Fri, 15 May 2020 19:05:57 +0000 (16:05 -0300)]
Remove usage of socket
Gabriel M [Fri, 15 May 2020 17:32:55 +0000 (14:32 -0300)]
Lua Makefile improvements.
Clean lib folder, and find linenoise.so.
Ben Harris [Sun, 10 May 2020 13:23:40 +0000 (14:23 +0100)]
Step 6: Test read-string of a single atom at the end of input
All of the other read-string tests test forms whose end can be detected
before the end of the input string, either because they're naturally
self-terminating (lists, strings) or because there's white space after
them. All of the uses of the reader from the REPL are similarly likely
to have input with a newline or similar at the end.
My BCPL implementation turned out to read one character past the end of
the input when the input ended inside an atom, and to incorporate that
one byte into the output. The consequences of a buffer over-read are a
little unpredictable, so I've just written a test that was good enough
to catch the bug for me.
Joel Martin [Mon, 30 Mar 2020 19:22:53 +0000 (14:22 -0500)]
Merge pull request #502 from maniaphobic/master
Correct a trivial typographical error in the guide
mANIApHOBIC [Sun, 29 Mar 2020 03:01:46 +0000 (20:01 -0700)]
Correct a trivial typographical error in the guide
I corrected "you implementation" to "your implementation".
Joel Martin [Tue, 11 Feb 2020 16:02:53 +0000 (10:02 -0600)]
Revert accidentally pushed close_fds experiment
Joel Martin [Tue, 11 Feb 2020 05:50:16 +0000 (23:50 -0600)]
Move implementations into impls/ dir
- Reorder README to have implementation list after "learning tool"
bullet.
- This also moves tests/ and libs/ into impls. It would be preferrable
to have these directories at the top level. However, this causes
difficulties with the wasm implementations which need pre-open
directories and have trouble with paths starting with "../../". So
in lieu of that, symlink those directories to the top-level.
- Move the run_argv_test.sh script into the tests directory for
general hygiene.
Joel Martin [Thu, 23 Jan 2020 16:44:19 +0000 (10:44 -0600)]
DEBUG re-enable (REMOVE ME).
Joel Martin [Thu, 23 Jan 2020 16:12:37 +0000 (10:12 -0600)]
DISABLE FDs (REMOVE ME).