summaryrefslogtreecommitdiff
path: root/docs/00.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/00.md')
-rw-r--r--docs/00.md50
1 files changed, 50 insertions, 0 deletions
diff --git a/docs/00.md b/docs/00.md
new file mode 100644
index 0000000..e4e8d41
--- /dev/null
+++ b/docs/00.md
@@ -0,0 +1,50 @@
+## Declarations in toc
+
+Declarations have the following syntax:
+```
+<name> : [type] [= expression];
+```
+
+The square brackets (`[]`) indicate something optional.
+
+All of the following statements
+declare an new variable `x` which is an integer, and has a value of 0:
+```
+x : int;
+x : int = 0;
+x := 0;
+```
+Note that in the first of those statements, although no expression
+is specified, it defaults to 0. This is not true in C,
+and there will eventually probably be an option to
+leave `x` uninitialized.
+
+If you wanted x to be a floating-point number, you could use:
+```
+x : float;
+x : float = 0;
+x := 0.0;
+```
+
+Note that `0` can be used as both a `float` and an `int`eger, but
+when no type is specified, it defaults to an `int`, whereas `0.0`
+defaults to a `float`.
+
+Here are all of toc's builtin types and their ranges of values:
+
+- `int` - A 64-bit signed integer (always), -9223372036854775808 to 9223372036854775807
+- `i8` - An 8-bit signed integer, -128 to 128
+- `i16` - 16-bit signed integer, -32768 to 32767
+- `i32` - 32-bit signed integer, -2147483648 to 2147483647
+- `i64` - 64-bit signed integer (same as `int`, but more explicit about the size), -9223372036854775808 to 9223372036854775807
+- `u8` - An 8-bit unsigned integer, 0 to 255
+- `u16` - 16-bit unsigned integer, 0 to 65535
+- `u32` - 32-bit unsigned integer, 0 to 4294967295
+- `u64` - 64-bit unsigned integer, 0 to 18446744073709551615
+- `float` - A 32-bit floating-point number,
+- `f32`
+- `f64`
+- `bool`
+- `char`
+
+At the moment, it is not technically guaranteed that `f32`/`float` is actually 32-bit and that `f64` is actually 64-bit; they are platform dependent. Perhaps someday there will be a version of toc which does not compile to C, where that could be guaranteed.