Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Expressions

Operations (Binary and Unary)

Higher precedences are executed first.

Supported Binary Operations (and Precedence):

OperationSymbolPrecedence
Multiply*80
Divide/80
Add+70
Subtract-70
Less or Equal<=60
Greater or Equal>=60
Less Than<50
Greater Than>50
Equal==40
Not Equal!=40
Not (Bool)!30
And (Bool)&&20
Or (Bool)||10

Supported Unary Operations:

OperationSymbol
Negative-<num>
Not!<bool>
Cast<type>'<expr>

Operations are only allowed between supported types. KSL may automatically promote expressions (ex. 12 + 300 will turn into i16) but it will not demote them, in order to set a variable to a value smaller than the type size in the resulting expression please downcast.

Other examples of expression promotion:

// Since we're working with an integer
// and a float, we promote to a float
float x = 10.0 + 5;
#![allow(unused)]
fn main() {
// Since we're working with an i8 (10)
// and an i16 (400) the expression is
// promoted to an i16, we can still assign
// the expression result to an i32 though
// because the variable storage type is
// larger. If `x` was an i8 it would cause
// an error.
i32 x = 10 + 400;
}

warning

Information and methodology about expression promotion is subject to change as we evaluate other type safety and memory safety strategies.

warning

Documentation incomplete, pulled from unfinished ksl/ksl_syntax.md file.