Kera ir nuleidimo darbas

Deterministinis žeminimas, tikslinės architektūros nuosavybė ir įrodymai, kad skaičiavimas išlieka identiškas visoje aparatinėje įrangoje.

Kera ir nuleidimo darbas

Klaidos pranešimas, kuris nebuvo klaida

Istorija paprastai prasideda skaičiumi, kuris yra beveik teisingas. Ne visiškai klaidingas. Ne toks, dėl kurio valdymo skydelis paraustų. Beveik teisingas brangiuoju būdu: tokia klaida, dėl kurios viena komanda gali pristatyti produktą, kita dvejoja, o auditorius klausia, kodėl atsakymas pasikeitė, kai tas pats modelis buvo perkeltas iš vienos mašinos į kitą.

Vienas buildas paleidžiamas x86 serveryje ir pateikia reikšmę. Kitas buildas paleidžiamas ARM nešiojamajame kompiuteryje ir pateikia reikšmę, pakankamai artimą, kad demo išliktų. GPU kelias yra greitesnis, bet skaičiavimus apvalina kitaip. FPGA kelias vilioja dėl laiko charakteristikų, bet staiga programinės įrangos komanda imasi kalbėti apie aparatinę įrangą. Kiekvienas gali paaiškinti mažą skirtumo dalį. Niekas nevaldo viso kelio nuo šaltinio iki rezultato.

Būtent šiai erdvei sukurtas Kera. Ne modelio idėjai, ne rinkodaros skaidrei, ne straipsniui apie būsimą kompiliatorių, o kompiliatoriaus darbui, kuris prasideda, kai komanda nusprendžia, kad tas pats skaičiavimas turi veikti skirtingose mašinose ir vis tiek reikšti tą patį. Šis įsipareigojimas turi turėti savininką. Kompiliatoriaus pažadas nėra tai, kad žemyninimas yra elegantiškas. Pažadas yra tai, kad žemyninimas yra traktuojamas kaip darbas.

Žemyninimas yra ta kompiliatoriaus dalis, kurioje graži kalbos intencija tampa instrukcijomis, kurias gali vykdyti tikslas. Tai taip pat vieta, kur neaiškūs teiginiai tampa matomi. Jei rezultatas turi būti bitas į bitą identiškas CPU, GPU, FPGA ir WebAssembly platformose, kompiliatorius negali numoti ranka į tikslų skirtumus. Jis turi nešti pakankamai struktūros, kad nuspręstų, kas gali keistis, o kas neturi keistis. Jis turi žinoti atminties erdves, efektus, opkodus, duomenų judėjimą, tikslų apribojimus ir kvitus, įrodančius, kad du buildai yra tas pats skaičiavimas.

Viliojanti istorijos versija yra vadinti tai perkeliamumo sluoksniu. Tai per maža. Perkeliamumas reiškia, kad programa veikia kitur. Kera siekia sudėtingesnio teiginio: programa yra pateikiama kaip turinio adresuojamas grafas, sukompiliuojama į .keg artefaktą, žemyninama į kelis backendus ir vis tiek pateikia tą patį atsakymą. Virtuvė keičiasi. Receptas ne.

Vidurys, kurio niekas nenori parduoti

Pirmas pokalbis su rimtu pirkėju retai prasideda nuo sintaksės. Jis prasideda nuo netvarkos. Yra modelis, kuris svarbus. Yra simuliacija, kuri anksčiau buvo moksliniai tyrimai, o dabar tapo operacine. Yra rizikos skaičiavimas, kurio rezultatui nebegalima leisti keistis priklausomai nuo mašinos. Yra krašto diegimas, kuris negali nešti viso debesies vykdymo laiko. Yra komanda, kuri nori greitintuvo, bet negali sau leisti perrašyti visko kiekvieną kartą, kai greitintuvas pasikeičia.

Dauguma įrankių tai pateikia kaip diegimo problemą. Pasirinkite tikslą, eksportuokite modelį, pataisykite vykdymo laiką, priimkite tam tikrą nuokrypį, tada parašykite dokumentą, paaiškinantį išimtis. Dokumentas auga. Testų matrica auga. Specialistų skaičius auga. Galiausiai organizacija moka už nevienalytiškumą du kartus: vieną kartą pirkdama aparatinę įrangą, antrą kartą bandydama įrodyti, kad aparatinė įranga atliko tą patį darbą.

Kera pradeda iš priešingo galo. Kera puslapyje tai vadinama statiškai tipizuota sistemų kalba su grafui natūraliu, turinio adresuojamu IR. Ši frazė svarbi, nes grafas nėra dekoratyvi kompiliatoriaus diagrama. Tai vykdomasis objektas. Šaltinio kodas žemyninamas į nukreiptus aciklinius operacijų grafus, saugomus kaip .keg failai. Kiekvienas mazgas turi apibrėžtą struktūrą. Dublikatai gali būti pašalinti struktūriškai. Tas pats grafas gali būti žemyninamas į CPU, GPU, FPGA ir WASM nelaikant kiekvieno tikslo atskira maža visata.

Todėl Kera turi elgtis kaip rimta kompiliatoriaus infrastruktūra, o ne kaip diagrama. Ne patogi vidurio zona yra ten, kur gyvena klientas. Tokenizacija turi išsaugoti baitų pozicijas. Analizė turi maitinti ir įrankius, ir kompiliaciją. Tipų tikrinimas turi atmesti formos ir briaunų neatitikimus, kol jie dar netapo vykdymo įvykiais. Skolinimosi tikrinimas turi suprasti nuosavybę visoje pagrindinėje, įrenginio, pritvirtintoje ir vieningoje atmintyje. Optimizavimas turi būti pakartojamas. Serializavimas turi suteikti organizacijai artefaktą, kurį galima išsaugoti.

Nė vienas iš to neskamba kaip įspūdinga antraštė. Tai daug naudingiau nei antraštė. Tai reiškia, kad kai darbo krūvis perkeliamas iš kūrimo į gamybą arba iš CPU pradinės konfigūracijos į GPU kelią, kompiliatorius turi stabilų dalyką, su kuriuo gali palyginti: grafiko atspaudą. Jei atspaudas sutampa, darbas yra tas pats darbas. Tai bendras kontrolės taškas, kurį gali suprasti ir inžinierius, ir pirkėjas, ir auditorius.

Grafikas yra kvitas, o ne paveikslėlis

Senas būdas paaiškinti programą yra parodyti šaltinį ir paprašyti skaitytojo pasitikėti kompiliatoriumi. Kera puslapis nuolat grįžta prie kito objekto: grafiko. Kiekviena operacija yra mazgas. Briaunos išreiškia priklausomybes. Grafikas turi turinį. Turinys turi maišą. Maišas tampa atspaudu, kuris keliauja per kūrimo procesą.

Grafikas yra patvarus objektas: šaltinis, tipai, regionai, maišos ir artefaktas, kuris keliauja.

Tai skamba kaip vidinė mechanika, kol neatsiduriate šalia atitikties komandos. Atitikties komanda nenori žinoti, kad tiekėjas turi gražią kompiliatoriaus architektūrą. Ji nori žinoti, ar skaičiavimas, patvirtintas praėjusį mėnesį, yra skaičiavimas, kuris vykdomas šiandien. Grafiko atspaudas yra tiltas tarp šių pasaulių. Tai ne kompiliatoriaus ekrano nuotrauka. Tai kompaktiškas būdas pasakyti: šis operacijų rinkinys, šie tipai, šios įvestys, šie atributai, ši priklausomybių struktūra.

Mazgų modelis yra sąmoningai griežtas. Mazgas yra schemos versija, opkodas, išvesties deskriptoriai, įvesties maišos ir atributų žemėlapiai, išdėstyti kanonine tvarka. Baitai maišomi naudojant SHA3-256 su domenu atskirtais priešdėliais, todėl mazgo, regiono ir grafiko maišos gyvena atskirose vardų srityse. Jei du mazgai turi tą patį opkodą, įvestis ir atributus, jie turi tą pačią maišą. Įterpus dublikatą, grąžinamas esamas įrašas. Bendrų posakių eliminavimas tampa reprezentacijos pasekme, o ne herojiškas vėliau pridėtas etapas.

Tai tokia detalė, kuri inžinerinę sistemą paverčia tuo, kuo žmonės gali pasikliauti. Pirkėjas neperka kompiliatoriaus diagramos. Pirkėjas perka mažiau ginčų dėl to, ar skaičiavimas pasikeitė. Kūrėjas neperka šūkio apie deterministinį dirbtinį intelektą. Kūrėjas perka grafiko formatą, kuriame vienodumą galima patikrinti, išsaugoti ir naudoti įrankiams. Todėl .keg failas nėra įgyvendinimo paskui galvojantis priedas. Tai nešiojamas darbo įrašas.

Aštuonios mažos durys, kol atsiranda tikslas

Kai žmonės įsivaizduoja kompiliatorių, dažnai iškart šoka prie galinės dalies. Jie įsivaizduoja momentą, kai kodas tampa AVX, PTX, Verilog arba WASM. Tas momentas svarbus, bet istorijoje jis vėlyvas. Didžioji dalis kompiliatoriaus darbo jau įvyko iki tol, tyliose stadijose, kurios nusprendžia, ar galine dalimi galima pasitikėti.

Galinės dalys pasirodo vėlai. Didžioji dalis pasitikėjimo užsitarnaujama anksčiau, mažose kompiliatoriaus stadijose, kurios išsaugo prasmę.

Kera prasideda nuo UTF-8 suvokiančio lekserio, kuris šaltinį paverčia žetonais su visapusišku smulkmenų sekimu ir klaidų atkūrimu. Tai skamba kaip redaktoriaus įranga, ir taip yra. Tai taip pat įrankių grandinės patikimumas. Jei išsaugoma kiekviena baito pozicija, diagnostika, formatavimas, inkrementinis peranalizavimas ir kalbos serverio elgsena gali sutapti su tuo, ką vartotojas iš tikrųjų parašė. Kompiliatorius, kuris anksti praranda šaltinio formą, už tą praradimą sumoka visur kitur.

Analizatorius yra įvykių pagrįstas: rekursyvus nusileidimas su Pratto išraiškų analize skleidžia Start, Token, Finish ir Error įvykius, o ne kuria vieną AST, kuriuo visi turi dalytis. Įvykių srautas nepriklausomai maitina medžio sudarytoją, formatuotoją ir kalbos serverį. Žaliasis medis yra nenuostolingas, išsaugantis žetonus ir smulkmenas. Tada grafiko sudarytojas eina per tą medį, palaiko vardų sprendimą ir sukuria Region mazgą kiekvienai funkcijai.

Tik po to šaltinis tampa grafiku, kurį kompiliatorius nešiojasi. Struktūrinis tipų tikrinimas patvirtina suderinamumą per operacijų briaunas ir tenzorių formų apribojimus. Tipai sutampa tik tada, kai jų kanoniniai hešai yra identiški. Skaitymo tikrinimo priemonė užtikrina vieną savininką kiekvienai reikšmei, jokių susietų kintamųjų nuorodų ir nuosavybės taisykles per atminties erdves. Poveikio anotacijos tikrinamos dėl nuoseklumo. Šalutiniai poveikiai nepaliekami skoniui ar susitarimui.

Tada optimizavimo perdavimų tvarkyklė atlieka atpažįstamą kompiliatoriaus darbą: konstantų lankstymą, bendrų posakio dalių šalinimą, negyvo kodo šalinimą, įterpimą, vektorizavimą ir ciklų suliejimą fiksuoto taško cikle. Svarbi frazė yra ne perdavimų sąrašas. Svarbu tai, kas vyksta po kiekvieno perdavimo: grafiko invariantų tikrintuvas patikrina hešo nuoseklumą ir priklausomybių vientisumą. Optimizavimui leidžiama pagerinti grafiko, o ne padaryti jį paslaptingą.

Galiausiai, į konkrečią platformą orientuoti kodo generatoriai išleidžia vietinį kodą, PTX, Verilog arba WASM, o optimizuotas grafikas serializuojamas į .keg failą su sekcijų lentele. Failas prasideda stebuklingais baitais KEG\0 ir turi sekcijas eilutėms, tipams, atributams, mazgams, regionams ir eksportams. Tai kelias, kurį komanda turi įveikti, kol gali sąžiningai kalbėti apie tikslines platformas.

Tikslinės platformos nėra lipdukai ant skaidrės

Tikslinių platformų sąrašą lengva parašyti ir sunku užsitarnauti. CPU, GPU, FPGA ir WASM puikiai telpa produkto kortelėje. Jų žeminimas yra ten, kur slepiasi sąskaita. Kiekviena tikslinė platforma turi savo įpročius, stiprybes ir gedimo būdus. Kompiliatorius, norintis deterministinio heterogeninio vykdymo, negali laikyti tų įpročių kažkieno kito problema.

CPU, GPU, FPGA ir WASM nėra etiketės. Tai tiksliniai pasauliai, kuriuose tas pats grafas turi išlikti.

CPU atveju Kera generuoja gimtąjį mašininį kodą x86-64 ir ARM64 architektūroms, o RISC-V Vector pateikiamas techniniame apraše. x86 kelias pasirenka SSE2, AVX2 arba AVX-512; ARM kelias naudoja NEON; registrų paskirstymas ir planuoklis yra bendri. Produkto teiginys nėra vien tai, kad egzistuoja dvejetainis failas. Teiginys yra tas, kad parenkami tikslui būdingi SIMD branduoliai, o grafas lieka tas pats skaičiavimas.

GPU atveju šaltinio medžiagoje nurodomas PTX generavimas CUDA ir ROCm, o tensoriniai branduoliai naudojami, kai branduolio forma tai leidžia. Ši paskutinė sąlyga nėra tuščia. Aparatinės įrangos spartinimas nėra stebuklingos dulkės. Branduolio forma arba tinka tensorinio branduolio keliui, arba netinka. Kompiliatorius turi tai sąžiningai atskleisti, prireikus perkelti duomenis tarp pagrindinės ir įrenginio atminties ir vis tiek išlaikyti grafo atspaudą kaip įrodymą, kas yra vykdoma.

FPGA atveju žeminimo kelias tampa aparatinės įrangos pokalbiu: Verilog sintezė, išteklių įvertinimas, laiko analizė ir vamzdyno planavimas nuspėjamam, ciklo tikslumo elgesiui. Tai toks tikslas, kuriame miglotas kalbėjimas ypač brangiai kainuoja. Jei pirkėjui reikia griežto realaus laiko, kompiliatoriaus sąsaja turi kalbėti ciklais, ištekliais ir vamzdynais, o ne vien greičiu. Keros istorija paverčia FPGA to paties grafo backendu, o ne kitoje komandoje vykdomu perrašymu.

WASM atveju puslapyje nurodomas 128 bitų SIMD, skirtas edge ir naršyklės diegimui. Tai svarbu, nes edge yra vieta, kur diegimo realybė dažnai susiduria su grynumu. Naršyklė, mažas įrenginys ar riboto veikimo aplinka ne visada gali talpinti tą patį krūvą kaip serveris. Grafui būdingas žeminimo kelias suteikia komandai būdą perkelti tą patį skaičiavimą į tą aplinką nepaverčiant edge antru produktu.

Determinizmas turi išlikti ir sulaukus sėkmės

Determinizmą lengva pažadėti mažame kambaryje. Jis tampa sunkesnis, kai produktas sulaukia sėkmės. Ateina daugiau vartotojų. Atsiranda daugiau aparatinės įrangos. Modelis perkeliamas iš vienos lusto į kitą. Testo bazė, parašyta vienai aplinkai, turi apimti ir kitą. Optimizacija, kuri atrodo nekenksminga, pakeičia redukcijos eiliškumą. Greitas kelias atsiranda vienoje vykdymo aplinkoje, bet ne kitoje.

Determinizmas yra ciklas, o ne šūkis: sukurk, paleisk, palygink, pataisyk ir išlaikyk grafą stabilų.

The Kera page frames determinism as bit for bit across platforms. That is not a cosmetic claim. It changes product obligations. Primitive arithmetic has defined precision semantics across all targets. Reductions have defined tie-breaking so scheduling and hardware do not change the result. Neural network primitives have deterministic implementations on CPU, GPU, FPGA, and WASM. The graph means the same thing wherever it runs.

This is why undefined behaviour, garbage collector pauses, and implicit side effects are not small language preferences. They are cracks in the execution surface. Kera’s page says no LLVM dependency, no garbage collector, no undefined behaviour. Explicit types, explicit effects, and ownership across memory spaces are product controls. They reduce the number of places a result can change while everyone is looking somewhere else.

There is a human side to this too. When a robotics controller changes behaviour across devices, when a finance workflow rounds one cent differently, when a scientific result cannot be repeated by a reviewer, or when a game simulation diverges between targets, the argument is not really about compiler theory. It is about institutional confidence. Kera’s consumer copy uses simple stories because the underlying problem is simple to feel: same instructions, same answer, on any computer you own.

That confidence must survive acceleration. If performance requires teams to abandon determinism, the product has only moved the risk. Kera tries to keep performance and determinism in the same contract by making the graph the unit of meaning and the target path the unit of execution.

Security is part of lowering

Compiler discussions often isolate security as runtime work. Kera’s source material does not. It talks about capability-based security, a SecurityManager, a default-deny gate, a PolicyBuilder, seccomp BPF, Linux namespaces, and a thread-safe tamper-evident audit log in a fixed-capacity ring buffer. Those words belong in the engineering story because lowering does not end when instructions are emitted. The emitted work still has to run with boundaries.

