Orb je jezik za programsko opremo, ki mora upoštevati pravila. Ti navedeš stanja in dogodke, prevajalnik zgradi aplikacijo ali pove, zakaj je ne more.
Program Orb opiše, kako se kos programske opreme obnaša: podatke, ki jih hrani, stanja, v katerih je lahko, dogodke, ki ga premikajo med njimi, in kaj prikaže v vsakem koraku. Pišeš ga v .lolo, majhnem zapisu v slogu Lispa. Prevajalnik ga preveri, nato ga neposredno zažene ali iz njega ustvari celotno aplikacijo.
Tu je celoten program. Teče na tej strani:
Counting
on Counter · states: 1 · transitions: 4Zgornji program kot avtomati stanj, eden za vsako lastnost: vsak okvir je stanje, vsaka puščica dogodek, ki ga premakne, ikone na puščici pa so učinki, ki jih ta dogodek izvede. ◇ na puščici je varovalo; z miško pojdite nanj in preberite pogoj. Kako brati AVL
1app std-orb-docex-counter "1.0.0"
2"std-orb-docex-counter — the smallest complete orbital: one entity, one trait with one state, three buttons and a closed circuit."
3orbital CounterOrbital {
4 entity Counter [runtime] {
5 id : string!
6 count : number = 0
7 }
8
9 trait Counting -> Counter [interaction, instance] {
10 initial: ready
11
12 state ready {
13 INIT -> ready
14 (render-ui main { type: stack, direction: horizontal, gap: md, align: center, children: [
15 { type: button, label: "−", action: DECREMENT, variant: secondary, aria-label: "Decrease" },
16 { type: typography, content: @entity.count, variant: h2 },
17 { type: button, label: "+", action: INCREMENT, variant: primary, aria-label: "Increase" },
18 { type: button, label: "Reset", action: RESET, variant: ghost }
19 ] })
20 INCREMENT -> ready
21 (emit MOVED { event: "INCREMENT" })
22 (set @entity.count (+ @entity.count 1))
23 DECREMENT -> ready
24 (emit MOVED { event: "DECREMENT" })
25 (set @entity.count (- @entity.count 1))
26 RESET -> ready
27 (emit MOVED { event: "RESET" })
28 (set @entity.count 0)
29 }
30
31 emits {
32 MOVED -> external {
33 event : string!
34 }
35 @description "Each move names the event it took, so the diagram beside the demo can follow it."
36 }
37 }
38
39 page "/counter" -> Counting
40}Kaj se zgodi, ko se sproži INCREMENT:
(set @entity.count (+ @entity.count 1))Vsak program Orb je sestavljen iz orbitalov. Orbital je zaključen kos vedenja:
Counter s poljem count);Counting);/counter).Orbital = Entity + Traits + Pages
Application = orbitals that talk to each other through eventsOrbitali nikoli ne segajo drug v drugega. Ena lastnost odda dogodek, druga ga posluša, prevajalnik pa preveri, da ima vsak oddani dogodek kam iti.
Vsaka interakcija sledi isti zanki:
Event → Guard → Transition → Effects → UI → EventPritisk na + pošlje INCREMENT. Lastnost je v stanju ready, ki ima prehod za INCREMENT, zato se izvede: njegov učinek (set @entity.count (+ @entity.count 1)) posodobi entiteto, zaslon, vezan na @entity.count, pa pokaže novo vrednost. Nov zaslon spet ponudi iste gumbe, zato se zanka sklene.
Prevajalnik zanko uveljavlja. Gumb, katerega dogodka ne obravnava nobeno stanje, stanje, ki ga ni mogoče zapustiti, dogodek, oddan nikomur, ali stran, ki ne prikaže ničesar, so napake pri orb validate, še preden karkoli teče.
Večina poslovne programske opreme so pravila: naročilo ne sme na pot pred plačilom, vračilo nad določenim zneskom potrebuje vodjo, na zahtevek je treba odgovoriti v enem dnevu. V običajni kodi so ta pravila razpršena po vmesniku, strežniku, bazi in testih, in se razhajajo.
V Orbu je pravilo oblika programa. Če iz stanja pending ni prehoda SHIP, neplačano naročilo ne more na pot, in to je preverjeno, ne upano. Ista datoteka je specifikacija, izvedba in vhod za preverjanje:
orb validate dokaže, da je program pravilno zgrajen (merilo je 0 napak in 0 opozoril);orb verify prehodi vsak prehod in preveri, da naredi, kar napoveduje;orb compile iz istega vira ustvari aplikacijo v TypeScriptu in drugih okoljih.Le redko sam napišeš vsak avtomat stanj. Standardna knjižnica prinaša na stotine vedenj (sezname, obrazce, čarovnike, nadzorne plošče, igre, učne pripomočke), ki jih uvoziš z uses in vežeš na svoje podatke. Obdržiš dele, ki so značilni za tvoje področje; ostalo ima knjižnica. Kako, pojasni sestavljanje.