Есть ли какое -либо практическое использование для эзотерического языка?

StackOverflow https://stackoverflow.com/questions/1508581

  •  19-09-2019
  •  | 
  •  

Вопрос

Вы знаете какой -либо пример эзотерический язык Используется для написания какой-либо практической, реальной программы? Есть ли какой -либо, какой бы неясной, область информатики, где эзотерический язык фактически оказался полезным для решения конкретной проблемы?

Это было полезно?

Решение

Приложения реального мира, а?

Игра Потерянное королевство выиграл первый ежегодный конкурс Classic 2K Text Adventure в 2004 году и был написан и улучшен оригинальным автором в Brainfuck

Как насчет IRC Bot в Befunge или же этот текстовый редактор? И я полагаю, если вам нравится писать на эзотерических языках, вы можете подумать выпить компилятор C или Brainfuck to C Compiler очень полезно...

Другие советы

Не существует практического использования для эзотерического языка программирования, в значительной степени по определению. Однако только потому, что вы не можете использовать их, не значит, что они не полезный.

TL; DR:

Например, когда вы смотрите на языки эзотерического программирования, вы можете приблизительно разделить их на категории: некоторые созданы как шутка, некоторые созданы просто для развлечения, некоторые создаются как тарпиты Тьюринга, но есть и некоторые, которые создаются, чтобы доказать или проиллюстрировать точку. И эти находятся На самом деле полезно именно для этого: иллюстрация точки, возможно, в классе языков программирования, может быть, для сообщества или для отрасли. Несмотря на то, что они бесполезны для практических целей, они используютсяпол Для образовательных целей.

Возьмите нетерминационные языки эзотерического программирования. Это языки программирования, для которых семантика оценки определенных выражений не определена детерминированно, но, например, вероятность или основана на фазе Луны или что -то в этом роде. Если вы посмотрите на определение такого языка, вы сразу же подумаете: «Ну, это просто глупо». И это! (Например, программа Hello World в Java2k - это почти страница кода, и она даже не гарантированно печатает «Hello World» каждый раз, только большую часть времени.) И все же, большинство современных языков программирования имеют Недействительные модели параллелизма. IOW: Как только вы запустите ветку в Java, C#, Python, Ruby, Perl, даже Erlang или Clojure, ваша программа становится такой же случайной, как и в эзотерическом языке Java2k. Итак, почему мы думаем, что один глуп и принимает другого как нормальный, хотя они по сути одно и то же? Взяв нетерминизм до крайности и упаковывая его забавным способом, Esolangs позволяют нам задать этот вопрос.

Другим примером является Тьюринг Тарпиты. Тарпит Тьюринга-это эзоланг, который почти не имеет никаких функций, но все еще является полным. Такой брезентовой брезент может быть использован для демонстрации двух разных вещей: вы можете использовать его, чтобы продемонстрировать, что именно это делает некоторые языки более «мощными» (в смысле выразительной силы), чем другие. Если вы ищете в Интернете, вы обнаружите, что люди спрашивают: «Если LISP намного лучше, чем Java, почему бы вам не показать мне какую -то программу, которую вы можете написать в LISP, но я не могу написать на Java». И, конечно же, это глупо: оба языка полны Тьюринга, поэтому такой программы нет. Однако, в отличие от Java с, скажем, Brainfuck, вы можете показать, что это просто не значимый вопрос, который стоит задать.

И другая вещь, которую вы можете продемонстрировать с помощью брезентов, - это то, что вы никогда не сможете сделать язык более мощным (в обоих смыслах слова: вычислительная мощность и выразительная мощность), удаляя особенности. Это звучит очевидно, но есть люди, которые на самом деле считают, что Microsoft должна просто удалить изменяемое состояние из C#, и это волшебным образом станет более мощным.

В целом, брезенты Тьюринга хороши для демонстрации различия между вычислительной мощностью и выразительной силой языка программирования.

Другие способы, которыми Esolangs может быть полезным, - это то, что они могут служить вдохновением для исследований языка программирования. Подумайте о unbambda, который, как следует из названия, является функциональным языком, который нет на основе исчисления Lambda. Другими словами: это функциональный язык, который не имеет функций.

И последнее, но не менее важное: Esolangs может заставить вас взглянуть на проблему с совершенно другого угла (да, я признаю, это в основном неловкий угол, но, эй, некоторые режиссеры фильма (например, Хичкок) обязаны всей своей карьерой, чтобы искать На вещах с неловких углах), и они дразнят ваш мозг, как хорошая головоломка. Это, например, вся причина существования и название Brainfuck.

безопасность работы !!!

Если есть практичный Используйте для языка, это не будет вызвано эзотерический. Анкет Два термина являются взаимоисключающими.

Понимание машины Тьюринга, вычислительности и практического ощущения того, что подразумевается теорией вычислений. Все практические преимущества могут быть собраны, если вы используете эзотерический язык, такой как мозг ****.

Я уверен, что есть и другие.

Некоторые классы эзотерических языков программирования имеют приложения в теоретической информатике.

Тьюринговые брезенты Используйте использование для иллюстрации определенных результатов в теории вычисления и проблемы с остановкой. См., Например, работу Янов (Есть немного более доступное резюме на полпути эта статья).

Основные результаты для классов машин Тьюринга являются еще одним практическим применением. Например, Википедия отмечает, что П'' был «первым» императивным структурированным языком программирования, беззабоченным, чтобы доказано, что заполняется полным ».

Бинарная комбинаторная логика является полезным инструментом для анализа Колмогоров Сложность.

Вдохновлен этот вопрос, и его ответ, я тоже нашел практическое использование для такого языка: Гольфсписк, язык, разработанный специально для Code Golf:

