| Hi! I just added a new feature to Anarki. Now you can write a Racket module like so: #lang anarki
(:provide foo bar baz)
; Arc code
(= foo 1)
(= bar 2)
(= baz 3)
The (:provide ...) line is neither Arc code nor Racket code. It's just a file header, the easiest syntax I could think of to let an Arc-based library have simple Racket exports. Note that at this point it only exports values, not syntaxes, so you can't write a macro in Arc and call it from Racket.[1] Also, Anarki programs still clobber one giant shared global scope, so this is really only for the benefit of letting Anarki modules blend in among a bunch of other Racket imports. If you have nothing in your Anarki module that you particularly want a Racket program to be able to (require ...), you can simply write (:provide) with no variables.As a makeshift unit test, I've written a network of "hello world" modules in Anarki's lib/racket-lang-demo/ directory. They demonstrate how #lang racket modules, #lang anarki modules, and traditional Anarki files can all use a #lang anarki module and vice versa: racket-application.rkt
lang-anarki-application.rkt
plain-anarki-application.arc
lang-anarki-library.rkt
racket-deep-dependency.rkt
lang-anarki-deep-dependency.rkt
plain-anarki-deep-dependency.arc
I was studying how to make a Racket #lang, and this project seemed like a good way to give Arc something that it's been missing for a while. :)--- [1] Using raw Arc macros from Racket would be a bit unsatisfying anyway. Arc macros expect their subexpressions to be Arc subexpressions, so the Racket program would have to use some kind of quasiquotation-like cruft to switch back to Racket syntaxes. |