Vajtspejs (engl. Whitespace) je ezoteričan programski jezik, razvijen od strane Edvin Brejdi (engl. Edwin Brady) i Kris Moris (engl. Chris Morris) na Univerzitetu u Durhamu. Predstavljen je 1. aprila 2003. godine. On je nazvan po karakterima beline (eng. whitespace) (npr. razmak, tabulator). Za razliku od većine programskih jezika, koji ignorišu belinu ili joj daju malo značaja, Vajtspejs interpreter zanemaruje sve karaktere osim belina. Samo razmak, tabulator, i novi red imaju značenje. [1] Zanimljiva posledica ove osobine je da se Whitespace program lako može naći unutar znakova beline programa koji je napisan na drugom jeziku, osim možda u jezicima koji zavise od razmaka za validnost sintakse (npr. Piton), čineći tekst poliglotskim.

Vajtspejs
Vajtspejs hello world program sa isticanjem sintakse
  tabulatori
  razmaci
Originalni nazivengl. Whitespace
Izgovara sevajtspejs
Modelimperativni, strukturni, stek orijentisani, ezoterični
Pojavio se1. april 2003.
Autor(i)Edvin Brejdi i Kris Moris
Veb-sajtWhitespace
DokumentacijaWhitespace Tutorial

Sam jezik je imperativan, realizovan kao stek-mašina. Virtuelna mašina u kojoj se programi pokreću ima stek i hrpu, i može da obrađuje cele brojeve bilo koje veličine. Brojevi sa pokretnim zarezom nisu implementirani. Stek se koristi za izvršavanje komandi, a hrpa igra ulogu skladišta promenljivih i struktura podataka.

Istorija

uredi

Vajtspejs su stvorili 2003. godine Edvin Brejdi i Kris Moris. Način rada prilično jednostavan, a sam jezik nema praktične vrednosti, tako da nisu nastali novi dijalekti i opis koji su dali autori je jedini postojeći standard.[2]

Ideju za upotrebu razmaka u tekstu, odnosno beline, kao operatora u jeziku C++ predložio je Bjarne Stroustrup pet godina pre nastanka jezika Vajtspejs.[3]

Sintaksa

uredi

Program se sastoji od niza razmaka (Space, ASCII 32), tabulatora (Tab, ASCII 9) i simbola za novi red (LF, ASCII 10). Ovi simboli predstavljaju niz različitih komandi. Ostali simboli se zanemaruju i mogu se koristiti za komentare.

Podaci su predstavljeni u binarnom sistemu, koristeći razmake (0) i tabulatore (1), a zatim novi red. Na taj način, “razmak-razmak-razmak-tabulator-razmak-tabulator-tabulator-novi red” je binarni broj 0001011, odnosno 11 u dekadnom zapisu.

Komande se sastoje od tokena, počev od prefiksa, koji opredeljuje tip komande i kod komande.[4] U sledećoj tabeli su navedeni svi prefiksi.

Prefiks Značenje
[Razmak] Manipulacija steka
[Tabulator][Razmak] Aritmetičke operacije
[Tabulator][Tabulator] Dostup hrpi
[Novi red] Kontrola toka
[Tabulator][Novi red] Ulaz/Izlaz

Svaki prefiks je praćen jednom od definisanih operacija za taj prefiks. Na primer, "tabulator-razmak-razmak-razmak" izvršava aritmetičko sabiranje prva dva elemenata steka.[5]

Primer koda

uredi

Sledeće je Vajtspejs program sa komentarima, koji ispisuje "Hello, world!", gde se ispred svakog razmaka, tabulatora, ili novog reda nalazi indentifikacioni komentar "R", "T", ili "L" respektivno:

