Если вы думаете, что мы будем говорить о создании устройства, которое поможет вам общаться с коровой, извините, что это не так. Если вы думаете, что мы создаем какой-то интерфейс, такой как Google Translate, чтобы помочь нам общаться с коровой, извините, но это опять же нет.

Что вы думаете, когда слышите слово «язык программирования»? Вы представляете себе огромные коды с такими словами, как печать, вывод, ввод, сканирование, импорт и т. Д.? Все ли современные языки программирования используют только такие понятные человеку слова? Посмотрим…

Хорошо, после того, как так много вопросов и нет, что мы собираемся исследовать? Это язык программирования под названием cow.

Если вы думаете, что код будет похож на коровье мычание, да, вы правы!

Корова входит в пятерку самых сложных языков программирования в мире наряду с Malbolge, Brainfuck, Intercal, Whitespace. Он был выпущен в начале 2013 года и не пользуется большой популярностью среди разработчиков. Это эзотерический язык программирования или esolang, что просто означает, что он предназначен для экспериментов со странными идеями, чтобы его было сложно запрограммировать, или он сделан как шутка, а не для практического использования. Есть небольшое, но активное сообщество, создающее такие эзотерические языки, а также использующее их. Эти языки могут выполнять все задачи, которые может выполнять универсальная машина Тьюринга, и поэтому их по праву можно назвать языком программирования.

Самый ранний преднамеренно созданный эзотерический язык называется Intercal, разработанный Дональдом Р. Вудсом и Джеймсом М. Лайоном в 1972 году. Некоторые из популярных эзотерических языков - Brainfuck и Befunge, оба были разработаны в 1993 году.

Brainfuck сильно повлиял даже на корову, и она создана с юмором с учетом особенностей Bovinae. У Cow в общей сложности 12 инструкций, что на 4 больше, чем у Brainfuck, и является полным по Тьюрингу. Все 12 инструкций - всего лишь вариации слова «МОО», единственного слова, которое корова может произнести.

Синтаксис:

Заявление :: = му | mOo | moO | mOO | Му | MOo | МоО | MOO | ООО | МММ | ООМ | ом | S1 S2

Поскольку MOO и moo вместе образуют цикл while, кажется логичным объединить их как одну синтаксическую конструкцию. К сожалению, мы не можем этого сделать, потому что инструкция mOO может создавать отдельные MOO и moos, так что (половина) циклов while могут формироваться динамически. Также возможно, что программа завершится, находясь внутри цикла while!

Пример программы для печати Hello, World!

MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
 MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
 MoO MoO Moo MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo MoO MoO
 MoO MoO MoO MoO MoO Moo Moo MoO MoO MoO Moo OOO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
 MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
 MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
 MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
 MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo MOo
 MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo
 MOo MOo MOo MOo MOo Moo MOo MOo MOo MOo MOo MOo MOo MOo Moo MoO MoO MoO Moo MOo MOo MOo MOo MOo MOo Moo MOo MOo MOo MOo MOo MOo MOo MOo Moo
 OOO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo

" Привет, мир!" используя петли

MoO MoO MoO MoO MoO MoO MoO MoO MOO moO MoO MoO MoO MoO MoO moO MoO MoO MoO MoO moO MoO MoO MoO MoO moO MoO MoO MoO MoO MoO MoO MoO
 MoO MoO moO MoO MoO MoO MoO mOo mOo mOo mOo mOo MOo moo moO moO moO moO Moo moO MOO mOo MoO moO MOo moo mOo MOo MOo MOo Moo MoO MoO 
 MoO MoO MoO MoO MoO Moo Moo MoO MoO MoO Moo MMM mOo mOo mOo MoO MoO MoO MoO Moo moO Moo MOO moO moO MOo mOo mOo MOo moo moO moO MoO 
 MoO MoO MoO MoO MoO MoO MoO Moo MMM MMM Moo MoO MoO MoO Moo MMM MOo MOo MOo Moo MOo MOo MOo MOo MOo MOo MOo MOo Moo mOo MoO Moo

Некоторые другие инструкции

быстрый выход

OOO
MOo
mOO

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

MOO
MOo
[[ anything in here happens "current" number of times ]]
moo

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

MMM
moO
MMM

зацикливать «ток» несколько раз, не влияя на значение тока

MMM
moO
MMM
MOO
MOo
[[ move back so original current is current again ]]
mOo
[[ loop here ]]
[[ move forward so the loop continutes to work on the temp counter ]]
moO
moo

проверьте, равен ли ток 3, не влияя на значение тока

[[ copy current to temp block ]]
MMM
moO
MMM
[[ copy 3 into another new temp block ]]
moO
OOO
MoO
MoO
MoO
[[ loop 3 times (the 3 is still current) ]]
[[  this also decrements the temp value ]]
MOO
MOo
mOo
MOo
moO
moo
[[ move back to first temp value (the copy of the current value) and check if 0 ]]
mOo
MOO
[[ make original current current again ]]
mOo
OOM
[[ gets here if != 3 ]]
[[ skip down to the bottom past the if ]]
moO
OOO
MOO
moo
[[ make original current current again ]]
mOo
OOM
[[ gets here if == 3 ]]
[[ skip down to the bottom of the if ]]
moO
OOO
MOO
moo
moo
[[ set current back ]]
mOo
[[ all execution resumes here ]]

сгенерировать последовательность Фибоначчи

MoO
moO
MoO
mOo
[[ main loop ]]
MOO
[[ print first number ]]
OOM
[[ temp copy of first number ]]
MMM
moO
moO
MMM
mOo
mOo
[[ store second number off in the first position now ]]
moO
MMM
mOo
MMM
[[ move back to temp number ]]
moO
moO
[[ use temp to add to first and store in second in loop ]]
MOO
MOo
mOo
MoO
moO
moo
mOo
mOo
moo

Я надеюсь, что после прочтения вы обязательно узнаете больше о языке COW и начнете работать над некоторыми программами на этом прекрасном языке.

Эти языки показывают, что каждая идея, которая приходит в голову человеку, заслуживает изучения и реализации. Этот язык может быть сложно кодировать, но я уверен, что вы читали с улыбкой на лице. Вы когда-нибудь улыбались, когда видели код Python? Вы когда-нибудь улыбались, когда видели код на языке C? Иногда полезно изучать забавные языки, например, COW, не так ли?

Спасибо, что прочитали ... Скоро вернусь с еще одним ...