Capability tokens are granted at startup. Privileged actions require an explicit capability. Access rules are declared up front. A BPF filter restricts syscalls. Namespace isolation separates process, mount, and network views. Security-relevant events land in an audit log. The short sentenceis: nothing is permitted by default.

That matters for heterogeneous execution because targets create surfaces. A CPU process, GPU transfer, FPGA path, browser runtime, and distributed job do not fail in identical ways. A product has to keep policy attached to the work as it moves. If the graph says what the computation is, the runtime controls say what the computation may do.

There is also an operations reason to bring security into the compiler story. Teams do not want one product for compilation, anotherfor policy, another for logging, and another for explanation if the seams between them become the place where incidents hide. Kera’s page does not claim to solve all security. It does something narrower and more useful: it makes permissions explicit and auditedin the execution environment the compiler feeds.

Distributed work is still lowering

The technical sheet names distributed execution, ring allreduce, and checkpoint recovery. In another product, those might be brochure items. In Kera, they belong to the same lowering conversation because parallelism changes the shape of a computation. Data, model, and pipeline parallelism are not just ways to go faster. They are ways to split work without losing the meaning of the original graph.

Kai didelis darbas vykdomas daugelyje mašinų ir vienas mazgas sugenda, atsikūrimas iš kontrolinio taško nėra patogumo klausimas. Tai dalis skaičiavimo veiksnumo užtikrinimo. Jei rezultatai agreguojami patikimai, agregavimo semantika turi būti apibrėžta. Jei grafas yra adresuojamas turiniu, paskirstytasis kelias turi išsaugoti grafo tapatybę, o ne kurti antrą realybę, kai darbas palieka vieną mašiną.

Čia produkto interpretacija tampa aiški. Kera nėra sintaksės sluoksnis su paskirstytojo vykdymo priedu. Ji siekia, kad skaičiavimas būtų perkeliamas tiek forma, tiek aparatine įranga: viena programa, vienas grafas, keli vykdymo taikiniai ir įrašas, kurį galima patikrinti. Paskirstytasis vykdymas yra dar viena vieta, kur žeminimas turi perteikti vykdymo sutartį.

Tai taip pat keičia personalo poreikius. Be bendro kompiliavimo kelio, klaida, pasireiškianti tik vienoje platformoje, gali reikalauti žmonių, kurie vienu metu išmano lustą, įrankių grandinę ir vykdymo aplinką. Turint vieną grafą ir bendrą kelią, klausimas tampa tikslesnis: ar pasikeitė grafas, ar pasikeitė žeminimo kelias, ar taikinys pažeidė apibrėžtą semantiką? Geresni klausimai nepanaikina sunkaus darbo. Jie neleidžia sunkiam darbui plisti atsitiktinai.

Kodėl kažkas turi valdyti kelią

Žeminimas negali likti be savininko, kai jis perteikia rezultatus, kuriais žmonės pasikliauja. Grafas, veikiantis CPU, GPU, FPGA ir WASM, reikalauja daugiau nei sumanaus atvaizdavimo. Jam reikia dokumentacijos, diagnostikos, taikinių teiginių, redaktoriaus elgsenos, kodo generavimo, saugumo kontrolės, palaikymo pokalbių ir būdo pasakyti pirkėjui, kas tiksliai pasikeitė, kai pasikeičia rezultatas.

Tai nereiškia, kad darbas tampa mažiau techninis. Tai daro techninį darbą labiau įpareigojantį. Kera šiuo metu yra komercinis Dweve produktas, o ne atvirojo kodo leidimas: visos teisės saugomos, prieinama pagal komercinę licenciją, sukurta Nyderlanduose ir skirta organizacijoms, kurioms reikia palaikomo, o ne tik paskelbto grafo kelio. Jei puslapyje nurodyta Rust 2021, grafų IR, pasirinktinis JIT, be LLVM, CPU/GPU/FPGA/WASM, efektų sekimas, nuosavybė atminties erdvėse, galimybių saugumas, paskirstytasis vykdymas, C ir Python įterpimas, CLI darbo eigos, redaktoriaus palaikymas ir LSP įrankiai, tai nėra dekoratyvinės vidinės detalės. Tai įsipareigojimai, kurie turi atlaikyti realių darbo krūvių vertinimą.

Galimybių aprašas čia yra atsargus. Jame aprašomi projektavimo tikslai ir raginama patikrinti pagal savo darbo krūvį. Tas santūrumas svarbus. Tai daug sveikiau nei apsimesti, kad kiekvienas etalono skaičius keliauja kartu. Sistema turėtų suteikti komandoms būdą matuoti, tikrinti ir lyginti savo aplinkoje, o ne prašyti priimti visuotinį greičio pasakojimą.

Kažkas turi valdyti tą kelią, nes kiekvienas taikinys bando padaryti šaltinį mažiau universalų. Kera yra vieta, kur tie taikinių skirtumai tampa aiškiu kompiliatoriaus darbu, o ne padavimu, perduodamu po klaidos pranešimo.

Diena, kai grafas tampa sutartimi

Įsivaizduokite pirminį klaidos pranešimą dar kartą, bet su Kera jau darbo eigoje. Finansų komanda patvirtina rizikos skaičiavimą. Grafo atspaudas užfiksuojamas. Pirmasis diegimas veikia CPU. Vėliau GPU kelias įvedamas portfelio analizei. Dar vėliau FPGA kelias naudojamas mažesnės delsos kainodarai. Klausimas kiekviename žingsnyje nėra, ar nauja aparatinė įranga skamba įspūdingai. Klausimas yra, ar žeminamas tas pats grafas ir ar taikinio semantika užtikrina identišką rezultatą.

Pokalbis pasikeičia. Platformos komanda gali kalbėti apie planavimą ir sąnaudas. Kompiliatoriaus komanda gali kalbėti apie backendus. Atitikties komanda gali kalbėti apie atspaudą. Verslo savininkas gali klausti, ar aparatinės įrangos keitimas yra operacinis sprendimas, ar perrašymas. Produktas suteikia jiems visiems vieną objektą, į kurį galima nukreipti.

Tokia yra tyli turinio adresuojamos IR vertė. Ji kryžminės platformos vykdymą iš eilės įtikinamų paaiškinimų paverčia įrašu. Ji grafiką paverčia kvitu. Ji leidžia tam pačiam .keg failui maitinti kiekvieną backend. Ji organizacijai suteikia atskaitos tašką, kuris priklauso skaičiavimui, o ne vienam įrenginiui.

Joks kompiliatorius negali pašalinti inžinerinio sprendimo poreikio. Komandos vis tiek turi atidžiai pasirinkti tikslus, sąžiningai testuoti darbo krūvius, suprasti tikslų apribojimus ir nuspręsti, kuriose srityse reikia bitų lygio tapatumo. Tačiau Kera gali padaryti tuos sprendimus aiškius. Ji gali užkirsti kelią tam, kad našumo migracija netyčia taptų semantine migracija.

Žeminimo pamoka

Kera svarbi, nes sunkiausia dalis nėra turėti sumanią žeminimo idėją. Sunkiausia dalis yra perkelti tą idėją per visas nuobodžias vietas, kuriose inžinerija arba tampa patikima, arba tampa folkloru: diagnostika, žali medžiai, tipų maišos, skolinimosi tikrinimas, fiksuoto taško optimizavimas, invariantų tikrinimas, .keg serializavimas, backend emisija, saugumo politika, audito žurnalai, redaktoriaus palaikymas ir tikslinis vykdymas.

Žeminimas yra darbas, nes kiekvienas tikslas bando padaryti šaltinį mažiau universaliu. Deterministinė kompiliatorių inžinerija yra disciplina, neleidžianti tam įvykti tyliai. CPU nori vektorių. GPU nori branduolių. FPGA nori ciklų. WASM nori apribojimų. Organizacija nori vieno atsakymo. Keros darbas yra išsaugoti skaičiavimo prasmę, leidžiant kiekvienam tikslui daryti tai, ką jis daro gerai.

Tai yra inžinerinė forma, o ne popierinė abstrakcija. Ji turi pirkėją, gedimo režimą, failo formatą, kompiliatoriaus kelią ir veiklos pasekmes. Pažadas nėra tas, kad aparatinė įranga tampa paprasta. Pažadas yra tas, kad sudėtingumas yra atvaizduojamas, žeminamas, tikrinamas ir valdomas.

Kai ateina kitas beveik teisingas skaičius, komanda neturėtų pradėti nuo folkloro apie tai, kuri mašina ką vykdė. Ji turėtų pradėti nuo grafiko. Ar atspaudas sutapo? Kuris backend išleido kodą? Kurios galimybės buvo suteiktos? Kuri tikslo semantika buvo taikoma? Kuris artefaktas buvo saugomas? Tai yra produkto klausimai. Kera egzistuoja, nes jie taip pat yra kompiliatoriaus klausimai.