On 17/01/2013, at 4:43 AM, Dobes Vandermeer wrote:
> In Felix you can do this:
> fun f(i:int) =>
> let ?g = fun (x:int) => i + x in
> g (i+2)
> ;
> but this is not the same: it makes g a closure. Closure can only
> be inlined away with data flow analysis, it may happen in this case
> but I wouldn't bet on it :)
>
> There's no need to make bets, just try it out and look at the disassembly to
> see what happens with your preferred compilers.
Ah, I'm talking about the Felix compiler flxg.
>
> In CoffeeScript they only have the lambda syntax for definition functions;
> i.e. they have f = fun (x) => x*x and NOT fun f(x) => x*x. This works
> surprisingly well and keeps the language nice and simple - now there's just
> one function construct to support, and at little cost (basically just the
> extra " = " in terms of character count; it's no harder to read, and its
> trivial for the compiler to assign a name to the function when appropriate).
>
> You could do the same transform - just treat val g = fun(x) => x*x as if they
> had typed fun g(x) => x*x .
Actually no, I can't. The reason is, functions bound by name like
fun f(x:int)=> x;
can be overloaded on the name. Variables like:
val f = fun (x:int) => x;
cannot be overloaded. The semantics in both cases are probably the same
(modulo the weirdness we have previously discussed) after binding though.
There's a second reason this cannot be done in general: polymorphism.
In a fun binder like:
fun f[T] (x:T) => x;
f is polymorphic. You cannot do this:
val f[T] = fun(x:T) => x;
or whatever the syntax would be, because that would denote
a polymorphic closure. Felix does not allow polymorphic objects.
[Boxed ones might be supported, but they're not at this time]
--
john skaller
[email protected]
http://felix-lang.org
------------------------------------------------------------------------------
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612
_______________________________________________
Felix-language mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/felix-language