I'm not completely sure what C++11 stuff would be most useful
to Felix. A lot of the stuff that avoids book-keeping for human programmers
is no problem in generated code.

Some of the new library containers may be useful.

In the core language, initialiser syntax like

        X = { .. }

would be a big help. Felix has to either generate constructors to do this,
or, it has to generate a separate variable somewhere and manually initialise
it with assignments. For the compiler keeping track of this is hard because
the need to generate the initialiser list is usually discovered too late
to back track and insert statements to create the value .. i.e. you're in
the middle of generating an expression and you run into something
that can only be made into one by a magic function you have to define
*earlier* in the code.

For exactly the same reason the lambda feature would be useful.
It allows a bunch of statements to be inserted into an expression.

<rant>
Curious the committee didn't bother to allow named nested functions!
Oh .. was that because they stupidly used up the "auto" keyword which
would have declared them? :-) Of course the whole worry about keywords
is irrelevant these days because we have GLR parsers but I guess they
didn't exist then. C++11 actually has a couple of "context sensitive keywords"
now (identifiers treated as keywords only in a particular context).
</rant>

A couple of the "easier reading" feature will also be useful not for
the Felix compiler as such, but to make the generated code easier
to read. Felix doesn't need "auto" but it could make generated code
look nicer.

The there's rvalue references and move semantics which will certainly
be important even for Felix. These should allow significant performance
improvements not possible otherwise (even with compiler generated code).

 I may have missed something. Any suggestions for other useful stuff
in C++11?

BTW: C++11 doesn't have arithmax. That annoys me :-)
We need a trait:

        template<class T, class U> class result::type<T,U>

which gives the type of 

        x + y

for all possible x,y in the set of standard scalar types. Felix has to have
this. It currently (mis)calculates the result at configuration time.
The result is platform dependent in corner cases eg 

        long long + unsigned long

could be long long or unsigned long depending on whether
sizeof(long) == sizeof(long long). If they're equal the unsigned
long is used otherwise long long is used (i.e. the biggest one is
used or the unsigned one if they're the same).


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




------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to