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
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 REPL -
Ctrl+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))" | arcThis 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 #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 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>_