|Yeah, yeah, everyone has their own ideas about what features Arc should have. Just thought I'd cons mine on there.|
1. The layout for function declarations ought to match the layout for function calls.
So instead of (def myfunc (x y) ...), you would write (def (myfunc x y) ...).
Doesn't it just feel better? I mean, that is what you're defining: the meaning of (myfunc x y).
This also means you can write (def (myfunc . args) ...) for a function with only an arbitrary argument list. Much more consistent.
2. Hygenic macros by default
Scheme's strictly hygenic macros may have been a mistake, but you have to admit: unhygenic macros are the wrong default.
On the rare occasion that you actually want unhygenic behaviour, it should be something you can explicitly request... not something you have to explicitly turn off, every damn time.
3. List splicing
At the moment there are two different ways to express "splice a list in here". When back-quoting, you write:
`(a b ,@others)
In a function declaration, you write:
(def foo (a b . others) ...)
Ok, these in different contexts (one builds the list, the other destructures it)... but conceptually they're the same.
I suggest @ should become a "list splice" operator, able to be used anywhere.
This makes the apply function completely redundant, by the way: instead of (apply f args), you can say (f @args).
arc> (let others '(17 18 19)
(1 2 @others 3))
(1 2 17 18 19 3)