Arguably, it improves upon Arc in many, many ways. :) Perhaps Arc's main advantage is that there are more people who use and maintain Arc. I'm sorry to say I've never used Nulan for anything, even though I'm suggesting it here.
When ClosureScript came out, it didn't support eval (and it still doesn't, I think!), so I was motivated to build an eval-capable version of Arc in the browser. Behold Rainbow.js:
It's a direct port of Rainbow (https://github.com/conanite/rainbow), but with a hand-rolled parser and a hand-rolled implementation of asynchronous stream I/O. Like Rainbow, it "compiles" Arc code to an intermediate representation and interprets that. Rainbow was already a fast Arc implementation (faster than official Arc!) so Rainbow.js is pretty speedy as well. I used to think it was even faster than Rainbow itself, but then I realized that was due to a bug. :-p
I haven't been motivated to use Rainbow.js myself, because it has many quirks: Some quirks of its own (e.g. no threads), some inherited from Rainbow (e.g. no bignums, and weird call/cc behavior during macroexpansion), and of course all the quirky features of Arc (e.g. ssyntax). It also has some quirks which are truly necessary to make it usable; for instance, its (load ...) implementation loads from the Web, because there is no filesystem. While this (load ...) fix makes some sense, it's not always clear to me what the best behavior would be. Instead of pondering these small design questions and imposing my own decisions on this project, I've been working on other language designs from the ground up instead.
By all means, see if you can get Rainbow.js to work. I don't have ideas to improve this project myself, but you're not the only one who's wanted to use something like this, so your ideas could could help those other people. :)
To make the .lsp example work you have to modify static-filetype at lib/srv.arc (https://github.com/arclanguage/anarki/blob/31b773d91a/lib/sr...) to handle the new extension. I'm away from my usual machine, so can you send me a pull request if you get it working? :)
PG has said he's still working on it, but you probably shouldn't rely on seeing further updates from him.
The community here makes updates from time to time, and I think we're pretty responsive to questions and bug reports. But our changes are not 'blessed' by PG or anything. Since PG has said that "future releases can break anything", such a blessing wouldn't be of much use anyway.
Bottomline: It's not for you if you just want features and don't care how they're built. But if you like the idea of gradually mastering the internals of the tools you rely on -- welcome aboard! You don't have to know anything at the start; we try to be very helpful.
The -m option means to call the "main" function now. Just leave it out. It used to mean "--mute-banner", which suppressed the "Welcome to MzScheme" line.
If you're using Arc 3.1 with a recent version of Racket (I can verify it works with Racket 5.3.1, but it should work with anything newer than that also), you just call it via `racket -f as.scm`. Arc 3.1 can be found here: http://ycombinator.com/arc/arc3.1.tar . Check out the unofficial Arc wiki for more information: https://sites.google.com/site/arclanguagewiki/
I don't think we've received this question before, but try starting them on separate ports and use apache or nginx rewrite rules to map say <site>/blog to the new port. Do you already use apache or nginx to hide the port in the url?
Ok, great, thanks for reply! I'm still really new to arc so, to be honest, it doesn't really make sense without looking at the actual. Hopefully, later today/this week, I will have some time to sit down and really look into things. Once I get something functioning I will definitely send a pull request.
The list of stories on the frontpage is generated by the function topstories. That's where you'll want to join a sticky post, either hardcoded or saved in a separate file like the arc/news/topstories file.
Disabling comments seems a little more involved. You'll need to add an attribute (say allowcomments) to the item deftem, and then check for it in:
a) displaying the commentlink in display-story, and
b) comments-active, which is checked before displaying the comment-form
Thanks for the feedback, both here and on the bug in the bitbucket tracker.
I'm not sure of my feelings on changing all the asserts to be just one. On one hand, it is simpler to have just the one command. On the other, it seems like a much more complicated interface, as you would never guess how to use it from, for example, the method signature. assert-t, assert-same et. al. seem like a lower conceptual load.
It reminds me of the arguments over CL's loop macro -- who knows all of it? I can never remember how to do much of what I want. Of course, this is much simpler than loop. Maybe I'll implement it and see how it feels.
Note that assert-same requires the expected value before the test-value. This is needed for pretty, pretty messages when the assert fails:
Maybe I'm just tired, but I first took this to mean that it was impossible for assert-same to be defined so that its arguments were (actual expected (o fail-message)). Now I realize that you just mean the positions of your expected/actual values are important.
One design thought: the name assert isn't taken by Arc. You could simplify the interface while generalizing it by just separating assert from the things it's asserting.
So, the basic assert would essentially be assert-t, and the other three could follow. Something like
(assert-t actual (o fail-message))
; becomes
(assert actual (o fail-message))
; or, without the custom message
(assert actual)
(assert-nil actual (o fail-message))
; becomes
(assert (no actual) (o fail-message))
; or, without the custom message
(assert:no actual)
(assert-error actual (o expected-error))
; becomes
(assert (error actual (o expected-error)) (o fail-message))
; or, without the custom message
(assert:error actual (o expected-error))
(assert-same expected actual (o fail-message))
; becomes
(assert (same expected actual) (o fail-message))
; or, without the custom message
(assert:same expected actual)
Then, you define error and same to "do the right things". same would probably need to throw an error when the arguments were mismatched, so that you could generate the nice message---assuming that assert would catch errors and report them as failures. error would be easy to define. Maybe something like
(mac assert (condition (o fail-message))
`(on-err (fn (c) ...fail...)
(fn () (unless ,condition ...fail...))))
(mac same (expected actual)
(w/uniq (e a)
`(with (,e ,expected ,a ,actual)
(or (iso-that-works-on-hash-tables ,e ,a)
(err "" ',actual 'returned ,a 'wanted ,e))))) ; modulo prettiness
(mac error (expr (o expected-error))
`(on-err (fn (c) ...pass, modulo expected-error...)
(fn () ,expr ...fail if we get here without an error...)))
Lisp In Summer Projects hasn't made a list available that I know of. Certainly they will announce the winners; I don't know if they'll announce all the projects. Hopefully.
I've mentioned my unit test library before (http://arclanguage.org/item?id=17922), but now I think it's pretty much ready for prime time. It reports results nicely (if verbosely), and you can run decent subsets of your tests. It even has a README!
I'd love to hear feedback, whether on this forum or by submitting a bug (https://bitbucket.org/zck/unit-test.arc/issues/new). This is a weird thing, but as I'm doing this project for Lisp In Summer Projects (http://lispinsummerprojects.org/), I'm supposed to do pretty much all the work myself. I'd love to take patches after the contest closes.