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