Brunost er eit programmeringsspråk designa for dei som meiner at kode ikkje berre skal vere funksjonell — han skal ha sjel. Inspirert av den klassiske norske frukostopplevinga kombinerer Brunost ein rein, lesbar syntaks med ekte nynorsk terminologi.
Ingen framandord. Ingen rar import-hierarki. Berre kode som flyt like mjukt som brunost over ein nysteikt vaffel.
Merk: Brunost er under aktiv utvikling. Enkle einfilsskript fungerer godt.
prøv/fangfangar berre feil kasta medkast— ikkje interne køyretidsfeil.
| Eigenskap | Brunost |
|---|---|
| Løkker | forKvart og medan-syntaks som les seg naturleg |
| Feilhandtering | prøv/fang-blokker for reine feilflyt |
| Modular | Innebygde, brukar-definerte og fil-baserte modular |
| Mutabilitet | Eksplisitt fast/endreleg — aldri uventa endringar |
bruk terminal
bruk matte
gjer rekn(tal, faktor) {
viss (faktor er 0) gjer {
kast "Kan ikkje gange med null, det er kjedeleg"
}
gjevTilbake tal * faktor
}
fast talrekke er [1, 2, 3, 4, 5]
prøv {
forKvart tal i talrekke {
fast resultat er rekn(tal, 3)
terminal.skriv(resultat)
}
} fang (feil) {
terminal.skriv("Noko gjekk gale: " + feil)
}Brunost skil mellom variablar som kan endrast og dei som ikkje kan det.
// Uforanderleg — set ein gong, aldri endra
fast fart er 88
// Foranderleg — kan oppdaterast fritt
endreleg straum er 1
straum er straum + 1fast erNynorsk er sant // Boolsk
fast årstal er 1814 // Heiltall
fast graderNord er 71.0 // Desimaltall
fast helsing er "God dag, Noreg!" // Streng
fast fjordar er ["Sognefjord", "Hardangerfjord", "Geirangerfjord"] // ListeFunksjonar definerast med gjer og returnerer verdi med gjevTilbake:
gjer kroppsMasseIndeks(vekt, høgd) {
gjevTilbake vekt / (høgd * (høgd / 100))
}
fast resultat er kroppsMasseIndeks(70, 175)bruk terminal
fast temperatur er -5
viss (temperatur erMindreEnn 0) gjer {
terminal.skriv("Det er kaldt — ta på deg ull!")
} ellers viss (temperatur erMindreEnn 15) gjer {
terminal.skriv("Frisk luft, ta med jakke")
} ellers {
terminal.skriv("Norsk sommar! Nyt det medan det varar")
}For-kvar-løkke — iterer over ei liste:
bruk terminal
fast fylke er ["Vestland", "Rogaland", "Troms", "Finnmark"]
forKvart namn i fylke {
terminal.skriv("Hei frå " + namn + "!")
}Medan-løkke — køyr så lenge ein påstand er sann:
bruk terminal
endreleg teller er 10
medan (teller erStørreEnn 0) gjer {
terminal.skriv(teller)
teller er teller - 1
}prøv/fang fangar feil kasta med kast:
bruk terminal
gjer delTal(tellerTall, nemnar) {
viss (nemnar er 0) gjer {
kast "Matematikken seier nei: kan ikkje dele på null"
}
gjevTilbake tellerTall / nemnar
}
prøv {
fast svar er delTal(42, 0)
terminal.skriv("Svar: " + svar)
} fang (feil) {
terminal.skriv("Feil oppstod: " + feil)
}Brunost støttar tre typar modular for å organisere koden din.
bruk terminal // Inn- og utdata
bruk matte // Matematiske funksjonar
bruk streng // Strengmanipulasjon
bruk liste // Listeoperasjonarbruk terminal
bruk matte
terminal.skriv(matte.abs(-42)) // 42
terminal.skriv(matte.maks(7, 13)) // 13
terminal.skriv(matte.min(7, 13)) // 7bruk terminal
modul geometri {
gjer areal(breidde, høgd) {
gjevTilbake breidde * høgd
}
gjer omkrins(breidde, høgd) {
gjevTilbake 2 * (breidde + høgd)
}
}
terminal.skriv(geometri.areal(5, 8)) // 40
terminal.skriv(geometri.omkrins(5, 8)) // 26Del koden over fleire filer for større prosjekt.
utils/rekning.brunost:
gjer leggTil(a, b) {
gjevTilbake a + b
}
gjer trekkFrå(a, b) {
gjevTilbake a - b
}hovud.brunost:
bruk terminal
bruk utils.rekning
terminal.skriv(rekning.leggTil(100, 23)) // 123
terminal.skriv(rekning.trekkFrå(100, 23)) // 77Bruk som ved namnekonflikt:
bruk utils.rekning som rekn
terminal.skriv(rekn.leggTil(5, 7)) // 12mise handterer alle avhengigheiter automatisk:
mise install # Installer avhengigheiter
mise run build # Bygg prosjektet
mise run test # Køyr alle testar
mise run demo:start # Start demo-server på http://localhost:8765
mise run demo:stop # Stopp demo-serverenKrav: Zig 0.15 eller nyare.
zig build # Bygg prosjektet
zig build run -- mittskript.brunost # Køyr eit skript
zig build test # Køyr alle testarEller bruk den kompilerte binærfila direkte:
./zig-out/bin/brunost mittskript.brunostTestane er snapshot-testar som køyrer .brunost-skript og samanliknar utdata med venta resultat. Testskripter ligg i src/tests/.
Brunost er eit aktivt prosjekt og tek gjerne imot bidrag — anten det er feilrettingar, nye funksjonar, betre dokumentasjon eller fleire demoar.
- Fork repoet
- Lag ein ny gren:
git checkout -b mi-endring - Gjer endringane dine
- Send ein pull request
Laga med kjærleik og altfor mykje brunost
