Hacker News new | past | comments | ask | show | jobs | submit login

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.




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

Search: