Exactly 3 months ago I released MoonScript. The CoffeeScript inspired language that compiles to Lua. Since then I've both written a lot of MoonScript and enhanced the MoonScript compiler.

Today I'm proud to release v0.2.0. I've got a handful of new features and bug fixes:

Thanks for checking it out, follow me on twitter for updates or complaints.

Changes

, is used instead of : for delimiting table slice parts.

is used instead of for delimiting table slice parts. Class objects store the metatable of their instances in __base . __base is also used in inheritance when chaining metatables.

New Things

The Language

Added key-value table comprehensions.

Added a switch statement.

statement. The body of a class can contain arbitrary expressions in addition to assigning properties. self in this scope refers to the class itself.

in this scope refers to the class itself. Class objects themselves support accessing the properties of the superclass they extend (like instances).

Class objects store their name as a string in the __name property.

property. Enhanced the super keyword in instance methods.

keyword in instance methods. Bound methods can be created for an object by using object\function_name as a value. Called function stubs.

as a value. Called function stubs. Added export * statement to export all assigned names following the statement.

statement to export all assigned names following the statement. Added export ^ statement to export all assigning names that begin with a capital letter following the statement.

statement to export all assigning names that begin with a capital letter following the statement. export can be used before any assignment or class declaration to export just that assignment (or class declaration).

can be used before any assignment or class declaration to export just that assignment (or class declaration). Argument lists can be broken up over several lines with trailing comma.

:hello is short hand for hello: hello inside of table literal.

is short hand for inside of table literal. Added ..= for string concatenation.

for string concatenation. table.insert no longer used to build accumlated values in comprehensions.

The API

Added loadfile , loadstring , and dofile functions to moonscript module to load/run MoonScript code.

, , and functions to module to load/run MoonScript code. Added to_lua function to moonscript module to convert a MoonScript code string to Lua string.

Standard Library

I'm now including a small set of useful functions in a single module called moon :

require "moon"

Documentation is available here.

Bug Fixes

Windows line endings don’t break the parser.

Fixed issues when using ... within comprehensions when the compiled code uses an intermediate function in the output.

within comprehensions when the compiled code uses an intermediate function in the output. Names whose first characters happen to be a keyword don’t break parser.

Return statement can have no arguments

argument names prefixed with @ in function definitions work outside of classes work with default values.

in function definitions work outside of classes work with default values. Fixed parse issues with the shorthand values within a with block.

block. Numerous other small fixes. See commit log.

Other Stuff

Since the first release, I've written one other project in MoonScript (other than the compiler). It’s a static site generator called sitegen. It’s what I now use to generate all of my project pages and this blog.