I agree. I was alarmed, too, by non-hygienic macros combined to the terse names of standard functions. It seems too easy to shadow them (I have to change my custom to name the argument 'obj').
About generics, I expected that the type annotation system (annotate, type, rep) would be the basis of some sort of user-expandable generic dispatching mechanism. In arc0 only macros using it and its handling is built-in to the core, so it's not clear how PG want it to evolve. He's probably putting it off, but it's where the fun is...
Another point I was alarmed is the automatic promotion of non-function objects to a function that tests equality to it (some, all, rem, keep, ... all does that via testify). It is useful since it captures typical pattern. However, on the other hand, aggregate data is 'callable' when used in the function position. I can make a table that maps elements to booleans and I can use it as if it is a predicate, but that illusion breaks once I pass it to other procedures which eventually pass it to 'some'. (In my Scheme implementation, any objects can be made callable. It is handy, but I then learned that to keep that "handiness", I had to give up most of checking if something is procedure or not.)
Comments
I agree. I was alarmed, too, by non-hygienic macros combined to the terse names of standard functions. It seems too easy to shadow them (I have to change my custom to name the argument 'obj').
About generics, I expected that the type annotation system (annotate, type, rep) would be the basis of some sort of user-expandable generic dispatching mechanism. In arc0 only macros using it and its handling is built-in to the core, so it's not clear how PG want it to evolve. He's probably putting it off, but it's where the fun is...
Another point I was alarmed is the automatic promotion of non-function objects to a function that tests equality to it (some, all, rem, keep, ... all does that via testify). It is useful since it captures typical pattern. However, on the other hand, aggregate data is 'callable' when used in the function position. I can make a table that maps elements to booleans and I can use it as if it is a predicate, but that illusion breaks once I pass it to other procedures which eventually pass it to 'some'. (In my Scheme implementation, any objects can be made callable. It is handy, but I then learned that to keep that "handiness", I had to give up most of checking if something is procedure or not.)