Р Р Р Т	Р Р Т	Р Р Р Л
Т	Л
Р Р Р Р Р Т	Т	Р Р Т	Р Т	Л
Т	Л
Р Р Р Р Р Т	Т	Р Т	Т	Р Р Л
Т	Л
Р Р Р Р Р Т	Т	Р Т	Т	Р Р Л
Т	Л
Р Р Р Р Р Т	Т	Р Т	Т	Т	Т	Л
Т	Л
Р Р Р Р Р Т	Р Т	Т	Р Р Л
Т	Л
Р Р Р Р Р Т	Р Р Р Р Р Л
Т	Л
Р Р Р Р Р Т	Т	Т	Р Т	Т	Т	Л
Т	Л
Р Р Р Р Р Т	Т	Р Т	Т	Т	Т	Л
Т	Л
Р Р Р Р Р Т	Т	Т	Р Р Т	Р Л
Т	Л
Р Р Р Р Р Т	Т	Р Т	Т	Р Р Л
Т	Л
Р Р Р Р Р Т	Т	Р Р Т	Р Р Л
Т	Л
Р Р Р Р Р Т	Р Р Р Р Т	Л
Т	Л
Р Р Л
Л
Л

Imajte na umu da kada je Vajtspejs kod prikazan u nekim veb-pregledačima, horizontalni razmak proizveden tabulatorom nije konstantan, već zavisi od njegovog položaja u tekstu u odnosu na sljedeć. U zavisnosti od softvera, može se desiti da se tabulatori zamene i odgovarajućim promenljivim brojem razmaka.

Ispod se nalazi još jedan primer Vajtspejs programa. On izračunava brojeve fibonačijevog niza.

Р Р Р Т	Л
Р Р Т	Т	Р Р Р Р Л
Т	Т	Р Р Р Р Т	Р Л
Р Р Р Т	Р Т	Т	Р Р Л
Т	Т	Р Р Р Р Т	Т	Л
Р Р Р Т	Р Р Р Р Р Л
Т	Т	Р Р Р Р Т	Р Р Л
Р Р Т	Р Л
Т	Т	Р Р Р Р Т	Р Т	Л
Р Р Р Т	Л
Т	Т	Р Л
Р Р Р Л
Р Р Р Т	Р Т	Л
Р Р Р Т	Р Р Л
Т	Т	Т	Р Р Р Т	Р Р Л
Р Л
Р Р Р Р Т	Р Т	Л
Т	Т	Т	Р Л
Р Т	Л
Р Т	Р Р Р Т	Р Л
Т	Т	Т	Т	Л
Р Р Р Р Р Т	Т	Л
Т	Т	Т	Т	Л
Р Р Т	Т	Р Т	Т	Т	Т	Р Р Р Т	Т	Р Р Р Р Т	Л
Р Л
Р Р Л
Р Р Л
Р Т	Т	Т	Т	Р Р Р Т	Т	Р Т	Т	Т	Л
Т	Т	Р Л
Р Р Р Т	Р Т	Р Л
Р Р Р Т	Р Т	Т	Т	Р Л
Р Л
Р Р Л
Р Т	Л
Р Р Т	Л
Р Р Т	Л
Р Р Т	Л
Р Р Л
Л
Л

Vidi još

uredi

Reference

uredi
  1. ^ „Whitespace”. Compsoc. Arhivirano iz originala 01. 11. 2015. g. Pristupljeno 13. 10. 2018. 
  2. ^ „Whitespace”. progopedia alpha. Arhivirano iz originala 30. 09. 2018. g. Pristupljeno 13. 10. 2018. 
  3. ^ Stroustrup, Bjarne. „Generalizing Overloading for C++2000” (PDF). Florham Park, NJ, USA: AT&T Labs. Pristupljeno 17. 10. 2018. 
  4. ^ „Whitespace Tutorijal”. Compsoc. Arhivirano iz originala 01. 11. 2015. g. Pristupljeno 13. 10. 2018. 
  5. ^ Whitespace tutorijal Arhivirano 2015-11-01 na sajtu Wayback Machine

Spoljašnje veze

uredi
  NODES
INTERN 1