BeFunge

BeFungeezoteryczny język programowania opracowany w 1993 roku przez Chrisa Pressey’a[1].

Programy w nim, w odróżnieniu od większości języków programowania, są zorganizowane w dwuwymiarowej tablicy. Instrukcje „strzałkowe” (< > ^ v) powodują przeniesienia sterowania, a pętle są tworzone poprzez zorganizowanie sterowania „w kółko”. Każda instrukcja w BeFunge jest oznaczana pojedynczym znakiem[1].

W języku BeFunge program wykonuje się czytając instrukcje, poruszając się po dwuwymiarowym obszarze. Zatem „licznik programu” składa się z dwóch liczb, oznaczających współrzędne na tablicy programu. Natomiast do przenoszenia i przechowywania wszelkich danych służy stos (obsługiwany zresztą na podobnych zasadach co w językach Forth i False).

W 1998 Chris rozszerzył język, dodają nowe funkcje. Dlatego pierwotna wersja nazywana jest często BeFunge-93[1].

Kompilatory BeFunge

Autorem BeFunge jest Chris Pressey, który stworzył ten język w 1993, w zamierzeniu jako język o niezwykle trudnym do napisania kompilatorze.

Poza kompilatorami dla BeFunge-93 istnieją też kompilatory z odpowiednimi rozszerzeniami. Wartym uwagi jest Funge-98, w którym programy można organizować w przestrzeniach dowolnego wymiaru (dla 1 Unifunge, dla 2 BeFunge, dla 3 TreFunge itd.), a nawet posiada programowanie wielowątkowe, czyli w całej przestrzeni może być więcej niż jeden „licznik programu”. Tego typu rozszerzenia są zwane Fungeoidami.

Główne cechy języka Befunge

  • interaktywność – język ma wbudowaną prostą operację wejścia, umożliwiającą zapytanie użytkownika o daną (znak lub liczbę),
  • brak symboli – język nie definiuje symboli, w szczególności nie ma w nim możliwości deklarowania stałych, zmiennych i podprogramów,
  • mechanizm samomodyfikowania się programu.

Instrukcje

Instrukcje, podobnie jak w języku Forth operują wyłącznie na stosie, tzn. argumenty operacji są zbierane ze stosu, wynik operacji jest odrzucany na stos.

Instrukcje sterujące
> Kieruje wskaźnik w prawo.
< Kieruje wskaźnik w lewo.
v Kieruje wskaźnik w dół.
^ Kieruje wskaźnik do góry.
? Ustawia losowy kierunek dalszej interpretacji.
# Przeskakuje następną instrukcję.
@ Zatrzymuje interpretację (kończy program).
Instrukcje sterujące warunkowe
_ Warunkowa zmiana kierunku na poziomy: zdejmuje liczbę ze stosu i działa jak > jeśli liczbą tą było 0, albo jak < w przeciwnym razie.
| Warunkowa zmiana kierunku na pionowy: zdejmuje liczbę ze stosu i działa jak v jeśli liczbą tą było 0, albo jak ^ w przeciwnym razie.
Instrukcje obliczeniowe
+ Dodawanie (zdejmuje dwie liczby ze szczytu stosu i wkłada ich sumę na stos).
Odejmowanie (zdejmuje dwie liczby i wkłada ich różnicę).
* Mnożenie (zdejmuje dwie liczby i wkłada ich iloczyn).
/ Dzielenie (zdejmuje dwie liczby i wkłada ich iloraz).
% Modulo (zdejmuje dwie liczby i wkłada resztę z ich dzielenia).
! Negacja logiczna (jeśli liczbą na szczycie stosu jest 0, zastępuje ją liczbą 1, w przeciwnym razie zastępuje ją liczbą 0).
` Porównanie „większe” (zdejmuje dwie liczby i wkłada 1, jeśli pierwsza była większa, albo 0 w przeciwnym razie).
: Podwaja liczbę na szczycie stosu.
\ Zamienia kolejność dwu najwyższych danych (znajdujących się na szczycie stosu).
$ Zdejmuje daną ze szczytu stosu i odrzuca (ignoruje) ją.
Operacje wejścia i wyjścia
0...9 Wkłada liczbę (jednocyfrową) na stos.
" Wkłada na stos kolejne napotykane znaki aż do ponownego napotkania znaku ".
. Zdejmuje daną ze szczytu stosu i wypisuje na wyjście (ekran) jako liczbę.
, Zdejmuje daną ze szczytu stosu i wypisuje na wyjście (ekran) jako znak.
& Pyta użytkownika o liczbę i wkłada ją na szczyt stosu.
~ Pyta użytkownika o znak i wkłada go na szczyt stosu.
Manipulacje na treści programu
g Zdejmuje ze stosu dwie liczby, i używając ich jako współrzędnych do tablicy programu odczytuje znak z treści programu i umieszcza go na stosie.
p Zdejmuje ze stosu dwie liczby oraz znak, i używając tych liczb jako współrzędnych do tablicy programu umieszcza znak w treści programu.

Przykłady

Program, który wyświetla pseudolosowe cyfry w nieskończonej pętli:

 vv  <      <
     2
     ^  v<
  v1<?>3v4
     ^   ^
 >  >?>  ?>5^
     v   v
  v9<?>7v6
     v  v<
     8
  .  >  >   ^
 ^<

Program wyświetlający „Hello world!”:

>              v
v"Hello world!"<
> ,,,,,,,,,,,, @

Przypisy

  1. a b c Tim Fischer: Befunge-93 in SQL: (Ab-)Using SQL’s Turing Completeness. [dostęp 2024-05-29].

Linki zewnętrzne

  • Befunge-93 online interpreter [online] [dostęp 2021-12-10] (ang.).

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya