Files
wren/doc/site/syntax.markdown
2014-02-16 11:28:56 -06:00

2.7 KiB

^title Syntax

Wren's syntax is designed to be familiar to people coming from C-like languages while being as simple and expressive as possible within that framework.

Scripts are stored in plain text files with a .wren file extension. Wren does not compile ahead of time: programs are run directly from source, from top to bottom like a typical scripting language. (Internally, programs are compiled to bytecode for efficiency, but that's an implementation detail).

Comments

Line comments start with // and end at the end of the line:

:::dart
// This is a comment.

Block comments start with /* and end with */. They can span multiple lines or be within a single one. Unlike C, block comments can nest in Wren:

:::dart
/* This is /* a nested */ comment. */

Reserved Words

Some people like to see all of the reserved words in a programming language in one lump. If you're one of those folks, here you go:

:::dart
break class else false fn for if in is
null return static this true var while

Statement terminators

Officially, statements are terminated by a semicolon (;) like in other languages in the C tradition. However, Wren treats newlines as equivalent to a semicolon whenever it makes sense. In practice, this means you almost never write ; unless you want to cram a bunch of statements on one line.

:::dart
// Two statements:
IO.write("hi")
IO.write("bye")

Sometimes, though, a statement doesn't fit on a single line and treating the newline as a semicolon would trip things up. To handle that, Wren has a very simple rule. It ignores a newline following any token that can't end a statement. Specifically, that means any of these:

:::dart
( [ { . , * / % + - | || & && ! ~ = < > <= >= == !=
class else if is static var while

Everywhere else, a newline is treated just like a ;. Note that this is a very different system from how JavaScript handles semicolons. If you've been burned there, don't worry, you should be fine here.

Names

Identifiers are similar to other programming languages. They start with a letter or underscore and may contain letters, digits, and underscores. Case is sensitive.

:::dart
hi
camelCase
PascalCase
_under_score
abc123
ALL_CAPS

Identifiers that start with underscore (_) are special in Wren. They are used to indicate fields in classes.

*TODO: Move this somewhere else:

The is operator

The is keyword can be used as an infix operator in expression. It performs a type test. The left operand is an object and the right operand is a class. It evaluates to true if the object is an instance of the class (or one of its subclasses).

TODO: blocks, assignment, maps