Syntax

Comefrom0x10 is line-oriented. Every line is a single statement and in fact, you can’t escape the newline at the end of a line or do any line continuation at all because that usually makes code harder to read.

Blocks in cf0x10 are defined by indentation and create new lexical scopes. They look similar to functions in other languages, but they are not actually functions since they do not take arguments or return values:

block_name
   statements

Blank lines are significant, as yield points for jumps, except when they immediately follow blocks.

Comments are significant, not for content, but because they can change what counts as a blank line. Comments begin with a mesh character and continue until the end of the line:

# this is a comment

If there are no top-level statements in a program, execution begins at the first block, in source-code order. If there are top-level statements execution begins at the first top-level statement.

Source code is always read as UTF-8.

Identifiers

Only lowercase ASCII letters, digits and underscore are allowed in identifiers, because uppercase is reserved for future use. Identifiers cannot start with a digit.

Numbers

Number literals are always American-style decimal format, that is, with a full stop to separate the fractional part:

1.5

There is no syntax for octal, hex, or other such nonsense. This is a high-level language after all.

Strings

Both single and double quotes are allowed in string literals. There is no difference, but idiomatic Cf0x10 tends to use single quotes, as they are easier to type:

"A string"
'A string'

Backtick is the escape character:

'`n is a newline'
"`" is a literal double-quote"

Only `n is a valid escape sequence. No others, such as `t or Unicode escapes are implemented in the current parser, though Unicode literals are allowed. Just write UTF-8 source files.

Operators

In order of precedence [1]

Operator Meaning
( Grouping
* Multiplication
/ Division
+ Addition
- Subtraction
<space> Concatenation
< Less than
> Greater than
is Equals (comparison)
= Assignment
... Continues (no newline between output)

Conspicous by their absence are the boolean operators and, or and not. These can easily be simulated by other constructions within the language [2] and their inclusion would tempt program authors to write complicated, unreadable boolean expressions.

Keywords

Keyword Meaning
die Crash and burn. Intended for debugging. Cf0x10 is nothing if not pragmatic.
comefrom The control flow statement to rule them all
if Introduce a condition to limit, valid in comefrom if and die if.
[1]Except where there are ties
[2]For weak values of “easy”