Comefrom0x10

Comefrom0x10 (pronounced "come from sixteen", often abbreviated Cf0x10) is a language based on having only one flow control control statement, the  statement.

Cf0x10 is higher-level than most languages with equivalent flow-control constructs such as ComeFrom2, Come Here and recent Intercal implementations: it introduces structured programming to the comefrom paradigm.

The reference implementation for Cf0x10 was started in October 2016 and released in July 2017.

Syntax
Cf0x10 syntactically looks similar to many modern languages. Number and string literals, for example, behave as most people would expect. Numbers are decimal floating point:

3 3.1459 "A string" 'Another string'

Unlike other esolangs, however, such as Bash, single and double quotes are interchangeable.

Line comments begin with a mesh character. There is no syntax for block comments. Because of the semantics of  jumps, placement of blank lines and comments in Cf0x10 programs is often crucial:


 * 1) a comment

Cf0x10 uses named identifiers. An equals sign denotes assignment:

foo = "bar"

Identifiers must begin with an ASCII letter and may contain digits or underscores, but no uppercase letters, as those are reserved for future use. Idiomatic Cf0x10 uses.

Comefrom0x10 is procedural and line-oriented. Indentation (spaces only) denotes scope:

alice joe = 'me' joe # 'me'

joe # undefined

Space is the string concatenation operator, so these are equivalent:

'Hello ' 'world' 'Hello world'

Space is a true operator, as in CSS, not resolved at compile time as in C or Python, so this is also equivalent:

who = 'world' 'Hello ' who

Types
Comefrom0x10 has two data types, strings and numbers, plus one meta-type. Cf0x10 is strongishly-typed in that some operators coerce operands to sensible values, but nonsensical operations return.

'Hello ' 3.14159 # equivalent to "Hello 3.14259" 'Hello ' + 'world' # undefined

There is a proposal to add lists as a first-class type, but contemporary Cf0x10 programs generally emulate lists by using strings.

Input and output
Comefrom0x10 prints any expression not captured by assignment to standard output, similar to output in PowerShell. All statements in Cf0x10 are expressions, but an expression that results in  prints nothing. The Hello World program, thus, is trivial:

'Hello, world!'

In the reference implementation, input may come from typical sources:


 * Command line arguments
 * Standard input
 * Files

Input is not a first-class language feature: it is achieved by libraries, such as the standard library built in to the Python reference implementation, which includes bindings so Cf0x10 programs may be embedded in Python applications and vice versa.

A Cat program may be written thus:

comefrom if stdin stdin stdin = ''

Comefrom
The  statement is Cf0x10's only flow-control statement. It comes in the bare form:

comefrom

And the qualified form:

comefrom foo

In the qualified form, jumps are only eligible from the named block, that is, the program can only jump to  from the block named.

Comefrom statements may also be conditional:

comefrom if bar

The  above may receive a jump only if the value of the variable   is truthy. The expression in a conditional comefrom may be any Cf0x10 type; coercion follows the usual rules, such as empty string being falsy.

It is allowed, and common, to combine qualified and conditional  statements, as demonstrated in this Factorial program:

n = 5 acc = 1

factorial comefrom

comefrom accumulate if n is 0

accumulate comefrom factorial acc = acc * n n = n - 1

acc

Comefrom0x10 program may jump when they encounter either a blank line or an assignment, though the semantics differ. Conditional comefroms are eligible targets of assignment only if the assignment changes the value of a variable referenced by the  clause.

Multiple eligible comefroms are not an error: Cf0x10 provides a well-defined order for where flow control continues, analogous to how comefroms are resolved in popular pub-sub frameworks:


 * 1) Blank lines yield to any comefrom statement in inverted lexical scope
 * 2) When more than one comefrom is an eligible jump target in a single scope, the last wins, in source-code order
 * 3) Execution jumps to the current scope after jumping to eligible comefrom statements in nested scopes
 * 4) Nested-scope comefrom statements execute depth-first, as seen in source code indentation, where blocks that are first in the source are executed first

The documentation claims that, while perhaps confusing at first, this ordering leads to the most intuitive comefrom resolution in real programs.

Implementation
The Python reference implementation is the only known Cf0x10 interpreter. As it includes a test suite defined largely in YAML, it is widely anticipated that more implementations will soon follow.