Статья опубликована в рамках: Научного журнала «Студенческий» № 23(67)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4
ЭЗОТЕРИЧЕСКИЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Язык программирования - это формальный язык, задача которого - запись компьютерных программ. Они представляют собой комплект правил, позволяющие компьютеру исполнять конкретный вычислительный процесс, организовывать управление разными объектами и т. д. [1].
Также языки программирования позволяют определить комплект лексических, синтаксических и семантических правил, которые определяют не только действия, но и внешний вид ПО, которые придут в исполнение (ЭВМ) под ее контролем. Преобладающее количество языков программирования пользуются особыми системами для определения и управления структурами данных и управления ходом вычислений [1].
Как правило, язык программирования определяют не только лишь при помощи спецификаций стандарта языка, которые определяют его синтаксис и семантику, но еще и при помощи выражения стандарта - средства программы, предоставляющие трансляцию или же интерпретацию программ на данном языке; они (программные средства) отличаются друг от друга по производителю, марке и вариативности (или версии), времени выпуска, полноты реализации стандарта, специальным возможностям; имеют шансы обладать конкретными ошибками или различные особенности воплощения, которые воздействуют на практику применения языка.
С этапа сотворения первых программируемых машин люди уже имели в своем распоряжении более 8 тыс. языков программирования. Эзотерических, визуальные и игрушечные также были в их числе. С каждым годом их количество постоянно возрастает. Определенным количеством языков владеют лишь малое число их создателей, иные популярны миллионам людей. Разработчики программного обеспечения, владеющие впечатляющими навыками в программировании, способны использовать на практике более десятка различных языков программирования.
Эзотерический язык программирования - язык программирования, предназначенный для исследования границ потенциала разработки языков программирования, дабы обосновать вероятную реализацию конкретных мыслей, планов, как произведения программного искусства или же как шуточку.
Произведение искусства или же шуточка - это касается эзотерических языков программирования. Гигантская доля эзотерических языков выдумана ради утехи, нередко пародируя «настоящие», а порой являются нелепым, бредовым воплощением «серьезных» концепций программирования. Кое-какие эзотерические языки намеренно ограничены, иные - всецело Тьюринг - полные, то есть охватывающие широкий спектр областей и, не принимая во внимание особенности определенных сфер знаний, а вкратце - это языки общего назначения.
Совокупным свойством, свойственным всякому эзотерическому языку, считается то, что текст программы понятен лишь только «просвещенному» или же в общем непостижим. Пока создатели «реальных» языков программирования будут пытаться упростить синтаксис (сделать более понятным), а программирование - комфортным, то разработчики эзотерических языков устанавливают перед собой обратные цели.
Разработчики немалой части эзотерических языков желают вложить как можно больше различий в их синтаксис и структуру по сопоставлению с ранее сотворенными языками. В следствие этого каждая классификация эзотерических ЯП - это попытки понять как, почему и с какими целями были сделаны языки.
Рассмотрим некоторые классы эзотерических ЯП.
Эзотерические языки программирования можно разбить на следующие категории: Befunge, Brainfuck, Chef, FALSE, Feckfeck, HQ9+, INTERCAL, Lmcode, LOLCODE, Malbolge, Piet, Shakespeare, Spoon, Thue, Unlambda, Whitespace. Подробнее о классах ниже.
Brainf * ck-подобные языки. Большущий класс в эзотерических языках программирования - это Brainf * ck-подобные языки, направленные на уменьшение синтаксиса при сохранении тьюринг-полноты, в числе которых CaneCode, Ook! (язык орангутанов), COW, Brainfork (мультизадачный Brainf * ck), f * ckf * ck, DoubleF * ck, Whitespace, Spoon, LOLCODE, HQ9+ [5].
Еще в отдельном классе есть языки, использующие многомерное представление программ: двумерные Byter, Befunge, Befunge-93 (двумерный, не тьюринг-полный), одномерный Unefunge, трехмерный Trefunge, четырехмерное 4DL и применяющий цветовое кодирование Piet.
Иной класс языки, основанные на копировании своего же кода - Smetana, Smith, Muriel.
Языки «черного ящика», подобные Malbolge и Alpaca, сделанные, дабы затруднить написание кода.
В ряде языков осуществлен «литературный» синтаксис, к примеру, Chef (рецепты),Shakespeare (пьесы Шекспира), Haifu (стихотворения хокку), ArnoldC (фразы Арнольда Шварценеггера), FiM ++ (письма принцессе Селестии).
Язык Var’aq, базирующийся на логике клингонской расы из сериала «Звездный путь», относится к классу ЯП с «нечеловеческой логикой».
Иные языки, разработанные с эзотерическими целями: Cool, GOTO ++, Lithp, Paranoid, Sartre, Simple, Whenever, smilescript, emoticon, iot, Lazy K, Beatnik, reMorse [3].
Языки, как Thue и Unlambda, предусмотрены для испытания математических концепций.
К языкам, сделанным для иных целей, временами именуемых эзотерическими, относятся P ′ ′, QuakeC, MC ++, Autocode «Engineer» [5].
Более бесспорный расклад к делению эзотерических языков на группы заключается в том, считаются ли они полными по Тьюрингу: имеется ли возможность создать при помощи ЯП вычислимую функцию или же нет. Одним из языков полных по Тьюрингу считается, к примеру, INTERCAL. На сайте южноамериканского разработчика программного обеспечения, хакера и соучредителя Open Source Initiative Рэймонда, INTERCAL описывается как «предназначенный, чтобы добиться полноты по Тьюрингу и предельного отличия от имеющих место быть языков программирования» [2].
INTERCAL из-за своих особенностей, по утверждению ESR, может «вызывать слезы (смеха) у сильных мужчин» и считается «очагом интернационального общества техномазохистов».
Невзирая на свой несерьезный нрав, INTERCAL стал не только «жизнеспособным», но и послужил почвой для сотворения множества иных эзотерических языков программирования.
Но стоит и понимать, что из-за своих особенностей среди эзотерических языков имеются не Тьюринг полные языки. К примеру, HQ9 +, имея всего 4 команды. Этот забавный язык способен решить все «стандартные» задачки молодого разработчика: от «Hello, world!» до вывода квайна.
Впрочем, и полнота по Тьюрингу не дает гарантий, что эзотерический язык возможно просто применить в работе. В эзотерических ЯП достаточно нередко попадаются «тьюринговские трясины» - языки с полнотой Тьюринга, но с ограниченным и «плохим» синтаксисом и семантикой.
На теоретическом уровне, они имеют те же возможности, собственно что и всевозможные Тьюринг-полные ЯП, как эзотерические и рабочие, но по причине ограничений непросто воплотить в жизнь какие-то типы программ с их поддержкой. INTERCAL нередко именуют «трясиной» [2].
В качестве примера, рассмотрим два эзотерических ЯП.
Haskell - это стандартизированный чистый функциональный язык программирования с поддержкой отложенных вычислений.
На самом деле этот язык не такой эзотерический и его даже иногда используют в нормальных проектах. На нем был написан xmonad (это тайловый оконный менеджер для X) [4].
В общем то, это язык узкой направленности и не обычного синтаксиса.
На данный момент этот язык не так востребован, но концепции заложенные в не востребованы.
Это чисто функциональный язык программирования, который обычно используется для очень узких задач [4].
Malbolge - эзотерический язык программирования (названный в честь 8 круга ада Данте). Основная цель написания языка - это быть максимально сложным для написания программ. Лишь через два года после создания этого языка на нем был написан “Hello World”, но сделано это было с помощью другой программы, которая просто перебирала все варианты кода [1].
А вот и код программы:
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5 [m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
или
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL (I&%$#"`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@> [1]
Таким образом, можно сделать вывод, что эзотерические языки программирования - это, как правило, созданные с безумным синтаксисом языки. Даже не смотря на свое разнообразие, все они преследуют скрытую цель - раскрыть природу программирования с помощью минималистического дизайна или же других особенностей.
Список литературы:
- Википедия https://ru.wikipedia.org/wiki/Malbolge#Hello_world
- https://habr.com/ru/company/edison/blog/313334/
- https://tproger.ru/digest/esoteric-programming/
- https://www.haskell.org/
- Путеводитель автостопщика по потаенным знаниям. Лекция, непрочитанная автором в Потаенном Институте Несуществующих Стандартов. http://rsdn.org/article/philosophy/languages.xml
Оставить комментарий