Krishna Srinivasan wrote:
>  >> PS - I have this habit of calling my files
>  >> 1hello.x 2hello.x....when I try examples with
>  >
>  > Oh thats interesting! I have no idea what will happen if you do that :)
>  > I'll have to check that out. I also don't know what felix thinks of
>
>
> I am sorry..I actually saved that as 1hello.flx,
> 2hello.flx...etc. (not *.x but *.flx).
> But the error part is still the same - I think
>
> Here is the terminal output :
>
> [snip]

Looks like it's the felix-to-c++ name mangler isn't handling illegal 
first characters. Shouldn't be too hard to fix.

>  > Glad to hear it. Felix changes *a lot*, and so the next release could
>  > change dramatically from the last. So, if you have any complaints,
>  > please let us know!
>
> Now that you ask....:
>
> I was reading the old archive messages and looks like
> a lot of work is done to get felix to the c++ folks.
>
> On the other hand, felix looks/feels like python in
> most of the respects.
>
> So I wonder why not take that a few more steps and make it
> as close to python as possible ? (atleast a subset
> of python).
>
> [I understand if the whitespace and colon-newline-delimiters
> and other stuff are not carried forward - but a lot of other
> syntactical parts]

Well, we actually have a case-insensitive prototype extension. I'm not 
sure if it's currently working in svn, but I think you can do something 
like this:

fun foo (x:int) $$
  print "hello"
  endl
;

I've never tried it myself though. I'm also not sure if we're going to 
keep it.

> Ocaml has this very nice camlp4 [preprocessor pretty printer].
> I was initially planning on using this to translate a subset
> of python to ocaml. How hard would it be to make felix
> do that kind of language/syntax modification easy ???

Ha! Our language modification kicks ass pretty much everyone's ass. 
Seriously kicks ass. Skaller's putting the final touches on it. 
Basically, the entire felix language is a language extension. We use a 
GLR parser to convert the felix language into scheme s-expressions, 
which is then converted to an AST. This means that fundamentally the 
core language is really tiny, and everything else can be done on top. 
This also means that you can have scoped local syntax enhancements. I'm 
not sure if anyone else other than lisp/scheme are really capable of 
this. It will be really interesting with what people will come up with.

> Also, when/if you can, please point me to docs that
> say about :
> 1. how to create runnable binaries
> (so I can do ./hello)

You can find the command help in the man pages, which are also online here:

http://felix.sourceforge.net/doc/htmlman/felix_1.html

To generate a binary, just do:

flx --static hello.flx

> 2. What do all those files ? (when I do a flx hello.flx)

Sigh. Someday I'd like to fold all of these into one file, or at least a 
directory. Anyway:

.cpp, .hpp:
felix generates c++ file as it's assembly language, so these are the 
documents.

.why:
another one of the interesting prototype. Why is a generator for various 
automated proof solvers. See here for more info: 
http://why.lri.fr/index.en.html

.par:
a cache of the parsed felix code

.resh:
what packages this felix code depends on

.rtti:
runtime type info about the felix datatypes for the garbage collector (I 
believe)

> 3. Any design info/notes as to why there is a val and var
> and why there is a proc and fun.

val (values):
http://felix.sourceforge.net/doc/tutorial/introduction/en_flx_tutorial_0005.html

var (variables):
http://felix.sourceforge.net/doc/tutorial/introduction/en_flx_tutorial_0006.html

Values and variables are similar. The difference is that variables can 
be changed, while values cannot. There are a couple advantages to this 
than just having everything writable, such as in c and python. The main 
ones are that code is much more understandable if you use values instead 
of variables since values can't be modified, and we can do more 
optimizations with values than we can with variables.

proc (procedures):
http://felix.sourceforge.net/doc/tutorial/introduction/en_flx_tutorial_0011.html

fun (functions):
http://felix.sourceforge.net/doc/tutorial/introduction/en_flx_tutorial_0009.html

Felix functions are functional. Functions return data, and aren't 
allowed to have side effects (although this isn't enforced yet). 
Procedures are the inverse. They can have side effects but can't return 
data. There's also one other construct like this called gen (or 
generator). They're functions but they can have side effects. Basically, 
the compiler reserves the right to move around, duplicate, remove, or 
reduce functions. For instance, say you have this:

fun foo() = {
  print "foo"; endl;
  return 0;
}

proc bar() {
  val x = foo();
  print "bar"; endl;
}

bar();


Because we never actually use "x" in bar, the compiler has the right to 
actually elide the call to foo. So, "foo" may never get printed out. 
However, procedures and generators are guaranteed to be called.

> I also just found a ton of example programs in bagley directory,
> they are very useful as well. Will check that out.

If you want to check out some more programs, try 
build/tools/flx_pkgconfig.flx, build/tools/webserver.flx, or the demos 
in build/demos/sdl.

-e

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