This is a repost from a 
[reddit](http://www.reddit.com/r/programming/comments/9oe4c/what_open_source_projects_do_you_actively/c0dqs09)
 that's about why I find neat about felix. Maybe this will inspire someone to 
try it out some time :)

-------------------------

So felix has a couple nice things going for it. The main things I find 
interesting is the concurrency model, the dynamic syntax, the type system, c++ 
integration. That space is getting a bit busy, with 
[Scala](http://www.scala-lang.org/) probably being the closest relative, but I 
think there's still plenty of room for exploration.

My personal favorite thing is our concurrency model. Similar to 
[Erlang](http://www.erlang.org/) and [Scala](http://www.scala-lang.org/), we've 
got an actor-ish concurrency model with user space fibers that communicate 
through messages. We call them fthreads. It's a little lower level than those 
languages though, we only provide synchronous no-copy message passing. I'm 
planning on layering a mailbox layer on top of that to add asynchronous 
messaging though.

We've also got an aync io library that's intended to work seamlessly with 
fthreads. The intention is that you should be able to write standard blocking 
batch-style code and let the compiler/runtime convert your code into event 
driven code. We've got a prototype web server that's built on top of this, but 
haven't gotten too far with it yet though.

Next up our dynamic syntax. Felix's grammar is essentially defined at runtime. 
We have a basic shim grammar that lets us load up a grammar specification at 
runtime to parse the rest of the language. This then gets compiled in memory to 
scheme, which then gets compiled to the ast for code generation. The neat thing 
with this is that it allows you to have scoped syntax extensions. This could 
allow for a lot of neat lisp-style macro metaprogramming, or even theoretically 
allow you to write, say, a python-compatible grammar and let felix handle the 
rest of the language.

We've got a pretty advanced type system. It's a static language with support 
for both ad-hoc polymorphism and haskell-style typeclasses. Since the grammar's 
dynamic, we don't really have hardcoded concepts of types like ints. They're 
specified in the standard library. So that means we can't really have the 
compiler know that `1+0` can be optimized down to `1`. So we've got hooks in 
order to specify the reductions like this. Similarly, we tell the compiler 
axioms about types, like this type is symmetric, and that one is associative. 
This then can be outputted to the proof assistant generator 
[Why](http://why.lri.fr/index.en.html) in order to help prove things about your 
program, though I don't know too much about how that works.

Finally, the c++ integration. Our main backend is c++ source. This lets us 
directly support binding to c++ libraries without needing to write external 
shim bindings. For instance, we use this and typeclasses to directly expose a 
good portion of STL to felix. We'll see if I can figure out how to integrate 
this with my [LLVM](http://llvm.org/) backend though. Maybe once 
[Clang](http://clang.llvm.org/) gets c++ working we could somehow use that to 
generate the right code for us.

------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to