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 упоминается в свойствах следующих страниц


Whitespace с подсветкой синтаксиса Vim (синий - табуляция, красный - пробел)

Появление

Данный изотерический язык был разработан в 2002 года двумя студентами Даремского университета. Сама идея языка, в котором пробелы используются как операторы была предложена Бьерном Страуструпом (разработчик языка программирования C++) в 1997 году. Кратковременную популярность язык обрел после 1 апреля 2003 года, после того как о нем написали статью на Slashdot (/.) - сайте с новостями из мира науки, технологий и политики.

Синтаксис

Для упрощения читаемости далее используются обозначения: S - пробел, T - табуляция, L - перенос строки

Каждая команда в Whitespace состоит из трех частей:

  1. IMP (Instruction Modification Parameter) - параметр, указывающий к какой из 5 групп относится команда (позволяет увеличить общее количество допустимых команд)
  2. Оператор
  3. Аргументы (при наличии)
Представление двоичных чисел

Зачастую в качестве аргументов используются двоичные числа. Для их представления используется следующая система:

  • 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