One possibility for further control of Felix entities would be a model spec:

        fun f() { .. } model "C++HeapFunctor", "Felix-C-Function";

The model clause lets you specify the allowed set of models.
The default is "any of them".

If you say "C++HeapFunctor" then you always get a C++ class object
on the heap.

If you say Felix-C-Function, you get exactly a C function which also
accepts the thread_frame as the first parameter. 

If the compiler gets a context that requires some models it finds
the intersection of the workable models with the specified ones
and fails if a suitable model doesn't exist.

For example, C functions can be passed as arguments, but
not where a Felix closure is required.

The idea is you get fine control of the semantics or a compiler error.
An more real example:

        fun f: int -> int = "$1" model "C++HeapFunctor";

If you say that the normal "macro" behaviour will be suppressed:
no lazy evaluation. Instead a closure wrapper will be generated
and used.

Felix already has some modelling control:

        fun vs cfun
        proc vs cproc

and export also forces a C API. Now, normally the end user wouldn't
want to see this. However we can make a simpler interface
with the user defined grammar stuff.

--
john skaller
skal...@users.sourceforge.net
http://felix-lang.org




------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works. 
Faster operations. Version large binaries.  Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to