On Mon, 2007-05-07 at 10:32 -0700, Erick Tryzelaar wrote:
> skaller wrote:
> > Which would you remove? Look in config/flx_data.py.
> >
> > Users can always obey the convention of names like
> >
> >     Fred // starts with upper case
> >     fred_nurk // embedded _ 
> >
> > which should reduce conflicts.
> >   
> 
> What would that be equivalent to in the current syntax?

huh? That is current syntax, I'm just suggesting how to avoid
clashes with keywords.


> Here's my list of things we could change:
> 
> 1. There's a lot of code commenting keywords that we could do away with, 
> like "comment", "todo", and "publish", although I think publish is 
> supposed to be like python docstrings. If that is the case, I'd prefer 
> it to be named just "docstring" as publish is a much more common 
> function name.


Originally i wanted to give Felix some builtin Literate Programming
features -- I still do. But it is harder than I thought.

Add ticket: review commenting style

> 2. I'm not sure if this is LALR, but it'd be nice if we just had one 
> terminator for all of our "endcase", "endif", and "endmatch" constructs. 
> What if we just replaced them all with "end"? 

That's LALR(1), no worries. The endmatch, endif, etc etc are
deliberate so you have balanced distinct pairs:

        match -- endmatch
        if .. endif

This makes debugging and error detection easier. But it
is inconsistent with, for example:

        proc f() { .. }

using { } .. instead of

        proc f() begin ... end;
        

> I do like "do"-"done", and 
> I'd like to raise that up to roughly equal "begin"-"end" from ocaml.

The difference is do/done doesn't introduce a scope, whereas
begin/end does (in Ocaml).

begin/end are stolen by STL .. I'd like to steal them back
by replacing the begin()/end() methods of containers with
some other names. (start/finish?)

> 3. It'd be nice if pattern matching with the keyword "match" could take 
> over for "regmatch" and "typematch". I'm sure that would take some 
> effort though.

Regmatch/reglex are possible but not entirely simple.

Typematch could probably be replaced by match right now,
since types already use the same syntax as expressions.

There's a case for a hybrid though:

        typecase int with
        | int => 1
        | long => 2
        ...

i.e. matching a type but returning an executable expression.
This is a kind of type driven conditional compilation.

> 4. "isinf" and "NaN" should be removed, and replaced with a function / 
> constant.

Then you can't match on them.

> 5. I'm not sure what "compound", "fork", "halt", "incomplete" and "loop" do.

compound, fork are unused (fork is obviously for forking .. :)

halt does what it says .. it halts the program.

incomplete is a qualified for types:

incomplete type myvoid = "void";

tells Felix 'myvoid' isn't a first class type, but ptr[myvoid] is.
Necessary for C binding, eg:

        incomplete type X = "struct X";

where X isn't known.


> 6. Typeclass "virtual" really should be removed and replaced with just 
> the function definition :) If we ever do traditional class inheritance 
> though, we can add it back.

No, because a typeclass can have 'nonvirtual' functions too.
However the terminology is wrong if we unify classes/typeclasses/
modules .. in fact a Felix virtual function is like a template
whose instance is a specialisation.


> 7. I don't think "functor" and "inherit" are implemented yet. They could 
> be removed, and another check later could error out if you're using a 
> reserved word like these.

Inherit is used a lot! It's used in modules and typeclasses .. :)

Functor isn't implemented, but it needs to be reserved.


> 8. We have a lot of c wrapping keywords, "cclass", "cfun", "cparse", 
> "cproc", "cstruct", and "ctypes". Perhaps we could replace all of these 
> with just a prefix keyword like "cwrap" which you could use like "cwrap 
> class", "cwrap fun" and etc. I'm not crazy about that particular name 
> though.

extern "C"?

I agree completely on this idea. It's a mess. However they're NOT
all C wrapping functions.

        cproc -- GENERATES a C proc
        cclass -- binds to an existing C++ class (doesn't generate it)


In particular, given a C function .. there are several things
we could do with it (after C parsing it):

        1. emit declaration 
        2. emit definition 
        3. make Felix binding (emit nothing)
        4 = 1+binding
        5 = 2+binding
        6 = translate definition to Felix

A systematic way of specifying what you want to do with some
given C code would be cool. All the above assume we can
parse the C code (using CIL).

It's messy: Felix doesn't just bind to external C libraries,
it can also embed C, and it can generate C++ from Felix
code too.

in addition .. we can *export* Felix functions, which means
to generate a C wrapper -- similar to cfun/cproc, except the
latter are restricted to actually generating C-like functions
with the given interface (that is, no thread_frame, no gc, 
no display (environment)).

It's going to get worse before it gets better.. we also have

        callback ..

... :)


-- 
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