git clone https://github.com/arclanguage/arc-nu.git
You also need Racket.
If you're on *nix you can probably get it with your distribution's package manager, like apt-get or yum or whatever.
If you're on Windows or Mac OS X, get Racket here.
If you're on Windows, double click on the arc.bat file.
If you're on *nix or Mac OS X, use path/to/arc-nu/arc
If you don't want to type out the path to arc every time, you can place a symlink in your $PATH
Doing so is a bit involved, and depends on what distribution you're using. On Debian/Ubuntu-based systems, this should work:
mkdir -p ~/bin ln -s path/to/arc-nu/arc ~/bin/arc
Now logout or reboot your computer. If it went well, you should be able to use arc rather than path/to/arc-nu/arc
You can use arc foo to load the Arc file foo.arc
And the arc executable is suitable for writing shell scripts:
#! /usr/bin/env arc (prn "foo")
Use arc -h to see all the available options.
So, why would you want to use it over Arc 3.1 or Anarki?
It's faster! Arc/Nu strives to be at least as fast as Arc 3.1, and in some cases is significantly faster. For instance,
(+ 1 2)was 75.21% faster in Arc/Nu than in Arc 3.1, last time I checked.In addition to supporting Arc 3.1, the Arc/Nu compiler can also support other languages. All languages supported by Arc/Nu can communicate with each other and use libraries defined in other languages.
Includes an
importmacro which makes it significantly easier to load files:; Arc 3.1 (load "/path/to/foo.arc") ; Arc/Nu (import foo)
The REPL is implemented substantially better:
Ctrl+Dexits the REPLCtrl+Caborts the current computation but doesn't exit the REPL:> ((afn () (self))) ^Cuser break >
Readline support is built-in, which means:
Pressing
Tabwill autocomplete the names of global variables:> f filechars find flat for fromdisk file-exists findsubseq flushout force-close fromstring fill-table firstn fn forlen
Pressing
Upwill recall the entire expression rather than only the last line:> (+ 1 2 3) 6 > (+ 1 2 3)
You can use the
arcexecutable to write shell scripts:#! /usr/bin/env arc (prn "foo")
This is like
arc.shin Anarki but implemented in Racket rather than as a bash script, so it should be cleaner and more portable.In addition, it supports common Unix idioms such as:
$ arc < foo.arc $ echo "(+ 1 2)" | arc $ echo "(prn (+ 1 2))" | arc
This idea is courtesy of this thread
Like Anarki, Arc/Nu provides a form that lets you bypass the compiler and drop directly into Racket. In Anarki this form is
$and in Arc/Nu it's%:> (% (let loop ((a 3)) (if (= a 0) #f (begin (displayln a) (loop (- a 1)))))) 3 2 1 #fThis also lets you call Arc/Nu and Racket functions that aren't exposed to Arc:
> (%.->name +) + > (%.string? "foo") #t
[a b c]is expanded into(square-brackets (a b c))which is then implemented as a macro:(mac square-brackets (body) `(fn (_) ,body))
Likewise,
{a b c}is expanded into(curly-brackets (a b c))This makes it easy to change the meaning of
[...]and{...}from within ArcThe Arc/Nu compiler is written in Racket, rather than mzscheme
Arc/Nu cleans up a lot of stuff in Arc 3.1 and fixes bugs (Anarki also fixes some bugs in Arc 3.1, but it generally doesn't clean things up)
Arc/Nu has reorganized Arc 3.1 significantly, hopefully this makes it easier to understand and hack
All special forms (
assign,fn,if,quasiquote, andquote) are implemented as ordinary Arc macrosFor more details on the differences between Arc/Nu and Arc 3.1, see this page