Пробел (язык программирования) - Whitespace (programming language)
Пробел является эзотерический язык программирования разработан Эдвином Брэди и Крисом Моррисом в Даремский университет (также разработчики Кая и Идрис языки программирования). Он был выпущен 1 апреля 2003 г. (День дурака ). Его название является ссылкой на пробельные символы. В отличие от большинства языков программирования, которые игнорируют или присваивают мало значения большинству пробельных символов, интерпретатор пробелов игнорирует любые непробельные символы. Только пробелы, вкладки и перевод строки имеют значение.[1] Следствием этого свойства является то, что программа с пробелами может легко содержаться внутри пробельных символов программы, написанной на другом языке, за исключением, возможно, языков, которые зависят от пробелов для допустимости синтаксиса, таких как Python, делая текст полиглот.
В язык сам по себе императив стековый язык. В виртуальная машина на котором выполняются программы, имеет стек и куча. Программист может помещать в стек целые числа произвольной ширины (в настоящее время не существует реализации чисел с плавающей запятой), а также может обращаться к куче как к постоянному хранилищу переменных и структуры данных.
История
Whitespace был создан Эдвином Брэди и Крисом Моррисом в 2002 году. Slashdot дал обзор этого язык программирования 1 апреля 2003 г.[2]
Идея использования пробелов в качестве операторов для C ++ язык был в шутку предложен пятью годами ранее Бьярне Страуструп.[3]
Синтаксис
Команды состоят из последовательностей пробелов, позиций табуляции и перевода строки. Например, табуляция-пробел-пробел-пробел выполняет арифметическое сложение двух верхних элементов в стеке. Данные представлены в двоичный использование пробелов (0) и табуляции (1) с последующим переводом строки; таким образом, пробел-пробел-пробел-табуляция-табуляция-табуляция-перевод строки - это двоичное число 0001011, которое в десятичной форме равно 11. Все остальные символы игнорируются и поэтому могут использоваться для комментариев.
Код написан как Параметр модификации инструкции (IMP) с последующей операцией.[4] В таблице ниже показан список всех IMP в пробелах.
IMP | Смысл |
---|---|
[Космос] | Управление стеком |
[Tab] [Пробел] | Арифметика |
[Tab] [Tab] | Доступ к куче |
[LineFeed] | Управление потоком |
[Tab] [LineFeed] | Ввод / вывод |
За каждым IMP следует одна операция, определенная для этого IMP, и параметр, если необходимо. Список операций, поддерживаемых в Whitespace:[4]
IMP | Команда | Параметр | Смысл |
---|---|---|---|
[Космос] | [Космос] | Число | Положите число в стопку |
[Космос] | [LF] [Пробел] | - | Дублируйте верхний элемент в стопке |
[Космос] | [LF] [Tab] | - | Поменяйте местами два верхних элемента в стеке |
[Космос] | [LF] [LF] | - | Отбросить верхний предмет в стопке |
[Tab] [Пробел] | [Пробел] [Пробел] | - | Добавление |
[Tab] [Пробел] | [Пробел] [Tab] | - | Вычитание |
[Tab] [Пробел] | [Пробел] [LF] | - | Умножение |
[Tab] [Пробел] | [Tab] [Пробел] | - | Целочисленное деление |
[Tab] [Пробел] | [Tab] [Tab] | - | По модулю |
[Tab] [Tab] | [Космос] | - | Хранить в куче |
[Tab] [Tab] | [Tab] | - | Получить из кучи |
[LF] | [Пробел] [Пробел] | метка | Отметьте место в программе |
[LF] | [Пробел] [Tab] | метка | Вызов подпрограммы |
[LF] | [Пробел] [LF] | метка | Перейти к ярлыку |
[LF] | [Tab] [Пробел] | метка | Перейти к метке, если верх стека равен нулю |
[LF] | [Tab] [Tab] | метка | Перейти к метке, если верх стопки отрицательный |
[LF] | [Tab] [LF] | - | Завершить подпрограмму и передать управление вызывающей стороне |
[LF] | [LF] [LF] | - | Завершить программу |
[Tab] [LF] | [Пробел] [Пробел] | - | Вывести символ вверху стека |
[Tab] [LF] | [Пробел] [Tab] | - | Выведите число вверху стопки |
[Tab] [LF] | [Tab] [Пробел] | - | Прочтите символ и поместите его в место, указанное в верхней части стопки |
[Tab] [LF] | [Tab] [Tab] | - | Прочтите число и поместите его в место, указанное в верхней части стопки |
Образец кода
Ниже приведена программа с комментариями для пробелов, которая просто печатает "Привет, мир!", где каждый Космос, Вкладка, или символу перевода строки предшествует идентифицирующий комментарий «S», «T» или «L» соответственно:
S S S Т S S Т S S S L Т L S S S S S Т Т S S Т S Т L Т L S S S S S Т Т S Т Т S S L Т L S S S S S Т Т S Т Т S S L Т L S S S S S Т Т S Т Т Т Т L Т L S S S S S Т S Т Т S S L Т L S S S S S Т S S S S S L Т L S S S S S Т Т Т S Т Т Т L Т L S S S S S Т Т S Т Т Т Т L Т L S S S S S Т Т Т S S Т S L Т L S S S S S Т Т S Т Т S S L Т L S S S S S Т Т S S Т S S L Т L S S S S S Т S S S S Т L Т L S S L L L
Обратите внимание, что когда в некоторых браузерах отображается исходный код Whitespace, горизонтальный интервал, создаваемый символом табуляции, не фиксируется, а зависит от его положения в тексте относительно следующего горизонтальная табуляция. В зависимости от программного обеспечения символы табуляции также могут быть заменены соответствующим переменным количеством пробелов.
Смотрите также
- Полиглот, программа действительна более чем на одном языке
- Стеганография, метод сокрытия сообщения внутри другого сообщения
- Внешние языки правил, где блоки выражаются отступом от пробелов
- Python, самый известный пример языка с синтаксически значимыми пробелами
- Эзотерические языки программирования
Рекомендации
- ^ "Пробел". Compsoc. Архивировано из оригинал 1 ноября 2015 г.. Получено 26 октября 2015.
- ^ Тимофей (1 апреля 2003 г.). «Новый язык программирования, использующий только пробелы». Slashdot. Получено 23 января 2014.
- ^ Страуструп, Бьярн. «Обобщение перегрузки для C ++ 2000» (PDF). Флорхэм Парк, Нью-Джерси, США: AT&T Labs. Получено 23 января 2014.
- ^ а б "Учебник по пробелам". CompSoc.dur.ac.uk. Архивировано из оригинал 1 ноября 2015 г.. Получено 8 декабря 2015.
внешняя ссылка
- Официальный веб-сайт
- Объявление о выпуске на Slashdot
- Коллекция интерпретаторов пробелов на разных скриптовых языках
- Acme :: отбеливатель А Perl модуль, который перезаписывает тело вашего модуля в кодировке только с пробелами ("для В самом деле чистые программы »).