[kepler-dev] Re: type signatures in the expression language
Stephen Andrew Neuendorffer
neuendor at eecs.berkeley.edu
Tue Aug 3 16:16:46 PDT 2004
Yes it would..
Unfortunately, implementing this in practice is a little hard, since the
map() function is discovered through
Java's reflection mechanism which searches for methods with particular
arguments...
The 'right' thing to do is to find all of the functions with the name 'map'
with the correct number of arguments,
and return a function closure that invokes the right Java function based on
the type of the arguments.
Associated with this function is a type constraint that does the same
thing, but instead of applying the function,
returns its result type. This is all rather complex, and in most cases is
unnecessary, since we 'know' the argument
types beforehand. So, basically to avoid going through all the above steps
to do it 'right', we cheat and use the types
of the arguments to reflect only the right map function. This alone is
already rather complicated, since
looking up java functions does fancy things like implicitly mapping
functions over arrays, when possible,
and automatic ptolemy type conversions.
If we wanted to get really fancy, then we could process all of the methods
at startup and build big lookup tables
for every set of function arguments and every function name, what is the
right java method to invoke. Note that
Java and C++ do not do this, since the tables can grow large when you are
performing method selection based
on all the arguments. Java and C++ both simply the problem significantly
by performing virtual method invocation
only using the first argument of a method (corresponding to the object that
the method is being invoked on).
This can be easily compiled into an array that maps the class number of the
first argument onto the correct
method to call, called a vtable.
Steve
At 04:00 PM 8/3/2004, Tobin Fricke wrote:
> >> f = function(x:int) x + 3
>(function(x:int) (x+3))
> >> f
>(function(x:int) (x+3))
> >> map
>The ID map is undefined.
> >> map(f,{0,2,3})
>{3, 5, 6}
>
>Instead of this behavior, would it make sense for functions like 'map' to
>evaluate to something?
>
>Tobin
>_______________________________________________
>kepler-dev mailing list
>kepler-dev at ecoinformatics.org
>http://www.ecoinformatics.org/mailman/listinfo/kepler-dev
More information about the Kepler-dev
mailing list