Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Реальные приложения, а?

Игра "Затерянное королевство" выиграла первый ежегодный конкурс классических 2k текстовых приключений в 2004 году и была написана и усилена оригинальным автором в brainfuck

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

Ответ 2

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

TL;DR:

  • Недетерминированные esolangs подчеркивают не определенность всех thread на основе программирования
  • Turing tarpits подчеркивают, что язык программирования не является более мощным, чем любой другой (если оба являются Turing-complete), тем самым отличая "вычислительную мощность" от "выразительной силы".
  • Они усиливают боковое мышление и являются мозговыми дразнящими.

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

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Основными результатами для классов машин Тьюринга являются еще одно практическое применение. Например, Википедия отмечает, что P '' был "первым обязательным языком структурированного программирования GOTO-less", который будет доказан завершением Turing".

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 10

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

Ответ 11

Если вы судите только ссылка Wikipedia:

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

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

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

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

Ответ 12

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

OKAD и GA4 в 290K

Ответ 13

Обфускация кода - очень распространенное практическое применение: -p

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

Ответ 14

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

Ответ 15

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

Ответ 16

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

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

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

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

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

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

Ответ 17

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