Hacker News new | past | comments | ask | show | jobs | submit login
New Arc Out (arclanguage.org)
36 points by rams on June 12, 2009 | hide | past | favorite | 19 comments



Perhaps more interesting is that mzscheme changed a core language feature (mutable cons cells) without providing any backcompat.


Yeah, that was a pretty dramatic move. It means MzScheme is no longer an implementation of the Scheme standard.

The latest standard, R6RS, goes no further than grumbling about mutable pairs and raising the possibility of deprecating them in the future:

http://www.r6rs.org/final/html/r6rs-rationale/r6rs-rationale...


To be fair, the base language of PLT never claimed to support any relevant standard. Instead implementations of standards are built as libraries on top of the base language. So PLT does provide both R5RS and R6RS, both with mutable pairs.

It is when you want to use PLT-specific non-RnRS libraries from RnRS code, you run into pair incompatibilities.


But before this change, I believe every PLT Scheme implementation was a superset of standard Scheme. (Which every Scheme implementation is.) Now it's actually incompatible.


So is MzScheme effectively like Erlang now? I thought the immutable memory in Erlang does make some things difficult to code, which would have been a reason for me to prefer Scheme.


Actually, mutable cons cells are in PLT, they're just created using mcons instead of cons, and accessed with mcar/mcdr. While this does make porting code a bit difficult, it's a very old change - Matthew's original blog post on the subject is dated from end-2007:

http://blog.plt-scheme.org/2007/11/getting-rid-of-set-car-an...


Not really. Only pairs are immutable now; vectors, strings, structures, hash tables and all the rest are still mutable. There's also separate mutable pairs. And mutable bindings, as always.

So no, far from Erlang in mutability.


I doubt you would find the immutable aspect in Erlang a problem in practice. I don't know MzScheme, but Erlang has a its own very different philosophy. I suggest Joe's thesis as an interesting read.

http://www.sics.se/~joe/thesis/armstrong_thesis_2003.pdf


Well I found it a problem when I tried to program a Sieve Of Eratosthenes for project Euler. Also when I considered a grid based alife simulation. I guess the only way would be to use a process per cell?


Sometimes the mutable structures get passed around in the function arguments, so you might do a sequence of tail recursive calls and on each call you pass in the next board state to the same function. I would hope the Erlang Questions mailing list would help you if you posted a small example and explained your troubles to them. There are lots of very clever Erlang people there.

http://www.erlang.org/faq.html


Might try it again - not that I didn't enjoy it, it was fun.


Just curious: Why was mzscheme chosen to implement Arc rather than some other Scheme implementation?


Originally we used Scheme48. I forget exactly why we switched. I vaguely recall some problem with threads. I think we chose PLT Scheme because it seemed like the default Scheme implementation.


In case you decide to compile MzScheme 372 from sources on a Fedora 10 box that has SELinux in enforcing mode, you need to take a few (simple) additional steps:

http://aadnyavali.wordpress.com/2009/06/07/making-arc-3-play...

I'm still downloading Fedora 11, but suspect that the same exercise will be needed for that as well.


I wonder whether Arc will end up in effect maintaining mutable-cons mzscheme. If this happens, I hope that Arc's focus won't shift to the implementation details.


I wonder if PG can tell us what the new changes are. I'm sure that there is a changelist, but I don't see it.


Actually, pg has said he hasn't kept track of the changes:

http://arclanguage.org/item?id=9399

Fortunately, someone else has taken the time to analyze the differences between arc2 and arc3:

http://arcfn.com/2009/06/whats-new-in-arc3.html


There were also a couple changes since then. IIRC the most significant are that ontable is gone (each expanded to take its place) and that you can call readc etc with no arg (and read from stdin).


yep, just found that. Thanks.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: