Arc Forumnew | comments | leaders | submitlogin
What is the most promising Arc implementation?
6 points by svetlyak40wt 3951 days ago | 24 comments
I found at least 9 Arc Lisp implementations on the GitHub, some of them seems outdated, but probably this is just because there is small codebase and all obvious bugs are already cleared.

Here is the list, sorted by update time:

  * https://github.com/smihica/arc-js - Arc version in Javascript, to run in a browser (last update 3 days ago).
  * https://github.com/arclanguage/anarki - community managed fork of the Arc3.1 (5 days).
  * https://github.com/akkartik/arc - evolving fork of Arc3.1, with keyword arguments and generic functions (2 months).
  * https://github.com/arclanguage/arc-nu - attempt to completely rewrite Arc3.1 in racket (3 months)
  * https://github.com/awwx/ar - attempt to create a framework for languages like Arc (1 year)
  * https://github.com/smihica/glaze - Arc version, written in C++ (2 years).
  * https://github.com/arclanguage/rainbow-js - another attempt to write Arc in Javascript to run in the browser (2 years)
  * https://github.com/conanite/rainbow - version of Arc, written in Java (3 years)
  * https://github.com/evanrmurphy/lava-script - abandoned attempt to make a compiler from Arc to JavaScript (3 years)
Right now I only tried an Anarky and Arc-nu, trying to write a simple web crawler. And was surprised that Arc-nu not only hasn't a simple http client but even no way to connect to the socket.

Is there any usable Arc's forks beside Anarki?



2 points by svetlyak40wt 3950 days ago | link

Wow, I forgot about another my founding:

  * https://github.com/mgiken/arc-mg - improved Arc3.1 version with libraries and bindings even to libcurl (1 year)

-----

1 point by akkartik 3950 days ago | link

Ooh, I'd never seen this one before!

-----

3 points by svetlyak40wt 3950 days ago | link

By the way, I discovered it with my tool, which I'm writing in Arc to learn this language. This tool crawls GitHub starting from Anarki repository, to find other interesting projects, written in Arc.

-----

2 points by akkartik 3950 days ago | link

Found it: https://github.com/svetlyak40wt/arc-crawler. Awesome.

-----

2 points by rocketnia 3949 days ago | link

Does this tool find Arcueid? :) That project's on GitHub too.

https://github.com/dido/arcueid

-----

3 points by svetlyak40wt 3946 days ago | link

Tried arcueid. It is unstable. For example, running this simple code:

  (thread (while t (prn "Still going")))
Ends very quickly with error like this:

  arcueid: cont.c:54: __arc_mkcont: Assertion `(((struct vmthread_t *)(((struct cell *)(thr))->_obj))->spr) > (((struct vmthread_t *)(((struct cell *)(thr))->_obj))->stkbase)' failed.
  zsh: abort      ~/tmp/arcueid-base/bin/arcueid

-----

2 points by svetlyak40wt 3946 days ago | link

I've changed the test to count iterations:

  (thread (let i 0 (while t (prn "Still going: " i) (++ i))))
and it every time broke on 7270 iteration.

-----

2 points by svetlyak40wt 3946 days ago | link

Recursive code like this:

  (def my-loop ((o i 0)) (prn "Still going: " i) (my-loop (++ i)))
  (my-loop)
Performs much better. It fails only after 21799 iteration:

  Still going: 21799
  arcueid: env.c:83: __arc_mkenv: Assertion `(((struct vmthread_t *)(((struct cell *)(thr))->_obj))->spr) > (((struct vmthread_t *)(((struct cell *)(thr))->_obj))->stkbase)' failed.
  Still going: zsh: abort      ~/tmp/arcueid-base/bin/arcueid
:(

-----

1 point by akkartik 3946 days ago | link

I think all the errors you're seeing are due to running out of heap. How much memory do you have? Is there some per-process limit, perhaps to RLIMIT_AS?

Edit 35 minutes later. I can reproduce that it dies for me at the precise same iteration as you. And RLIMIT_AS is infinity, so that's not the issue. I've pinged the author for comment.

-----

2 points by svetlyak40wt 3944 days ago | link

Thank you. But now I think it would be wise not to complain about the issue on the forum, but rather to create an issue on the project's github. Will do it now.

Update: done — https://github.com/dido/arcueid/issues/60

-----

2 points by dido 3942 days ago | link

Well, thanks for the bug report. Well, I'll look into it when I have the time: the work which pays my bills has caught up with me once again and I don't have a lot of time to do hobby development. :)

-----

2 points by svetlyak40wt 3946 days ago | link

Well, actually, even without threading, arcueid running code:

  (let i 0 (while t (prn "Still going: " i) (++ i)))

Fails with exception:

  arcueid: cont.c:58: __arc_mkcont: Assertion `(((struct vmthread_t *)(((struct cell *)(thr))->_obj))->spr) > (((struct vmthread_t *)(((struct cell *)(thr))->_obj))->stkbase)' failed.
after 7266 iterations.

-----

2 points by dido 3942 days ago | link

The assertion error is a stack overflow. :) At present Arcueid makes use of a fixed-size stack within its virtual machine, and since the compiler still can't properly optimise tail recursion, your code overflows the stack.

-----

1 point by akkartik 3942 days ago | link

That was what I thought :) Is there a place where I can increase the size of the fixed stack? I looked for the limit in the code, but couldn't find it.

-----

3 points by dido 3941 days ago | link

src/vmengine.h:236:

#define TSTKSIZE 65536

Increase it as high as you like. :)

-----

1 point by akkartik 3941 days ago | link

Thanks!

Does it make sense to resize it on the fly when we discover we've overflowed the stack? Or are there potentially continuation pointers into the stack that would be non-trivial to track down?

-----

1 point by akkartik 3940 days ago | link

Yeah, no luck: https://github.com/akkartik/arcueid/commit/ae31b82540

-----

1 point by akkartik 3931 days ago | link

Possibly relevant: http://wingolog.org/archives/2014/03/17/stack-overflow

-----

3 points by svetlyak40wt 3949 days ago | link

Well, I haven't tried to run crawler with large depth setting yet. I discovered, that it have strange problems with threading and almost unable to process in parallel. Then I tried to investigate why. Will make a separate post on it, when will get some valuable information.

-----

1 point by svetlyak40wt 3950 days ago | link

So, why nobody wants to discuss this topic?

-----

2 points by akkartik 3950 days ago | link

I don't know how to answer it :) There's a lot of code in the world. I can help answer questions on some of it, but I have no idea what's most promising.

I upvoted you because I was happy to see the list, and I'd be interested in other people's answers.

-----

2 points by svetlyak40wt 3950 days ago | link

Well, probably I should ask another question, addressed to the different implementations' authors: "Why do you started to write your own implementation instead of making efforts to improve Anarki?" :)

-----

1 point by akkartik 3950 days ago | link

There was a thread about this recently that was a lot of fun: http://arclanguage.org/item?id=17597

-----

1 point by svetlyak40wt 3950 days ago | link

By the way, is there an IRC channel or some other place for more informal talks?

-----