Hacker News new | ask | show | jobs
by lispm 3369 days ago
That does not mean I want them in a programming language to be functions.
1 comments

I guess I just don't see a disadvantage. An array is a pure function, no side effects, so it should always be safe to treat it as one.
One disadvantage: you can't inline the code for such a vector reference, unless the compiler knows at compile time that this is a vector reference.
But this is true for anything that's in the callee position, right? Either it can be determined (possibly via static flow analysis) that it's a particular function, in which case it is inlined; or else it is an unknown function, in which case it won't be. It would seem that statically verifying that something is a vector reference isn't really harder than doing the same for a function, all else being equal.
if a Common Lisp compiler sees a call to cl:aref then it can inline it, without using static flow analysis or similar...
I was under the impression that CL compilers already had to do a lot of fairly complicated static analysis to achieve acceptable performance, because of dynamic typing.
Depends. Since the developer can use low-level functions and provide type declarations, a compiler can generate usefully fast code without too much work. More advanced compilers need less declarations, since they do some amount of type inference. One of the costs: the compiler then usually is quite a bit slower.