arc-nu
arc-nu copied to clipboard
Rewrite of Arc 3.1 with more features, more speed, and bug fixes. Still compatible with Arc 3.1.
How to install
::
git clone https://github.com/arclanguage/arc-nu.git
You also need Racket <http://racket-lang.org/>
_.
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 <http://racket-lang.org/download/>
_.
How to run
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.
Why?
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
import
macro 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+D
exits the REPL -
Ctrl+C
aborts the current computation but doesn't exit the REPL::> ((afn () (self))) ^Cuser break >
-
Readline support is built-in, which means:
-
Pressing
Tab
will 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
Up
will recall the entire expression rather than only the last line::> (+ 1 2 3) 6 > (+ 1 2 3)
-
-
-
You can use the
arc
executable to write shell scripts::#! /usr/bin/env arc (prn "foo")
This is like
arc.sh
in 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 <http://arclanguage.org/item?id=10344>
_ -
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 #f
This 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 Arc -
The 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 macros -
For more details on the differences between Arc/Nu and Arc 3.1, see
this page <doc/Differences.rst>
_