MoonScript v0.2.0

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.


  • , 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.
  • The body of a class can contain arbitrary expressions in addition to assigning properties. self 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.
  • Enhanced the super keyword in instance methods.
  • Bound methods can be created for an object by using object\function_name as a value. Called function stubs.
  • Added export * 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.
  • export 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.
  • Added ..= for string concatenation.
  • table.insert no longer used to build accumlated values in comprehensions.


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

The Tools

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.
  • 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.
  • Fixed parse issues with the shorthand values within a with 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.