On Wed, 2007-07-11 at 09:39 -0400, Sandro Magi wrote:
> On 7/11/07, skaller <[EMAIL PROTECTED]> wrote:
> > > Still trying to grasp this. How do you forget to "plug in" a channel?
> >
> > Pass it as an argument.
> 
> Ah, in most functional languages values cannot be null, and nullable
> ones are wrapped in an option/maybe type. I take it this is not the
> case for Felix?

Felix would also require an option type**. What I mean by forgetting
is this:

        var ch1 = mkchannel ..
        var ch2 = mkchannel ..
        chip1(ch1,ch2);
        

run it .. it hangs .. hmm .. ah .. I only connected one end of the
channels ch1 and ch2. chip1 is blocked on 1 of them. The channels
are in global scope here, so the mainline could read/write the
channels, so there's no deadlock, just a persistent block.
Do it like this:

spawn_fthread {
        var ch1 = mkchannel ..
        var ch2 = mkchannel ..
        chip1(ch1,ch2);
}

and now the program terminates immediately without doing anything,
because the channels are unreachable, so chip1 is unreachable.

** How you interface with C is up to you
Felix functions are C++ classes, not C functions.

If you do this:

        proc g(){}
        val f = the g; 

then 'f' is a function value and isn't null. But if you
do this:

        var h : int-> unit;

then h is null because it isn't initialised. Using it
is "illegal" of course:

        h 1;

would probably cause a core dump/segfault/crash.


-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to