GolfScript - это эзотерический язык программирования, ориентированный на стек, нацеленный на решение проблем (отверстий) в как можно меньше нажатых клавиш. Это также направлено на то, чтобы быть простым и легко писать.

Там у вас есть, прямо от людей, которые написали это. Хотя это может быть спорным, является ли кодировать гольф практическим вопросом, я убежден, что он приближается к тому, что вы и я на самом деле пишете и сталкиваемся, не говоря уже о том, что это забавное упражнение по программированию, и соревнование с большим количеством поклонников. Итак ... если игры, футбол и всевозможные другие развлекательные мероприятия в том или ином случае ... практично ... Я тоже не могу включать кодовый гольф :)

Единственное практическое преимущество, которое я вижу, заключается в том, что если вы написали код на эзотерическом языке, это заставит вас думать о проблемах новыми и интересными способами. Изучение новых способов решения проблем принесет пользу, даже когда вы вернетесь в программирование на основном языке.

В прошлом году я читал «Аннотированный Тьюринг» Чарльза Петцольда. Я, конечно, не собираюсь когда -либо программировать машину Тьюринга, по крайней мере, как он описывает ее. Но размышления о решении проблем с его «языком» растянули мой разум. Я лучший программист C#.

Конечно; Фунготе, бот IRC: http://zem.fi/~fis/fungot.b98.txt

Разработка эзотерического языка - это похоже на создание Мандала. Анкет После окончания работы вы можете забыть об этом или даже уничтожить.

Если вы судите только по Википедия ссылка:

Эзотерический язык программирования (иногда сокращается до эзоланга) - это язык программирования, разработанный как тест границ дизайна языка компьютерного программирования, как доказательство концепции или как шутка. Обычно нет намерения принять язык для реального программирования.

тогда, нет, нет практического применения такого языка к реальной проблеме.

Причины не оскорбляют языки, они сосредоточены на «практике»:

  1. На практике, если вы решаете проблему, вы должны быть в состоянии убедить себя в том, что вы решили ее. Если вы используете язык, который специально предназначен для того, чтобы его было трудно читать, будет трудно визуально осмотреть ваше решение и сказать: «Да, это правильно».
  2. На практике вы не работаете в вакууме. В реальной жизни вы всегда работаете с ненулевым набором других людей (даже если это просто вы в будущем). Кто -то другой должен будет поддерживать ваше решение, добавив здесь функцию, решает проблему там или, что еще хуже, пытается задокументировать то, что вы сделали и почему.
  3. Если ни 1, ни 2 не применяются, вы создали решение проблемы, которая (а) тривиально легко проверять, и (б) никогда не требует технического обслуживания, потому что она никогда не используется на практике. Следовательно, это тривиальная / непрактическая проблема.

Colorforth очень мощный, и это практично.

Окад и GA4 в 290K

Запутывание кода является очень распространенным практическим использованием:-P

И я не знаю, можно ли назвать семейство APL/J/K эзотерическим, но они использовались в производственных системах с долгого времени.

Существует язык под названием пилот. Это интерпретирующий язык, написанный в Dartmouth Basic (межпевный язык). Первоначальное использование было для того, чтобы преподаватели не обработали, чтобы иметь возможность запрограммировать свои тесты. Все команды на языке представляют собой отдельные буквы, а используемая буква определяет, какие варианты доступны. Это древнее (я узнал об этом в 1976 году) и, насколько я могу судить, больше не используется.

Среди других применений, чем более минимальное может использоваться как (черные ящики)/(языки алгоритма с песочницей) для алгоритмических поисков, для поиска, таких как программирование на основе ограничений и развивающиеся решения.

Этот ответ адресуется 3 типам языков эзотерического программирования:

  • Языки для гольфа
  • Тьюринговые брезенты
  • Языки в играх

Языки для гольфа полезны, когда вам нужно взломать что-то вместе для единовременного использования. Вместо того, чтобы скрепить 100-линейную программу Python или проходить отладку, потому что вы допустили ошибку на чем-то встроенном на языке гольфа, просто подключите несколько встроенных встроенных и выполняйте работу.

Тарпиты Тьюринга полезны для творчества. Вы должны думать вне коробки с несколькими командами, которые есть у Тьюринга. В BF, как бы вы пошли на преобразование целых чисел, предоставленных вам через программу (которая является лишь кучей значений ASCII) в то, что вы могли бы обработать (например, значение с одной ячейкой)? Как бы вы проверили на равенство? Как бы вы добавили два числа?

Тарпиты Тьюринга также полезны для практической организации кода. Когда простая задача, такая как добавление двух чисел, приводит вас к созданию кода PSuedo и составлением макета всей программы, вы должны организовать свою программу. В BF, чтобы добавить два значения ячейки, вам нужно: 1. Уменьшите первое приложение 2. Увеличьте второе приложение 3. Цикл до тех пор, пока первое приложение не станет пустым.

Языки в играх полезны для улучшения опыта в мирах/уровнях для игроков этого мира/уровня. В Roblox (хотя я бы не назвал его языком сценариев «эзотерическим»), если вы просто поместите некоторые части и модели в своем мире, будет ли это весело? Нет. Если вы написали эти модели, чтобы сражаться с вами и оборудовать себя пистолетом? Может быть. В Dash Geometry вы можете усложнить уровень, требуя, чтобы вы нажимали определенное количество раз в его «языке программирования», или заставить его использовать псевдо случайные атаки в бою с боссом. Языки эзотерического программирования в играх могут значительно улучшить сферу возможностей на уровне/мире.

Эйфель, Эрланг, Окамл, Хаскелл. Все это «нишевые» языки для большинства программистов, но они практичны в своих областях. Ваш вопрос просто не имеет смысла, может быть хорошо спросить: «Есть ли хорошие языки, которые мы не используем в популярных проблемных областях?»

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top