Whitespace
| Краткое описание языка | Язык программирования, в котором для управляющих конструкций используются только непечатаемые символы, а именно: пробел, перевод строки и табуляция. |
|---|---|
| Компетенции в каких сферах формирует | |
| Парадигмы программирования | |
| Возрастная категория | |
| Назначение языка (Общее / Учебное) | Язык общего назначения |
| Visual_Text_Blocks | Текст |
| Измерение (2D/3D/Tangible) | |
| Область знаний | Информатика |
| Открытость продукта | Открытый |
| Address | https://web.archive.org/web/20080331083700/http://compsoc.dur.ac.uk/whitespace/ |
| Предки (Ancestors) | |
| Потомки (Descendants) | |
| Активность в данный момент | |
| Доступны ремиксы? | Нет |
| Год создания | 2002 |
| Создатели | Эдвин Брэди (Edwin Brady), Крис Моррис (Chris Morris) |
| Поясняющее видео | |
| Используется для создания мобильных приложений? | Нет |
- Whitespace упоминается в свойствах следующих страниц

Появление
Данный изотерический язык был разработан в 2002 года двумя студентами Даремского университета. Сама идея языка, в котором пробелы используются как операторы была предложена Бьерном Страуструпом (разработчик языка программирования C++) в 1997 году. Кратковременную популярность язык обрел после 1 апреля 2003 года, после того как о нем написали статью на Slashdot (/.) - сайте с новостями из мира науки, технологий и политики.
Синтаксис
Для упрощения читаемости далее используются обозначения: S - пробел, T - табуляция, L - перенос строки
Каждая команда в Whitespace состоит из трех частей:
- IMP (Instruction Modification Parameter) - параметр, указывающий к какой из 5 групп относится команда (позволяет увеличить общее количество допустимых команд)
- Оператор
- Аргументы (при наличии)
Представление двоичных чисел
Зачастую в качестве аргументов используются двоичные числа. Для их представления используется следующая система:
- S/T - +/- (первый символ числа)
- S/T - 0/1
- L - конец числа (последний символ числа)
Представление символов
Для представления символов используется таблица кодировки ASCII
IMP
Всего существует 5 видов IMP, каждому из которых соответствует группа из уникальных команд:
- S - манипуляции со стеком (
- L - контроль потока
- TT - доступ к куче
- TS - арифметические действия
- TL - ввод/вывод
Список возможных команд
| IMP | Оператор | Параметр | Значение |
|---|---|---|---|
| S | S | Число | Добавить число в стек |
| S | LS | - | Дублировать верхний элемент стека |
| S | TS | Число | Копировать n-ый элемент стека (указанный аргументом) на вершину стека |
| S | LT | - | Поменять местами два верхних элемента стека |
| S | LL | - | Удалить верхний элемент из стека |
| S | TL | Число | Сместить n элементов из стека, сохраняя верхний элемент |
| L | S | Метка | Отметить местоположение в программе |
| L | ST | Метка | Вызвать подпрограмму |
| L | SL | Метка | Перейти к метке |
| L | TS | Метка | Перейти к метке если верхний элемент стека равен 0 |
| L | TT | Метка | Перейти к метке, если верхний элемент стека отрицательный |
| L | T | - | Завершить подпрограмму и передать управление вызывающему |
| L | L | - | Завершить программу |
| TT | S | - | Сохранить в куче |
| TT | T | - | Извлечь из кучи |
| TS | SS | - | Сложение |
| TS | ST | - | Вычитание |
| TS | SL | - | Умножение |
| TS | TS | - | Целочисленное деление |
| TS | TT | - | Остаток от деления |
| TL | SS | - | Вывести символ из верхнего элемента стека |
| TL | ST | - | Вывести число из верхнего элемента стека |
| TL | TS | - | Считать символ и поместить его в место, указанное верхним элементом стека |
| TL | TT | - | Считать число и поместить его в место, указанное верхним элементом стека |
Пример кода
Следующий код выводит в консоль сообщение "Hello, world of spaces!"
SSSSLSSSTSSTSSSLTTSSSSTLSSSTTSSTSTLTTSSSSTSLSSSTTSTTSSLTTSSSSTTLSSSTTSTTSSLTTSSSSTSSLSSSTTSTTTTLTTSSSSTSTLSSSTSTTSSLTTSSSSTTSLSSSTSSSSSLTTSSSSTTTLSSSTTTSTTTLTTSSSSTSSSLSSSTTSTTTTLTTSSSSTSSTLSSSTTTSSTSLTTSSSSTSTSLSSSTTSTTSSLTTSSSSTSTTLSSSTTSSTSSLTTSSSSTTSSLSSSTSSSSSLTTSSSSTTSTLSSSTTSTTTTLTTSSSSTTTSLSSSTTSSTTSLTTSSSSTTTTLSSSTSSSSSLTTSSSSTSSSSLSSSTTTSSTTLTTSSSSTSSSTLSSSTTTSSSSLTTSSSSTSSTSLSSSTTSSSSTLTTSSSSTSSTTLSSSTTSSSTTLTTSSSSTSTSSLSSSTTSSTSTLTTSSSSTSTSTLSSSTTTSSTTLTTSSSSTSTTSLSSSTSSSSTLTTSSSSTSTTTLSSSSLTTSSSSSLLSTSTTTSTTTSTTTSSTSSTTSTSSTSTTTSTSSSTTSSTSTLLSTSTTSTTTSSTTSSTSTSTTTSTTTSTTSTTSSSTTSTSSTSTTSTTTSSTTSSTSTLLLLLSSSTTSSSSTSTTSSTSSSTTSSTSSLTSSSLTLLSSSTTTSTTTSTTTSSTSSTTSTSSTSTTTSTSSSTTSSTSTLSLSTTTSLSLTSSTTTSTTTSTTTSSTSSTTSTSSTSTTTSTSSSTTSSTSTSTSTTTTTSTTSSTSTSTTSTTTSSTTSSTSSLTLSSSSSTLTSSSLSLSTTTSTTTSTTTSSTSSTTSTSSTSTTTSTSSSTTSSTSTLLSSSTTTSTTTSTTTSSTSSTTSTSSTSTTTSTSSSTTSSTSTSTSTTTTTSTTSSTSTSTTSTTTSSTTSSTSSLSLLSLLLTLLSSSTTTSSTSSTTSSTSTSTTSSSSTSTTSSTSSLSLSSLSTLTSTTTSLSSSSTSTSLTSSTLTSSTTTSSTSSTTSSTSTSTTSSSSTSTTSSTSSSTSTTTTTSTTSSTSTSTTSTTTSSTTSSTSSLSLLSSSTLTSSSLSLSTTTSSTSSTTSSTSTSTTSSSSTSTTSSTSSLLSSSTTTSSTSSTTSSTSTSTTSSSSTSTTSSTSSSTSTTTTTSTTSSTSTSTTSTTTSSTTSSTSSLSLLSSSTLTSSSSSSSLTTSLTLLSSSTTSTTTSSTTSSTSTSTTTSTTTSTTSTTSSSTTSTSSTSTTSTTTSSTTSSTSTLSSSTSTSLSSSTTSTLTLSSTLSSLT
