On 19. Nov, 2009, at 15:44 , Jed Brown wrote:
Michael Wild wrote:
On 19. Nov, 2009, at 15:06 , Jed Brown wrote:
Michael Wild wrote:
Not sure I'd like that... Instead of being more expressive, I
think this
would be very confusing.
This is not a some magic beast coming out of functional
languages. In
fact, it's pretty hard to find a language that can't do this sort of
thing, even older Fortrans let you pass functions.
Jed
Yes, but that's something completely different! It's not like you're
able to do (using your notation):
(not my notation)
set(&tmp &install)
set(&install &add_executable)
set(&add_executable &tmp)
In C/C++ and to various extent in Fortran (depending on the
version) you
can pass around "function pointers". This is _not_ a function.
There's
no way of doing that in C/C++ or Fortran (that is, without using ugly
preprocessor magic).
CMake is untyped where as C, for example, is statically typed and only
allows symbols to be defined once (C++ breaks this with templates, but
you're supposed to be careful so that all definitions are equivalent).
Although this is OT, I have to say that this is not true. C++ is still
statically typed. You can overload functions, but then it really is
the same thing as the function signature is considered to be part of
the name. Also templates do not change this, as the template
parameters are part of the type name.
In any case, you sure can do
int (*Func)(int,int) = SomeFunction;
int x = Func(5,6);
int y = FoldL(Func,array,size,3);
and so on.
Sure, but you're not _renaming_ a function. You're just assigning the
address of a function to a pointer which can then be used to invoke
that function. It is _always_ clear that Func is a pointer to a
function and not something else.
Jed
Anyways, I didn't want to get into a language-war, but rather voiced
my dislike for such dubious flexibility. CMake is very domain-specific
language used to create build systems, not a general-purpose language.
BTW, in the OP's particular case I would prefer to patch the upstream
source without any voodoo.
Michael
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake