挪威开发者推出新挪威语编程语言BrunostJohn Mikael Lindbakk在2026年4月13日12:00发布文章介绍了他开发的新挪威语编程语言Brunost。许多国家都有多种语言挪威严格来说有书面挪威语、新挪威语和萨米语三种语言。新挪威语是一种纯粹的书面语言作者觉得很有意思于是开发了用新挪威语编写的编程语言Brunost。Brunost语言与奶酪的完美结合Brunost在挪威文化中是备受推崇的山羊奶酪口感顺滑、味道香甜可用于制作华夫饼等美食是极具挪威特色的奶酪。这也是它成为新挪威语编程语言绝佳名称的原因就像奶酪一样香甜顺滑、富有内涵。下面是用纯正Brunost语言编写的“Hello world”代码bruk terminalterminal.skriv(Hei, verda!)Brunost是令人愉悦的函数式语言是解释型语言类型约束宽松。其解释器用Zig编写运行速度快。开发者现在就可以在浏览器中在线体验。强制使用新挪威语Brunost的重要特点是强制使用新挪威语变量名、参数名和函数名必须用新挪威语。解释器附带新挪威语词典开发者若使用其他语言会收到错误提示Feil: Namnet er ikkje gyldig nynorsk: thisIsNotNynorsk på linje 8, kolonne 6Brunost认为开发者应使用平实的新挪威语而非花哨的缩写。精妙语法大揭秘变量、可变性和赋值赋值变量示例fast fart er 80关键字 fast 表示变量 fart 不可更改若试图更改会报错Kan ikkje endra ein uforanderleg variabel (deklarert med fast)若想让变量可更改用 endreleg 标记endreleg fart er 80fart er 50 //Ok条件语句Brunost有 viss 语句功能类似其他语言的 if 语句bruk terminalfast fartsgrense er 80fast minFart er 90 // 更改此值以获得不同结果viss (minFart erStørreEnn fartsgrense) gjer {terminal.skriv(For høy fart!)} ellers viss (minFart erSameSom fartsgrense) gjer {terminal.skriv(Farten din er på grensa!)} ellers {terminal.skriv(Farten din er innafor.)}代码中的英文注释是为了方便不懂新挪威语的读者。函数和返回值Brunost有函数示例如下bruk terminalgjer kalkulerFart(distanse, timer) {gjevTilbake distanse / timer}fast distanse er 50fast timer er 2terminal.skriv(Din fart er: kalkulerFart(distanse, timer) km/t)gjevTilbake 语句相当于其他语言的返回语句。Brunost对声明顺序有严格要求。循环Brunost有 forKvart 循环类似 foreach 循环bruk terminalfast fylke er [Vestland, Rogaland, Troms, Finnmark]forKvart namn i fylke {terminal.skriv(Hei frå namn !)}还有 while 循环bruk terminalendreleg teljar er 1medan (teljar 4) gjer {terminal.skriv(teljar)teljar er teljar 1}类型、数据结构和标准库Brunost有常见的类型和数据结构开发者不用太在意类型。导入用关键字 bruk 进行导入如内置模块 terminal还有 matte 和 streng 等模块也可创建自己的模块。示例bruk logikk若 logikk 在子文件夹中bruk kode.logikk异常处理Brunost用经典的 try-catch 逻辑处理错误bruk terminalgjer del(første, andre) {viss (andre er 0) gjer {kast Kan ikke dele på null}gjevTilbake første / andre}prøv {del(10, 0)} fang(feil) {terminal.skriv(Noe feilet: feil)}支持WebAssembly将Brunost解释器部署为WebAssembly并不难现在就可在线使用。主要挑战在于处理终端命令在线版本的生命游戏实现看起来有点奇怪。这部分提及Wasm是为了提高搜索引擎优化。项目展望与建议作者不会为Brunost构建完整生态系统在结束项目前想完成一些事实现哈希映射、编写完善文档、让Brunost支持网站、处理新挪威语中的非新挪威语单词、提供外部函数接口支持、在标准库中实现文件读写功能、设计语言吉祥物。完成这些后Brunost会成为有趣的小项目供大家玩耍。作者开发这门语言是觉得想法有趣但自己用美式键盘很难打出Brunost代码且受限于词典有很多限制。如果有人想继续开发Brunost作者乐意审查并处理拉取请求。对于“想找项目做”的人有以下建议- 编辑器和网页语法高亮以及通用的编辑器集成。- 开发语言服务器。- 扩展标准库。可前往 GitHub 仓库提出想法。需要说明的是Brunost不适合在实际生产环境中使用。额外福利示例斐波那契数列bruk terminalgjer rekke(grense) {viss (grense 2) gjer {gjevTilbake grense}gjevTilbake rekke(grense - 1) rekke(grense - 2)}endreleg teljar er 1medan (teljar erSameEllerMindreEnn 15) gjer {terminal.skriv(rekke(teljar))teljar er teljar 1}FizzBuzz 问题bruk terminalbruk matteendreleg teljar er 1medan (teljar erSameEllerMindreEnn 15) gjer {viss (matte.modulus(teljar, 15) erSameSom 0) gjer {terminal.skriv(FizzBuzz)} ellers viss (matte.modulus(teljar, 3) erSameSom 0) gjer {terminal.skriv(Fizz)} ellers viss (matte.modulus(teljar, 5) erSameSom 0) gjer {terminal.skriv(Buzz)} ellers {terminal.skriv(teljar)}teljar er teljar 1}康威生命游戏bruk listebruk terminalbruk mattebruk prosessbruk strengfast breidde er 60fast høgd er 30// Skapar ei liste med tilfeldige 1-ar og 0-argjer lagBrett() {endreleg brett er []endreleg rad er 0medan (rad erMindreEnn høgd) gjer {endreleg rekkje er []endreleg kolonne er 0medan (kolonne erMindreEnn breidde) gjer {rekkje er liste.leggTil(rekkje, matte.tilfeldig(0, 1))kolonne er kolonne 1}brett er liste.leggTil(brett, rekkje)rad er rad 1}gjevTilbake brett}gjer hentCelle(brett, kolonne, rad) {viss (kolonne erMindreEnn 0eller kolonne erSameEllerStørreEnn breiddeeller rad erMindreEnn 0eller rad erSameEllerStørreEnn høgd) gjer {gjevTilbake 0}fast rekkje er liste.hent(brett, rad)gjevTilbake liste.hent(rekkje, kolonne)}gjer telNaboTal(brett, kolonne, rad) {endreleg sum er 0sum er sum hentCelle(brett, kolonne - 1, rad - 1)sum er sum hentCelle(brett, kolonne, rad - 1)sum er sum hentCelle(brett, kolonne 1, rad - 1)sum er sum hentCelle(brett, kolonne - 1, rad)sum er sum hentCelle(brett, kolonne 1, rad)sum er sum hentCelle(brett, kolonne - 1, rad 1)sum er sum hentCelle(brett, kolonne, rad 1)sum er sum hentCelle(brett, kolonne 1, rad 1)gjevTilbake sum}gjer nesteGenerasjon(brett) {endreleg nyttBrett er []endreleg rad er 0medan (rad erMindreEnn høgd) gjer {endreleg nyRekkje er []endreleg kolonne er 0medan (kolonne erMindreEnn breidde) gjer {fast celle er hentCelle(brett, kolonne, rad)fast naboTal er telNaboTal(brett, kolonne, rad)endreleg nyCelle er 0viss (celle erSameSom 1) gjer {viss (naboTal erSameSom 2) gj