Whitespace: различия между версиями
(Новая страница: «{{Карточка языка программирования |Description=Язык программирования, в котором для управляющих конструкций используются только непечатаемые символы, а именно: пробел, перевод строки и табуляция. |Purpose=Язык общего назначения |Visual_Text_Blocks=Текст |Field_of_knowledge=Инфо...») |
|||
Строка 7: | Строка 7: | ||
|Address=https://web.archive.org/web/20080331083700/http://compsoc.dur.ac.uk/whitespace/ | |Address=https://web.archive.org/web/20080331083700/http://compsoc.dur.ac.uk/whitespace/ | ||
|Remixing=Нет | |Remixing=Нет | ||
|launch year= | |launch year=2002 | ||
|Inventor=Эдвин Брэди (Edwin Brady), Крис Моррис (Chris Morris) | |Inventor=Эдвин Брэди (Edwin Brady), Крис Моррис (Chris Morris) | ||
|ForMobileApps=Нет | |ForMobileApps=Нет | ||
}} | }} | ||
[[Файл:Whitespace с подсветкой синтаксиса.png|обрамить|справа|Whitespace с подсветкой синтаксиса Vim (синий - табуляция, красный - пробел)]] | |||
== Появление == | |||
Данный изотерический язык был разработан в 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''' - ввод/вывод | |||
===== Список возможных команд ===== | |||
{| class="wikitable" | |||
! 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 |
Текущая версия на 20:16, 19 декабря 2024
Краткое описание языка | Язык программирования, в котором для управляющих конструкций используются только непечатаемые символы, а именно: пробел, перевод строки и табуляция. |
---|---|
Компетенции в каких сферах формирует | |
Парадигмы программирования | |
Возрастная категория | |
Назначение языка (Общее / Учебное) | Язык общего назначения |
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