At this stage of language design, where everything is so fluid, there's little point to take such benchmarks, IMO.
What you might want to look out is design flaws which make future optimization very difficult. (But considering the 100-year language goal, pg can argue that any optimization specialized to today's compiler and processor technology shall be premature optimization.)
apply copies its argument list (guaranteed by Scheme spec). So this line lets the apply copy x, then passes it to a function that just returns the copied list. It may be faster than traversing the list in arc, for apply may be able to take advantage of underlying Scheme.
One of my friend is a Haskell programmer and he and I once have tried to put implicit currying into Scheme.
The biggest problem is Scheme's variable arity. You might think you can do currying only based on the required arguments, but that doesn't work in practice. Suppose this simple "complement" procedure:
(def complement (f) (fn args (no (apply f args))))
This loses arity information of original function f. It is extremely annoying that you get it curried for two-arg function f by
(f 1)
and not curried for its complement:
(~f 1)
Another example that breaks implicit currying is a simple debugging aid procedure that wraps the given function to trace its invocation. Just redefining f with the wrapped f (which, many simple 'trace' macro does), and implicit currying on f break. It's very fragile.
If you have access to the internal of the implementation, you may be able to extract arity information from the original function and transplant it to the new function. But automating it generally is difficult, and relying programmers to do that manually is cumbersome.
Our conclusion was that implicit currying and variable arity (without type information) didn't mix. You have to choose either one.
I don't quite get the parallel. I'm talking about introduction of a new feature X breaking a model implied by an existing feature Y, even if there's nothing wrong with either X or Y individually. Can you elaborate your remark?
Well we can only speculate. He said he wants to reserve '?' for ssyntax, and I pointed out '?' in ssyntax and lone '?' can coexist. If he also reserve lone '?', that's his decision.
As a sidenote, square brackets are harder to type on Finnish/Swedish keyboards than ordinary parenthesis. The former requires Alt Gr + {8,9}, the latter Shift + {8,9).
(Why am I using the Finnish keyboard layout to edit code? A bad habit from the past, admittedly.)
So... that's it? atomic? If so, does the fact that (= ...) are done (atomic ...) mean that I can just, well, write to a variable and automatically expect locking?
e) In R5RS Scheme you have to specify the global environment where the expression is eval'ed, but it only specify three envirionments, two of which are very restricted. So, using (interaction-environment) is the easiest way to get the behavior of legacy 'eval'. Various implementations extend this part of semantics, but you'll lose portability.
Cf. http://practical-scheme.net/wiliki/schemexref.cgi?eval