Befunge — це стекова езотерична мова програмування. Вона відрізняється від звичайних мов тим, що код програми, написаної на Befunge, розташований у двовимірному просторі інструкцій, а виконання програми може відбуватись у будь-якому напрямку. Кріс Пресі, творець Befunge, мав за мету створити мову з якнайскладнішим процесом компіляції. Befunge вважається двовимірною, оскільки програма, написана нею, записується в таблицю, по якій в різних напрямках переміщується вказівник інструкцій, виконуючи команди, розміщені в клітинках даної таблиці. Дана таблиця має можливість згортатись у тор на випадок виходу вказівника інструкцій за межі рядка, причому напрямок вказівника буде збережено, а процес виконання програми продовжиться.
Befunge | |
---|---|
Парадигма | Імперативна |
Дата появи | 1993 |
Розробник | |
Діалекти | Befunge-93, Befunge-98 |
Під впливом від | Forth, Brainfuck і FALSE |
Операційна система | стекова |
Ліцензія | BSD-compatible |
Звичайні розширення файлів | .be, .bf, .b93, .b98, .befunge |
Вебсайт | catseye.tc/article/Languages.md#befunge-93 |
Історія
Мова була створена у 1993 році як одна з перших двовимірних мов програмування загального призначення, основою яких є таблиця символів ASCII. Також існує низка розширень до оригінальної специфікації «Befunge-93», серед яких варто виділити Funge-98, яка розширює концепцію до довільної кількості вимірів і дозволяє багатопотокове виконання, використовуючи декілька вказівників інструкцій, що працюють одночасно в одному просторі. Розширення та різновиди Befunge називаються Fungeoids або просто Funges.
Специфікація Befunge-93 обмежує кожну дійсну програму сіткою з 80 інструкцій по горизонталі на 25 інструкцій по вертикалі. Виконання програми, що перевищує ці межі, «завертається» до відповідної точки з іншого боку сітки. Програма Befunge таким чином топологічно еквівалентна тору. Оскільки програма Befunge-93 може мати лише один стек, а значення чисел у ньому мають обмеження за розміром, мова Befunge-93 не є повною за Тьюрінгоім (однак, було показано, що Befunge-93 може бути повною за Тьюрінгом при умові довільної довжини числа у стеку, а не такої, що обмежена типом даних signed long int, як вказано у документації до Befunge-93). Пізніша специфікація Funge-98 забезпечує повноту Тюрінга шляхом зняття обмежень щодо розміру програми: замість того, щоб загортатись поза фіксованої межі, рух вказівника інструкцій Funge-98 працює за моделлю, яка отримала назву «Lahey-space» (на честь його автора, Кріса Лахея). У цій моделі сітка поводиться як тор обмеженого розміру стосовно згортки, але при цьому дозволяє йому розширюватись нескінченно.
Компіляція
Як зазначалося, основною причиною створення Befunge було бажання створити мову, яку складно компілювати. Це було зроблено за допомогою впровадження мінливого коду (інструкція p
може записувати нові вказівки на поле) та багатовимірного поля (одна і та ж інструкція може виконуватися в чотирьох різних напрямках).
Згодом ці перешкоди були певною мірою подолані за допомогою компіляторів Befunge, написаних за новими відповідними методиками.
Компілятор bef2c, що входить до стандартного дистрибутиву Befunge-93, використовує потоковий код. Кожна інструкція компілюється в фрагмент коду С, а управління протікає через фрагменти так само, як це робиться в інтерпретаторі Befunge. Зауважте, що компілятор bef2c є невірним, оскільки він не обробляє ані інструкції p
, ані рядкового режиму, попри те, що реалізувати не було є неможливо (мова С може просто бути непідходящою для цього).
Іншим прикладом може бути . Цей компілятор розглядає всі можливі прямі вказівки як підпрограму, і якщо інструкція p
змінює цю підпрограму, ця підпрограма перекомпілюється. Це цікавий варіант JIT-компіляції, оскільки багато вказівок можна виконувати в готовому коді, не втручаючись при цьому у рішення щодо реєстру напрямків.
Зразок коду Befunge-93
Нижче наведений код для генерування випадковий чисел, що може слугувати ілюстрацією техніки використання стрілок для зміни керуючого потоку. Вказівник інструкції Befunge починається у верхньому лівому куті і рухатиметься праворуч, якщо не буде перенаправлений за іншим напрямком. Слідом за стрілками навколо ?
інструкції надсилають свій вказівник у випадкових напрямках, поки він не потрапить на цифру, помістивши її у стек. Після цього стрілки переходять до .
, щоб вивести цифру зі стека та повернути вказівник до першого спрямованого рандомайзера. Оскільки відсутній символ @
для припинення роботи програми, даним кодом генерується нескінченний потік випадкових чисел від 1 до 9.
v>>>>>v 12345 ^?^ > ? ?^ v?v 6789 >>>> v ^ .<
Наступний код є прикладом стандартної програми «Hello World!». Спочатку букви «olleH» записуються на вершину стеку як числа ASCII. Потім вони виходять зі стеку в порядку LIFO і виводяться як текстові символи, щоб вивести слово «Hello». Пробіл, символ з кодом 32 у таблиці ASCII, тут будується множенням чисел 4 і 8, перш ніж виводитись як текст. Неважко помітити, що синтаксис операцій реалізовано постфіксно, тобто спочатку кладуться числа, які беруть участь в операції, а тоді сам знак операції (у цьому випадку — множення). Решта коду виводить слово «World» аналогічним чином: вийшовши зі стрічкового режиму, оператор ,
послідовно виводить значення з верхівки стеку на екран та забирає їх зі стеку, після чого символ з кодом 10 у таблиці ASCII (символ переміщення курсору на новий рядок) реалізується множенням чисел 2 і 5 та виводиться на екран користувача за допомогою оператора ,
. Інструкція @
завершує виконання програми.
> v v ,,,,,"Hello"< >48*, v v,,,,,,"World!"< >25*,@
Наступний код є дещо ускладненою версією попереднього. Він додає символ з кодом 10 у таблиці ASCII до стеку, а потім кладе «! Dlrow, olleH» до стеку. Знову ж таки, принцип LIFO означає, що «H» зараз є на вершині стеку і буде виведена на екран першою, «e» — другою, «l» — третьою, і так допоки стек не стане порожнім. Для друку символів програма розпочинає цикл, який спочатку дублює верхнє значення на стеку (тому тепер стек виглядатиме як « \n! Dlrow, olleHH»). Тоді операція _
видасть дубльоване значення і піде праворуч, якщо це нуль, у іншому випадку — ліворуч. Коли значення рухається ліворуч, верхнє значення виводиться як символ ASCII . Потім він дублює наступний символ і циклічно повертається до тесту _
, продовжуючи друкувати решту стеку, поки він не є порожнім, і тому наступне значення, що з'явилося, дорівнює нулеві, після чого @
закінчує програму.
>25*"!dlrow ,olleH":v v:,_@ > ^
Наступний код ілюструє виведення символів у циклі. Тут за допомогою символу `
відбувається порівняння чисел, на кожному кроці додаючи 1, щоб збільшити кількість симоволів «*», які виведуться на екран. Інструкцією |
ми вказуємо компілятору рухатись вниз, якщо поточне значення числа рівне нулеві, а в іншому випадку — вгору. Це — класичний приклад застосування циклів у мові Befunge. Слід зауважити, що, на відміну від більшості мов програмувнаня, тут цикл дійсно виглядає, як кругове повторення інструкцій з перенаправленням, яке здійснюється за певної умови.
1>:5`#@_:>"*",v | :-1< ^+1,+5+5<
Програма-гра, у якій потрібно відгадати число, маючи підказки у вигляді менше/більше щоразу, коли користувач намагається вгадати число. Головний концепт випадковості тут реалізовано за допомогою інструкції ?
, яка продовжує рух вказівника у випадковому напрямку.
vv << 2 ^ v < v1 <?> 3v4 ^ ^ >>?>?> 5 ^ vv v9 <?> 7v6 v v < 8 >> ^ vv << 2 ^ v < v1 <?> 3v4 ^ ^ >>?>?> 5 ^ vvv, * 25 << v9 <?> 7v6 ,, v v <"" 8> < >> ^ "" v > * :.> 0 "! Rebmun tupnI">: #, _ $ 25 *,: &: 99p` | ^ <_0 "! Niw uoY">: #, _ $ 25 *, @ ^ <>: 99g01 - * + ^
Програма, що виконує перевірку числа на парність. За рахунок простоти виконання цього завдання, головними операціями тут є ділення за модулем %
, яке ставить залишок від ділення на вершину стеку, власне число 2, яке знаходиться у стеку з початку виконання програми для виконання перевірки на парність, а також літера «Е» (від «Even» — англ. парне), яка виведеться у випадку підтвердження парності числа.
&2%52**"E"+,@
Приклад програми з коментарями (Befunge-93). Слід зауважити, що компілятор пропускатиме усі символи, які не є командами, але видаватиме користувачеві повідомлення із попередженням, що дана інструкція не підтримується
& read a number 4+ add four .@ display result ^- inline comment -^ <-^- block comment
Список інструкцій Befunge-93
0-9 | Розміщення даного числа в стек |
+ | Додавання |
- | Віднімання |
* | Множення |
/ | Цілочисельне ділення |
% | Остача від ділення |
! | Логічне НЕ: Якщо значення на вершині стеку дорівнює нулю, то воно заміняєтьсяна 1; в іншому випадку на нуль. |
` | Більше, ніж: порівняння a і b, в стек поміщається 1, якщо b > a, інакше нуль. |
> | Зсув праворуч |
< | Зсув ліворуч |
^ | Рух вгору |
v | Рух вниз |
? | Рух у випадковому напрямку |
_ | Рухатись праворуч, якщо значення = 0, інакше ліворуч |
| | Рухатись вниз, якщо значення = 0, інакше вгору |
" | Режим запуску рядка: поміщає в стек значення ASCII кожного символу до наступного " |
: | Поміщає в стек дублікат вершини |
\ | Змінює два значення на вершині стека |
$ | Вивід вершини стеку та видалення її |
. | Вивід вершини стеку у вигляді цілого числа, а потім пробіл |
, | Вивід символа, що відповідає ASCII-коду на верхівці стеку |
# | Пропуск наступної клітинки |
p | «PUT»: зі стеку витягуються координати x, y та ASCII-код символа, з цими координатимию |
g | «GET»: зі стеку витягуються координати x та y. У стек поміщається ASCII-код символа з цими координатами. |
& | Розміщення у стеку числа заданого коритстувачем |
~ | Розміщення у стеку числа заданого коритстувачемстувачем у вигляді у ASCII коду |
@ | Кінець програми |
| Нічого не робить |
Більшість одновимірних мов програмування вимагають певного синтаксичного розрізнення тексту коментаря та вихідного коду — ця відмінність присутня у Befunge, адже, згідно з правилом Brainfuck, будь-який символ, який не знаходиться у наборі +-[]<>,.
це коментар. Такі мови як Lisp та Python трактують рядки як коментарі в контекстах, де значення не використовуються. Для вбудовування документації в код програміст просто скеровує контрольний потік навколо області з коментарем, щоб текст у цій області ніколи не виконувався. Принципи коментування змінились із виходом Befunge-98, у якому програміст може оточити блок тексту, який не використовується безпосередньо у програмі, символами ;
, що дасть компілятору зрозуміти, що далі слідує фрагмент коментарів.
Дивитися також
- Brainfuck
- [en] - гра, що написана подібною мовою
- INTERCAL
- Whitespace
- Екзотеричні мови програмування
- Приклади програм на Befunge [ 4 грудня 2019 у Wayback Machine.]
Список літератури
- Ais523 (18 грудня 2008). . Esolang. Архів оригіналу за 2 грудня 2021. Процитовано 23 січня 2014.
- Oerjan (18 січня 2014). . Esolang. Архів оригіналу за 30 березня 2022. Процитовано 23 січня 2014.
Посилання
- Специфікація Befunge-93 [ 29 листопада 2019 у Wayback Machine.]
- Реалізація довідника Befunge-93 [ 7 січня 2019 у Wayback Machine.]
- Специфікація Funge-98 [ 8 серпня 2020 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Befunge ce stekova ezoterichna mova programuvannya Vona vidriznyayetsya vid zvichajnih mov tim sho kod programi napisanoyi na Befunge roztashovanij u dvovimirnomu prostori instrukcij a vikonannya programi mozhe vidbuvatis u bud yakomu napryamku Kris Presi tvorec Befunge mav za metu stvoriti movu z yaknajskladnishim procesom kompilyaciyi Befunge vvazhayetsya dvovimirnoyu oskilki programa napisana neyu zapisuyetsya v tablicyu po yakij v riznih napryamkah peremishuyetsya vkazivnik instrukcij vikonuyuchi komandi rozmisheni v klitinkah danoyi tablici Dana tablicya maye mozhlivist zgortatis u tor na vipadok vihodu vkazivnika instrukcij za mezhi ryadka prichomu napryamok vkazivnika bude zberezheno a proces vikonannya programi prodovzhitsya BefungeParadigmaImperativnaData poyavi1993RozrobnikDialektiBefunge 93 Befunge 98Pid vplivom vidForth Brainfuck i FALSEOperacijna sistemastekovaLicenziyaBSD compatibleZvichajni rozshirennya fajliv be bf b93 b98 befungeVebsajtcatseye tc article Languages md befunge 93IstoriyaMova bula stvorena u 1993 roci yak odna z pershih dvovimirnih mov programuvannya zagalnogo priznachennya osnovoyu yakih ye tablicya simvoliv ASCII Takozh isnuye nizka rozshiren do originalnoyi specifikaciyi Befunge 93 sered yakih varto vidiliti Funge 98 yaka rozshiryuye koncepciyu do dovilnoyi kilkosti vimiriv i dozvolyaye bagatopotokove vikonannya vikoristovuyuchi dekilka vkazivnikiv instrukcij sho pracyuyut odnochasno v odnomu prostori Rozshirennya ta riznovidi Befunge nazivayutsya Fungeoids abo prosto Funges Specifikaciya Befunge 93 obmezhuye kozhnu dijsnu programu sitkoyu z 80 instrukcij po gorizontali na 25 instrukcij po vertikali Vikonannya programi sho perevishuye ci mezhi zavertayetsya do vidpovidnoyi tochki z inshogo boku sitki Programa Befunge takim chinom topologichno ekvivalentna toru Oskilki programa Befunge 93 mozhe mati lishe odin stek a znachennya chisel u nomu mayut obmezhennya za rozmirom mova Befunge 93 ne ye povnoyu za Tyuringoim odnak bulo pokazano sho Befunge 93 mozhe buti povnoyu za Tyuringom pri umovi dovilnoyi dovzhini chisla u steku a ne takoyi sho obmezhena tipom danih signed long int yak vkazano u dokumentaciyi do Befunge 93 Piznisha specifikaciya Funge 98 zabezpechuye povnotu Tyuringa shlyahom znyattya obmezhen shodo rozmiru programi zamist togo shob zagortatis poza fiksovanoyi mezhi ruh vkazivnika instrukcij Funge 98 pracyuye za modellyu yaka otrimala nazvu Lahey space na chest jogo avtora Krisa Laheya U cij modeli sitka povoditsya yak tor obmezhenogo rozmiru stosovno zgortki ale pri comu dozvolyaye jomu rozshiryuvatis neskinchenno KompilyaciyaYak zaznachalosya osnovnoyu prichinoyu stvorennya Befunge bulo bazhannya stvoriti movu yaku skladno kompilyuvati Ce bulo zrobleno za dopomogoyu vprovadzhennya minlivogo kodu instrukciya p mozhe zapisuvati novi vkazivki na pole ta bagatovimirnogo polya odna i ta zh instrukciya mozhe vikonuvatisya v chotiroh riznih napryamkah Zgodom ci pereshkodi buli pevnoyu miroyu podolani za dopomogoyu kompilyatoriv Befunge napisanih za novimi vidpovidnimi metodikami Kompilyator bef2c sho vhodit do standartnogo distributivu Befunge 93 vikoristovuye potokovij kod Kozhna instrukciya kompilyuyetsya v fragment kodu S a upravlinnya protikaye cherez fragmenti tak samo yak ce robitsya v interpretatori Befunge Zauvazhte sho kompilyator bef2c ye nevirnim oskilki vin ne obroblyaye ani instrukciyi p ani ryadkovogo rezhimu popri te sho realizuvati ne bulo ye nemozhlivo mova S mozhe prosto buti nepidhodyashoyu dlya cogo Inshim prikladom mozhe buti Cej kompilyator rozglyadaye vsi mozhlivi pryami vkazivki yak pidprogramu i yaksho instrukciya p zminyuye cyu pidprogramu cya pidprograma perekompilyuyetsya Ce cikavij variant JIT kompilyaciyi oskilki bagato vkazivok mozhna vikonuvati v gotovomu kodi ne vtruchayuchis pri comu u rishennya shodo reyestru napryamkiv Zrazok kodu Befunge 93Nizhche navedenij kod dlya generuvannya vipadkovij chisel sho mozhe sluguvati ilyustraciyeyu tehniki vikoristannya strilok dlya zmini keruyuchogo potoku Vkazivnik instrukciyi Befunge pochinayetsya u verhnomu livomu kuti i ruhatimetsya pravoruch yaksho ne bude perenapravlenij za inshim napryamkom Slidom za strilkami navkolo instrukciyi nadsilayut svij vkazivnik u vipadkovih napryamkah poki vin ne potrapit na cifru pomistivshi yiyi u stek Pislya cogo strilki perehodyat do shob vivesti cifru zi steka ta povernuti vkazivnik do pershogo spryamovanogo randomajzera Oskilki vidsutnij simvol dlya pripinennya roboti programi danim kodom generuyetsya neskinchennij potik vipadkovih chisel vid 1 do 9 v gt gt gt gt gt v 12345 gt v v 6789 gt gt gt gt v lt Nastupnij kod ye prikladom standartnoyi programi Hello World Spochatku bukvi olleH zapisuyutsya na vershinu steku yak chisla ASCII Potim voni vihodyat zi steku v poryadku LIFO i vivodyatsya yak tekstovi simvoli shob vivesti slovo Hello Probil simvol z kodom 32 u tablici ASCII tut buduyetsya mnozhennyam chisel 4 i 8 persh nizh vivoditis yak tekst Nevazhko pomititi sho sintaksis operacij realizovano postfiksno tobto spochatku kladutsya chisla yaki berut uchast v operaciyi a todi sam znak operaciyi u comu vipadku mnozhennya Reshta kodu vivodit slovo World analogichnim chinom vijshovshi zi strichkovogo rezhimu operator poslidovno vivodit znachennya z verhivki steku na ekran ta zabiraye yih zi steku pislya chogo simvol z kodom 10 u tablici ASCII simvol peremishennya kursoru na novij ryadok realizuyetsya mnozhennyam chisel 2 i 5 ta vivoditsya na ekran koristuvacha za dopomogoyu operatora Instrukciya zavershuye vikonannya programi gt v v Hello lt gt 48 v v World lt gt 25 Nastupnij kod ye desho uskladnenoyu versiyeyu poperednogo Vin dodaye simvol z kodom 10 u tablici ASCII do steku a potim klade Dlrow olleH do steku Znovu zh taki princip LIFO oznachaye sho H zaraz ye na vershini steku i bude vivedena na ekran pershoyu e drugoyu l tretoyu i tak dopoki stek ne stane porozhnim Dlya druku simvoliv programa rozpochinaye cikl yakij spochatku dublyuye verhnye znachennya na steku tomu teper stek viglyadatime yak n Dlrow olleHH Todi operaciya vidast dublovane znachennya i pide pravoruch yaksho ce nul u inshomu vipadku livoruch Koli znachennya ruhayetsya livoruch verhnye znachennya vivoditsya yak simvol ASCII Potim vin dublyuye nastupnij simvol i ciklichno povertayetsya do testu prodovzhuyuchi drukuvati reshtu steku poki vin ne ye porozhnim i tomu nastupne znachennya sho z yavilosya dorivnyuye nulevi pislya chogo zakinchuye programu gt 25 dlrow olleH v v gt Nastupnij kod ilyustruye vivedennya simvoliv u cikli Tut za dopomogoyu simvolu vidbuvayetsya porivnyannya chisel na kozhnomu kroci dodayuchi 1 shob zbilshiti kilkist simovoliv yaki vivedutsya na ekran Instrukciyeyu mi vkazuyemo kompilyatoru ruhatis vniz yaksho potochne znachennya chisla rivne nulevi a v inshomu vipadku vgoru Ce klasichnij priklad zastosuvannya cikliv u movi Befunge Slid zauvazhiti sho na vidminu vid bilshosti mov programuvnanya tut cikl dijsno viglyadaye yak krugove povtorennya instrukcij z perenapravlennyam yake zdijsnyuyetsya za pevnoyi umovi 1 gt 5 gt v 1 lt 1 5 5 lt Programa gra u yakij potribno vidgadati chislo mayuchi pidkazki u viglyadi menshe bilshe shorazu koli koristuvach namagayetsya vgadati chislo Golovnij koncept vipadkovosti tut realizovano za dopomogoyu instrukciyi yaka prodovzhuye ruh vkazivnika u vipadkovomu napryamku vv lt lt 2 v lt v 1 lt gt 3 v 4 gt gt gt gt 5 vv v 9 lt gt 7 v 6 v v lt 8 gt gt vv lt lt 2 v lt v 1 lt gt 3 v 4 gt gt gt gt 5 vvv 25 lt lt v 9 lt gt 7 v 6 v v lt 8 gt lt gt gt v gt gt 0 Rebmun tupnI gt 25 amp 99 p lt 0 Niw uoY gt 25 lt gt 99 g 01 Programa sho vikonuye perevirku chisla na parnist Za rahunok prostoti vikonannya cogo zavdannya golovnimi operaciyami tut ye dilennya za modulem yake stavit zalishok vid dilennya na vershinu steku vlasne chislo 2 yake znahoditsya u steku z pochatku vikonannya programi dlya vikonannya perevirki na parnist a takozh litera E vid Even angl parne yaka vivedetsya u vipadku pidtverdzhennya parnosti chisla amp 2 52 E Priklad programi z komentaryami Befunge 93 Slid zauvazhiti sho kompilyator propuskatime usi simvoli yaki ne ye komandami ale vidavatime koristuvachevi povidomlennya iz poperedzhennyam sho dana instrukciya ne pidtrimuyetsya amp r ead a n u m be r 4 add f o u r d isp l a y r e s ul t i n l i n e c omm e n t lt b l o c k c omm e n t dd dd Spisok instrukcij Befunge 930 9 Rozmishennya danogo chisla v stek Dodavannya Vidnimannya Mnozhennya Cilochiselne dilennya Ostacha vid dilennya Logichne NE Yaksho znachennya na vershini steku dorivnyuye nulyu to vono zaminyayetsyana 1 v inshomu vipadku na nul Bilshe nizh porivnyannya a i b v stek pomishayetsya 1 yaksho b gt a inakshe nul gt Zsuv pravoruch lt Zsuv livoruch Ruh vgoruv Ruh vniz Ruh u vipadkovomu napryamku Ruhatis pravoruch yaksho znachennya 0 inakshe livoruch Ruhatis vniz yaksho znachennya 0 inakshe vgoru Rezhim zapusku ryadka pomishaye v stek znachennya ASCII kozhnogo simvolu do nastupnogo Pomishaye v stek dublikat vershini Zminyuye dva znachennya na vershini steka Vivid vershini steku ta vidalennya yiyi Vivid vershini steku u viglyadi cilogo chisla a potim probil Vivid simvola sho vidpovidaye ASCII kodu na verhivci steku Propusk nastupnoyi klitinkip PUT zi steku vityaguyutsya koordinati x y ta ASCII kod simvola z cimi koordinatimiyug GET zi steku vityaguyutsya koordinati x ta y U stek pomishayetsya ASCII kod simvola z cimi koordinatami amp Rozmishennya u steku chisla zadanogo koritstuvachem Rozmishennya u steku chisla zadanogo koritstuvachemstuvachem u viglyadi u ASCII kodu Kinec programiNichogo ne robit Bilshist odnovimirnih mov programuvannya vimagayut pevnogo sintaksichnogo rozriznennya tekstu komentarya ta vihidnogo kodu cya vidminnist prisutnya u Befunge adzhe zgidno z pravilom Brainfuck bud yakij simvol yakij ne znahoditsya u nabori lt gt ce komentar Taki movi yak Lisp ta Python traktuyut ryadki yak komentari v kontekstah de znachennya ne vikoristovuyutsya Dlya vbudovuvannya dokumentaciyi v kod programist prosto skerovuye kontrolnij potik navkolo oblasti z komentarem shob tekst u cij oblasti nikoli ne vikonuvavsya Principi komentuvannya zminilis iz vihodom Befunge 98 u yakomu programist mozhe otochiti blok tekstu yakij ne vikoristovuyetsya bezposeredno u programi simvolami sho dast kompilyatoru zrozumiti sho dali sliduye fragment komentariv Divitisya takozhBrainfuck en gra sho napisana podibnoyu movoyu INTERCAL Whitespace Ekzoterichni movi programuvannya Prikladi program na Befunge 4 grudnya 2019 u Wayback Machine Spisok literaturiAis523 18 grudnya 2008 Esolang Arhiv originalu za 2 grudnya 2021 Procitovano 23 sichnya 2014 Oerjan 18 sichnya 2014 Esolang Arhiv originalu za 30 bereznya 2022 Procitovano 23 sichnya 2014 PosilannyaSpecifikaciya Befunge 93 29 listopada 2019 u Wayback Machine Realizaciya dovidnika Befunge 93 7 sichnya 2019 u Wayback Machine Specifikaciya Funge 98 8 serpnya 2020 u Wayback Machine