Pages
Definition
Blog
Cheat sheets
Screw long documentation, I’ll learn by example
Syntax
Alphabet
| Symbol | Meaning | Example |
|---|---|---|
| : | defines a |
a is an integera: int |
| = | defines a |
hostname is “google.com”hostname = google.com |
| / | defines paths, database names, table names, or partitions | objects inside storage db’s database my_db’s table messages with partition key request.date:db: storagedb/my_db/messages/ partition[messagedate_pkey: request.date] |
| () and . | parentheses define hierarchy, and dot is used to access it | |
| [] | brackets define complex types, or add meta-information to an object that they follow. Syntax: [modifierValue] [modifierType: modifierValue] [modifierType: modifierValue1, modifierValue2] modifierType[modifierValue] modifierType[modifierSubtype:modifierValue] |
#a is a stream of messages in json format. They are coming through a HTTP Websocket.> a: stream [format:json] source[http: websocket] |
| > < = | strict comparisons that define domain of values | age is a positive int age: int [a >= 0] |
| >~ <~ ~ ~= | fuzzy comparisons that define reasonable domain of values (typical values) | age is typically between 18 and 30 a: int [18 ~< a ~< 30] |
| ~~ | order of magnitude | size ~~ 10Gb |
| >–> <–< |
data flow arrows | a writes to storage b in batch a —-> b |
| _ | Meta-commands (include, import, …) | |
| ! | Deploy mode | |
| ^ | Version or version draft (=proposal) | |
| # | Docstring | |
| \ | Distribution | |
| “x” | treat x as a literal | |
| $x | treat x as a reference | |
| @t | at moment x | |
| x’ | change/new value of x |
modifierSubtype, modifierType, pieces of full object qualifier (. path, like a.b.c) can be omitted if
they can be resolved unambiguously. " and $ can be skipped as well. Values will be
Basic data types
int
-
B Billions -
M Millions -
K Thousands
float
str str.nonempty str.identifier (valid program variable name)
str.email str.password str.phone str.username
str.url str.hostname str.filename
str.json str.xml str.base64
blob blob.picture blob.sound blob.model
timestamp date datetime timespan
Basic units
| ms | milliseconds |
| s | seconds |
| m | minutes |
| h | hours |
| d | days |
| w | weeks |
| mon | months |
size b|byte Kb, Mb, Gb, Tb
Complex types
-
List[x],Map[x, y],Array[x]are complex data types. They wrap around x, adding extra properties to thefield_name(field_name.lenfor all complex types; andfield_name.keys/field_name.valuesforMap). embedded[SchemaName: fields1, fieldsN]includes part of another schema into that one. If no fields are specified, then all are used. Asterisk*in the field name is used as a placeholder. It define a place where the original variable’s name is placed (if there is no asterisk, embedded schema’s field names are appended to thefield_name).- For example,
user_*: Embedded[User: name, age]becomesuser_name: User.name,user_age: User.age
- For example,
enum[EnumName: value1, value2, ... valueN]defines enumEnumNamewith a list of possible values.
Modifiers
Modifiers supply with meta-information. They look like
modifierType[modifierSubtype: modifierValue]- or
modifierType[modifierSubtype: modifierValue, sub2: value2, sub3: value3a, value3b, value3c] - or
modifierType[modifierSubtype: value1, value2, value3]
- or
[modifierSubtype: modifierValue]- or
[modifierSubtype: value1, value2, value3]
- or
modifierType[modifierValue]- or
modifierType[value1, value2, value3]
- or
- or just
[modifierValue]
They go right after the object definition:
field_name: fieldtype [modifierSubtype: modifierValue]
or
appname: app [modifierSubtype: modifierValue] ( ... )
they often replace =. Example above can be rewritten as
appname: app (
modifierSubtype: modifierValue
...
)
Conditions
For each property, we may use modifiers to specify some conditions.
> < =, to specify valid ranges>~ ~< =~to specify typical ranges (reasonable bounds)~~to define order of magnitude or asymptotic line=or=~to define expected value or typical valuestart..,..end,start..endto define ranges, for example0..100%to specify divisibility. “a is ranges from 0 to 1000 with step 10” is written asa: int [0..1000, a % 10]len,start.. endwhen applied to strings, specify string length or substrings (which can then be used in conditions)
Template commands
_as: QWE; then _.x means QWE.x
_| resolved
_include: <localfile>
_import_FORMAT: git+<git url>/path^X. X branch or hash or release. FORMAT is lil, docker ,
docker-compose, …
_code: path/sourcefile.ext#Lnum [arg1: sourcearg1] [arg2: sourcearg2] [connclass: sourceclassname]
_uml (...) defines internal structure, class or activity diagrams in plant uml format.