Ok, so here's a little problem I'm struggling with:

  var ch1: oschannel[event_t]; mk_field (w, 50, 60, font, black, white, 
"EDITFIELD ONE", &ch1);

This looks .. er .. ugly. And its a pain because the type of ch1 has to be 
declared.
Uninitialised variables looks screwy..

The reason for using a procedure: the procedure contains this:

  spawn_fthread controller; 

which you cannot do in a function (not even a generator).

Function like code can be converted to a procedure by changing

        return value;

into

        presult <- value; return;

and adding presult, a pointer to the result type, as an argument.
So we could write the code looking like a function and convert it.
Actually Felix already does this for (at least some) functions called directly,
but the functional form is required for a closure so the type is right.

That still leaves open how to use such a procedure.
We could do something like:

var x <- f a; // a type int

and have that converted to

var x: T; f a (&x);

How do we get the T? Well f would have type

        a -> &T -> 0

so 

        T = dom (typeof (f a))

where

  typedef fun dom(t:TYPE):TYPE =>
    typematch t with
    | ?a -> _ => a
    endmatch
  ;

is already defined in the library. On the other hand, if the type T is given
it can participate in overload resolution.

The proposed syntax

(a) only works for a single variable
(b) only works when defining it

The second constraint means you can't do this:

        x <- f a;

assuming x is already defined, because that syntax already means
to store the value returned by a function at pointer x.

Another option is to use a function to return the procedure to be run,
then we get

        var ch1, cls = mkfield (..);
        spawn_fthread cls;

however the semantics are subtly different: at present Felix starts executing
spawned fthreads immediately so if they return its the same as a 
subroutine call. It also means that if they refer to context, the context 
doesn't
also have to be a closure retained on the heap. Most fthread don't return
immediately of course .. 
        
--
john skaller
skal...@users.sourceforge.net
http://felix-lang.org




------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to