Вајтспејс (енгл. Whitespace) је езотеричан програмски језик, развијен од стране Едвин Брејди (енгл. Edwin Brady) и Крис Морис (енгл. Chris Morris) на Универзитету у Дурхаму. Представљен је 1. априла 2003. године. Он је назван по карактерима белине (eng. whitespace) (нпр. размак, табулатор). За разлику од већине програмских језика, који игноришу белину или јој дају мало значаја, Вајтспејс интерпретер занемарује све карактере осим белина. Само размак, табулатор, и нови ред имају значење. [1] Занимљива последица ове особине је да се Whitespace програм лако може наћи унутар знакова белине програма који је написан на другом језику, осим можда у језицима који зависе од размака за валидност синтаксе (нпр. Питон), чинећи текст полиглотским.

Вајтспејс
Вајтспејс hello world програм са истицањем синтаксе
  табулатори
  размаци
Оригинални називенгл. Whitespace
Изговара севајтспејс
Моделимперативни, структурни, стек оријентисани, езотерични
Појавио се1. април 2003.
Аутор(и)Едвин Брејди и Крис Морис
Веб-сајтWhitespace
ДокументацијаWhitespace Tutorial

Сам језик је императиван, реализован као стек-машина. Виртуелна машина у којој се програми покрећу има стек и хрпу, и може да обрађује целе бројеве било које величине. Бројеви са покретним зарезом нису имплементирани. Стек се користи за извршавање команди, а хрпа игра улогу складишта променљивих и структура података.

Историја уреди

Вајтспејс су створили 2003. године Едвин Брејди и Крис Морис. Начин рада прилично једноставан, а сам језик нема практичне вредности, тако да нису настали нови дијалекти и опис који су дали аутори је једини постојећи стандард.[2]

Идеју за употребу размака у тексту, односно белине, као оператора у језику C++ предложио је Бјарне Строуструп пет година пре настанка језика Вајтспејс.[3]

Синтакса уреди

Програм се састоји од низа размака (Space, ASCII 32), табулатора (Tab, ASCII 9) и симбола за нови ред (LF, ASCII 10). Ови симболи представљају низ различитих команди. Остали симболи се занемарују и могу се користити за коментаре.

Подаци су представљени у бинарном систему, користећи размаке (0) и табулаторе (1), а затим нови ред. На тај начин, “размак-размак-размак-табулатор-размак-табулатор-табулатор-нови ред” је бинарни број 0001011, односно 11 у декадном запису.

Команде се састоје од токена, почев од префикса, који опредељује тип команде и код команде.[4] У следећој табели су наведени сви префикси.

Префикс Значење
[Размак] Манипулација стека
[Табулатор][Размак] Аритметичке операције
[Табулатор][Табулатор] Доступ хрпи
[Нови ред] Контрола тока
[Табулатор][Нови ред] Улаз/Излаз

Сваки префикс је праћен једном од дефинисаних операција за тај префикс. На пример, "табулатор-размак-размак-размак" извршава аритметичко сабирање прва два елемената стека.[5]

Пример кода уреди

Следеће је Вајтспејс програм са коментарима, који исписује "Hello, world!", где се испред сваког размака, табулатора, или новог реда налази индентификациони коментар "Р", "Т", или "Л" респективно:

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

Имајте на уму да када је Вајтспејс код приказан у неким веб-прегледачима, хоризонтални размак произведен табулатором није константан, већ зависи од његовог положаја у тексту у односу на сљедећ. У зависности од софтвера, може се десити да се табулатори замене и одговарајућим променљивим бројем размака.

Испод се налази још један пример Вајтспејс програма. Он израчунава бројеве фибоначијевог низа.

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

Види још уреди

  • Стеганографија, техника скривања порука у другим порукама
  • Питон, најпознатији пример програмског језика у коме су белине синтаксно битне
  • Езотерични програмски језици
    • Brainfuck, користи само осам једноставних команди
    • INTERCAL, компајлерски језик без изговорљивог акронима, пародија на језике и идеје из 60-их
    • LOLCODE, језик са синтаксом заснованом на интернет-мему
    • Malbolge, језик који је дизајниран да буде скоро немогуће програмирати у њему

Референце уреди

  1. ^ „Whitespace”. Compsoc. Архивирано из оригинала 01. 11. 2015. г. Приступљено 13. 10. 2018. 
  2. ^ „Whitespace”. progopedia alpha. Архивирано из оригинала 30. 09. 2018. г. Приступљено 13. 10. 2018. 
  3. ^ Строуструп, Бјарне. „Generalizing Overloading for C++2000” (PDF). Florham Park, NJ, USA: AT&T Labs. Приступљено 17. 10. 2018. 
  4. ^ „Whitespace Туторијал”. Compsoc. Архивирано из оригинала 01. 11. 2015. г. Приступљено 13. 10. 2018. 
  5. ^ Whitespace туторијал Архивирано 2015-11-01 на сајту Wayback Machine

Спољашње везе уреди