With regard to S. Karpinski's counterexample regarding sort, I'm not sure I understand the problem. If sort! is defined to take a vector v as input, and meanwhile f is defined to take a const-vector v and function g as input, then if the user tries to call g(v), then the compiler will emit an error because it cannot convert const-vector to vector. Anyway, this is how it would work in C++. Doesn't this solve the problem?
-- Steve Vavasis On Thursday, June 12, 2014 8:28:18 PM UTC+3, vav...@uwaterloo.ca wrote: > > Both C++ and Fortran 90 allow the programmer to annotate call-by-reference > arguments to a function as to whether the function is allowed to change > them (this is denoted const & in C++). The compiler then enforces the > const-ness of the argument. I don't see how to do this in Julia. Is it > available? If not, is there a reason why it was not included? This is a > fairly basic tool for self-documenting code and for ensuring program > correctness. > > And a related question: the documentation makes a big deal about "stable > types" for function return arguments. An obvious question is why the > language doesn't allow the programmer to declare in the function heading > what will be the return types of the function, and then have the compiler > enforce this stability. Is this possible in Julia? If not, is there a > technical reason for omitting it? > > Thanks, > Steve Vavasis > > P.S. I have a few more questions but I'll pause now to wait for answers to > these questions. I hope they are easy to answer! >