Skip to content

Commit b72d0f7

Browse files
authored
Create Optimizations.md
1 parent 947771f commit b72d0f7

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

docs/Optimizations.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Optimizations
2+
3+
Expr has a bunch of optimization which will produce more optimal program during compile step.
4+
5+
## In array
6+
7+
```js
8+
value in ['foo', 'bar', 'baz']
9+
```
10+
11+
If expr finds an `in` or `not in` expression with an array, it will be transformed into:
12+
13+
```js
14+
value in {"foo": true, "bar": true, "baz": true}
15+
```
16+
17+
## Constant folding
18+
19+
Arithmetic expressions with constants is computed on compile step and replaced with result.
20+
21+
```js
22+
-(2-5)**3-2/(+4-3)+-2
23+
```
24+
25+
Will be compiled to just single number:
26+
27+
```js
28+
23
29+
```
30+
31+
So in expressions it's safe to use some arithmetics for better readability:
32+
33+
```js
34+
percentage > 0.3 * 100
35+
```
36+
37+
As it will be simpified to:
38+
39+
```js
40+
percentage > 30
41+
```
42+
43+
## In range
44+
45+
```js
46+
user.Age in 18..32
47+
```
48+
49+
Will be replaced with binary operator:
50+
51+
```js
52+
18 <= user.Age && user.Age <= 32
53+
```
54+
55+
`not in` operator will also work.
56+
57+
## Const range
58+
59+
```js
60+
1..10_000
61+
```
62+
63+
Ranges computed on compile stage, repleced with preallocated slices.

0 commit comments

Comments
 (0)