Back

ⓘ Бефунџ




                                     

ⓘ Бефунџ

Језик је направљен за фамилију рачунара Амига, као покушај да направи језик који је компилатору што теже превести. Написано је неколико компајлера. Оригинални Бефунџ знани као "Befunge-93" има много наследника. Најближи рођак му је Befunge-98 из Funge-98 фамилије језика. Сваки Фунџ проширује концепт Бефунџ на више димензија Оригинална спецификација језика је ограничавала величину мреже на којој се језик може писати, што значи да Бефунџ није Тјуринг комплетан језик за разлику од других езотеричних језика. Као и сви други езотерични језици он нема употребну вредност. Као што је наглашено оригиналани програм није био Тјуринг-потпун али верзија Befunge-98 је Тјрунг-потпуна тако што су скинуте рестрикције величине програма, уместо да се умотава на фиксној вредности, померање инструкција Befunge-98 прати модел назван "Lahey-space" названом по његовом творцу, у овом моделу, мрежа се понаша као торус.

                                     

1. Компилација

Као што је наведено, дизајн циљ за Бефунџа био је створити језик који је био тешко компилирати. Ово је реализовано две главне карактеристике:

само-модификовање - п инструкција може написати нове инструкције у програм; мултидимензионално - исто упутство се може извршити у четири различита контекста у лево-десном низу инструкција, или десно-на-лево или горе или надоле.

Ипак, ове препреке су до неке мере превазиђене, а Бефунџ компилатори су написани, користећи одговарајуће технике.

Компилатор Bf2c који је укључен у стандардну Befunge-93 дистрибуцију користи навојну шифру: свака инструкција је сакупљена на одломак Ц кода, а контрола протиче кроз одрезке баш као што то ради у Бефунџ тумачу то је условно на вредност неких регистар смера. Ово не резултира значајним предностима над добрим преводиоцем. Имајте на уму да bf2c компајлер није тачан, јер се не рукује н исправно, али то не би било немогуће учинити иако језик C можда није погодан за ово.

Компилатор Betti, на пример, третира сваку могућу праву линију инструкција као подпрограм, и ако п инструкција мења тај подпрограм, тај подпрограм се поново компајлира. Ово је интересантна варијација у компилацији управо у времену и резултира много боље предностима над преводиоцем, пошто се многа упутства могу извршити у изворном коду, без интерних одлука у регистру смер.

Компилатори Befunit и Bait, слично компајлеру Betti, поделили су изворни код у подпрограме који су раније сакупљени и извршени. Оне, међутим, деле изворну таблу на "статичке стазе" - кодне стазе које не садрже упутства која условно мењају правац тј. |, _ Или?. "Статичке стазе" могу проћи на више ћелија од "правих путева" Бетти-а, што доводи до мањег и дужег потпрограма. Стога, постоји мање контекстних скокова између компајлера и компајлираног кода и омогућава више оптимизација.

                                     

2. Повезани језици

Бефунџ је претходио 1991. године сличном, али мање карактеристичаном, језику Биота, који је дизајниран за експерименте у саморепродукцији. Следио је убрзо након 1994. године још један сличан језик Ортагонал, чији дизајн је подстакнут дискусијом о алт.фолклор.компјутерс. Сваки од ова три језика настао је потпуно независно од остала два.

Бефунџ је такође пружио инспирацију за дизајн следећих језика, а најсличнији од њих су познати као фунгеоиди. Већина језика није довољно слична да се назива директним потомцима, али често аутор спомиње утицај Бефунгџа у пратећем коментару. Такви језици укључују Вирд, дводимензионални Туринг тарпи; Бефрјк, реверзибилни језик; и ПАТХ, који комбинује елементе Браинфуцк-а.

                                     

3. Преглед језика

Бефунџ програм се састоји од дводимензионалне мреже одрећене величине. Мрежа се иницијално напуни инструкцијама програма. Такоће она може служити и као складиште које се може допуњивати. 1 Покретање почиње уз помоћ показивача на инструкцију. Показивач почиње на одрећеној локацији горњи леви угао мреже и иницијално путује у одрећеном смеру десно. Када дође до инструкције, он је извршава. Пример бесконачне петље:

> v ^
                                     

4. Инструкције"Befunge 93"

Већина једно-димензијалних програма имају синтаксичку разлику измећу текста коментара и кода програма, у Бефунџ-у нема синтаксе за коментар. Програмер наведе ток програма око коментара тако да текст коментара никада неће бити извршаван.

                                     

5. Примери неких једноставних програма

Дна-код

> 78*vD v$_#> vN 7>! A 3:v?v 9 "" 4+1ACGT +,"" > ^^ < < < <

Ератостеново сито

2>:3g" "-!v\ g30 < |!`"O":+1_.:03p> 03g+:"O"`| ^ p3\" ": < 2 234567890123456789012345678901234567890123456789012345678901234567890123456789