lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


therandthem wrote:
I would like to implement JavaScript over Lua.  This
will be the full ECMA-262 specification with the
ECMA-357 E4X XML entension.  Rather than create a
traditional interpreter I will to use Lua to create a
domain specific language (DSL) if that is possible.

One method is Logix found at http://livelogix.net/. Is the Logix approach, which runs on Python, necessary
in Lua?  Does Lua's meta-mechanisms make this easier
than the Logix approach?

I am posting this because I do not have enough
experience to do this very quickly on my own.  If
others would like to work on this, please let me know.

Here is my reasoning and motivation:
  -The Lua language engine is very fast and it will
get faster.  A co-worker recently commented, "Ruby is
slow because it is interpreted."  I replied, "No, it
is slow because it has a slow interpreter."
  -Because Lua is fast it is a good candidate to use
as a base for other (existing even) languages.  Lua is
not Object Orientated so there is no awkward object
model to object model translation.
  -JavaScript will always be with us.  The Rhino and
Spidermonkey engines are not fast.  When one needs to
use JavaScript one should have fast JavaScript.
  -Lua can do prototypes.

So, that's it.  My ultimate hope is that a clear way
to create DSLs in Lua will result from this effort. If it does then I will move on to implement a DSL for
PHP.  The ultimate goal is that any language with a
slow interpreter can be recreated as a DSL over Lua.

I am doing precisely this. My project is called Emma3D (http://www.emma3d.org) and you can download the code base right now. The Javascript piece is in its infancy though so I don't think it will be much use to you yet. Our team is small and so there is no telling how long before we have a full Javascript interpreter.

So far I have a set of Javascript compliant object (Object, Array and Math, still working on Date) as well as an object model that allows these sorts of objects to be written in C++ or Lua with a full set of Lua interface classes in C++. Currently this is all wrapped up in the Emma3D engine, which runs its own Lua interpreter. But I am just finishing up the work to split out the object oriented piece into a separate library called Fusion. Fusion gets delivered as a dll (on Win32), is built with 5.1-alpha and is compliant with the 5.1 packaging model.

With Fusion you can go:

    require "fusion"
    local a = Array()
    a[0] = 1
    a[1] = "hello"
    print(a:join("--")

and so on. I will be making this available as source and binaries for Win32 within the next few weeks. We will also be porting to Linux and MacOSX, but haven't had the time for that yet.

I am also writing a Javascript to Lua translator, based on a Bison grammar file, which will translate the JS source into Lua source, then that will be compiled. I don't plan on implementing the entire ECMAScript 3 spec. There are a few things that are problematic. For instance:

- the with statement
- exception processing
- regexp constants

I will also be using a modified Lua interpreter. Most Javascript constructs, other than the ones I mentioned above, have simple translations to Lua. But some, like continue, would be really hard to do. So I will use the existing continue patch, as well as another patch that I uploaded to handle issues with the comparison operators.

Finally, the Lua ':' semantics are problematic from a Javascript standpoint. I am looking into this right now. I may end up having to add a bit of syntax to Lua and marking "member" functions that need to implicitly push a self pointer. I haven't figured it out yet, but hopefully it will be tractable.

Anyway, my work is probably too early to be of use to you. I just wanted to let you know that this work is available and to give you a heads up about the pitfalls!

--
chris marrin                ,""$,
chris@marrin.com          b`    $                             ,,.
                        mP     b'                            , 1$'
        ,.`           ,b`    ,`                              :$$'
     ,|`             mP    ,`                                       ,mm
   ,b"              b"   ,`            ,mm      m$$    ,m         ,`P$$
  m$`             ,b`  .` ,mm        ,'|$P   ,|"1$`  ,b$P       ,`  :$1
 b$`             ,$: :,`` |$$      ,`   $$` ,|` ,$$,,`"$$     .`    :$|
b$|            _m$`,:`    :$1   ,`     ,$Pm|`    `    :$$,..;"'     |$:
P$b,      _;b$$b$1"       |$$ ,`      ,$$"             ``'          $$
 ```"```'"    `"`         `""`        ""`                          ,P`
"As a general rule,don't solve puzzles that open portals to Hell"'