The simple type unification algorithm suffered from some serious performance and memory problems when used with certain code bases. This adds some crucial optimizations that improve performance drastically.
53 lines
855 B
Plaintext
53 lines
855 B
Plaintext
# state machine that previously experienced unusable slow type unification
|
|
import "world"
|
|
|
|
$ns = "estate"
|
|
$exchanged = world.kvlookup($ns)
|
|
$state = maplookup($exchanged, $hostname, "default")
|
|
|
|
if $state == "one" || $state == "default" {
|
|
|
|
file "/tmp/mgmt/state" {
|
|
content => "state: one\n",
|
|
}
|
|
|
|
exec "timer" {
|
|
cmd => "/usr/bin/sleep 1s",
|
|
}
|
|
kv "${ns}" {
|
|
key => $ns,
|
|
value => "two",
|
|
}
|
|
Exec["timer"] -> Kv["${ns}"]
|
|
}
|
|
if $state == "two" {
|
|
|
|
file "/tmp/mgmt/state" {
|
|
content => "state: two\n",
|
|
}
|
|
|
|
exec "timer" {
|
|
cmd => "/usr/bin/sleep 1s",
|
|
}
|
|
kv "${ns}" {
|
|
key => $ns,
|
|
value => "three",
|
|
}
|
|
Exec["timer"] -> Kv["${ns}"]
|
|
}
|
|
if $state == "three" {
|
|
|
|
file "/tmp/mgmt/state" {
|
|
content => "state: three\n",
|
|
}
|
|
|
|
exec "timer" {
|
|
cmd => "/usr/bin/sleep 1s",
|
|
}
|
|
kv "${ns}" {
|
|
key => $ns,
|
|
value => "one",
|
|
}
|
|
Exec["timer"] -> Kv["${ns}"]
|
|
}
|