Update SPECIFICATION.MD
This commit is contained in:
parent
3ac54394de
commit
6c83ee3614
103
SPECIFICATION.MD
103
SPECIFICATION.MD
|
@ -174,12 +174,12 @@ So as you can see each type includes some extra information, its type, if it has
|
|||
|
||||
```
|
||||
frm «form_token» impls «this_form», «that_form» {
|
||||
version : [0, 0, 1] ! version number for auto saving to a database or whatnot
|
||||
migrate : <> ! this is to migrate from the previous version to new, in case of interface changes, or None
|
||||
dimensions : 0 ! this returns how many dimensions it can exist in, 0th means non drawable, 2 means 2D GUI usually, 3 means 3D object, and >3 is somthing you will have to implement yourself, e.g. miegakure
|
||||
unit : <> ! this is for the unit/measures system
|
||||
display : <> ! some kind of UI form or None
|
||||
position : <> ! a position in space or None
|
||||
version; ! version number for auto saving to a database or whatnot
|
||||
migrate; ! this is to migrate from the previous version to new, in case of interface changes, or None
|
||||
dimensions; ! this returns how many dimensions it can exist in, 0th means non drawable, 2 means 2D GUI usually, 3 means 3D object, and >3 is somthing you will have to implement yourself, e.g. miegakure
|
||||
unit; ! this is for the unit/measures system
|
||||
display; ! some kind of UI form or None
|
||||
position; ! a position in space or None
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -209,37 +209,6 @@ matching `""` for string
|
|||
|
||||
strings are always utf8, other formats will need to be done manually
|
||||
|
||||
## measurement
|
||||
|
||||
- forms
|
||||
- time
|
||||
- unit
|
||||
- seconds (s)
|
||||
- subforms
|
||||
- date
|
||||
- Default is ISO 8601
|
||||
- length
|
||||
- unit
|
||||
- metre (m)
|
||||
- subforms
|
||||
- angle
|
||||
- radian (rad)
|
||||
- mass
|
||||
- unit
|
||||
- kilogram (kg)
|
||||
- electric current
|
||||
- unit
|
||||
- ampere (a)
|
||||
- temperature
|
||||
- unit
|
||||
- kelvin (K)
|
||||
- amount of substance
|
||||
- unit
|
||||
- mol (mol)
|
||||
- luminous intensity
|
||||
- unit
|
||||
- candela (candela)
|
||||
|
||||
## logical
|
||||
|
||||
`bool`
|
||||
|
@ -250,38 +219,33 @@ Also follows the style boolean 'c' rules of nonzero / zero, but the interpreter
|
|||
|
||||
## null values
|
||||
|
||||
### *zwl* does not have null, it stole some monads from Rust, Haskell, and the like
|
||||
*zwl* does not have null, because each value can have an error on it.
|
||||
|
||||
If you are coming from haskell, a 'Just' is `< some value >` and a 'None' is `<>`, note 'None' is also an error
|
||||
error is a form which describes an error that occurred, it is similar to the Go programming language and is returned as a monad like the maybe monad above and is unwrapped in a similar way, take a look at the tunnel section for an example
|
||||
|
||||
Like in Rust you have `unwrap` and `unwrap_or` and the like, you use `?` and `??`
|
||||
|
||||
```
|
||||
1| i32 a = <3>; ! this can also be writen `i32 a = just(3);`
|
||||
2| i32 b = <>; ! this can also be written `i32 b = none;`
|
||||
1| i32 a = 3; ! this would be similar to the follwing in Rust: `let a: Result<i32, &'static str> = Ok(3);`
|
||||
2| i32 b; ! or like in Rust: `let b: Result<i32, &'static str>;`
|
||||
3|
|
||||
4| i32 x ?= a; ! this will set x to 3
|
||||
5| i32 y ?= b; ! this will set y to an error
|
||||
6| i32 z ?= b ?= 1; ! this will return an error from b, then unwrap the error and set y = 1;
|
||||
4| i32 x = a; ! this will set x to 3
|
||||
5| i32 y = b; ! this will set the error part of y to an undefined error because we tried setting a undefined variable to another variable, imagine in Rust: `let y: Result<i32, &'static str> = Err("undefined");`
|
||||
6| i32 z = b ? 1; ! this will check if b has an error and since it does it will set y = 1;
|
||||
7|
|
||||
8| print("$x $y $z\n") ! prints 3, "error: failed to unwrap a 'none' on line 5", 1
|
||||
```
|
||||
|
||||
additionally, a None will be evaluated as "false" and Just as "true" in a boolean check
|
||||
|
||||
## error
|
||||
|
||||
error is a form which describes an error that occurred, it is similar to the Go programming language and is returned as a monad like the maybe monad above and is unwrapped in a similar way, take a look at the tunnel section for an example
|
||||
additionally, if a value has an error it will evaluate as "false" and Just as "true" in a boolean check, unless you are explicitly checking for an error
|
||||
|
||||
### panic
|
||||
|
||||
calling panic on a variable that has an error will halt execution of the node that is running.
|
||||
|
||||
```
|
||||
i32 n = <>; ! this can also be written `i32 b = none;`
|
||||
i32 e ?= n; ! this will be an error
|
||||
if (e.err) { ! since the 'none' error is zero this will only branch if an error exists on the variable
|
||||
panic(e);
|
||||
i32 n;
|
||||
i32 e = n; ! this will set e's error that we tried setting n to undefined.
|
||||
err (e) { ! we can check if there is an error by using the `err` keyword in the same way as an `if`
|
||||
panic(e); ! panic will halt exectution of the task and pass a message what the error was to all the other tasks listening.
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -591,3 +555,34 @@ test some_test {
|
|||
|
||||
```
|
||||
|
||||
## Measurement
|
||||
|
||||
- forms
|
||||
- time
|
||||
- unit
|
||||
- seconds (s)
|
||||
- subforms
|
||||
- date
|
||||
- Default is ISO 8601
|
||||
- length
|
||||
- unit
|
||||
- metre (m)
|
||||
- subforms
|
||||
- angle
|
||||
- radian (rad)
|
||||
- mass
|
||||
- unit
|
||||
- kilogram (kg)
|
||||
- electric current
|
||||
- unit
|
||||
- ampere (a)
|
||||
- temperature
|
||||
- unit
|
||||
- kelvin (K)
|
||||
- amount of substance
|
||||
- unit
|
||||
- mol (mol)
|
||||
- luminous intensity
|
||||
- unit
|
||||
- candela (candela)
|
||||
|
||||
|
|
Loading…
Reference in New Issue