Программирование на эмодзи. 5 забавных языков
О скольких из них слышали вы? Зовём познакомиться и даже попрограммировать на каждом.
Полина Суворова для Skillbox
Локаджит Тикаятрай
(Lokajit Tikayatray)
об авторе
Архитектор решений в IT-компании из списка Fortune 100. Любимым занятием называет свою работу. Старается учиться чему-то полезному каждый день.
Кто бы мог подумать, что наши любимые смайлики могут сгодиться на что-то посерьёзнее оживления чатов? Однако ж нашлись таланты, которые придумали целые языки программирования на эмодзи и эмотиконах.
Большинство из них относятся к эзотерическим языкам — эсолангам (от англ. esolang), но разобраться в них проще, чем во многих других эсолангах.
Эзотерические языки плохо подходят для решения бизнес-задач. Их создают, чтобы доказать саму возможность реализации какой-то идеи («подтвердить концепцию», от англ. proof of concept), а то и вовсе шутки ради.
примечание переводчика
Эсоланг может быть даже своего рода произведением искусства. Например, программа на Piet выглядит как абстрактный рисунок. Язык этот назван в честь Пита Мондриана — одного из родоначальников абстрактной живописи.
О самых сложных эсолангах читайте в другой моей статье. В этой же речь пойдёт о пяти таких, в которых можно применять эмодзи:
1) Emoji;
2) Emojicode;
3) Emoji-gramming;
4) EmojiCoder;
5) Emotinomicon.
Emoji
Это эсоланг на основе стека. Эмодзи здесь отвечают за команды (токены), которые этим самым стеком управляют. И их не так уж много, а все остальные символы токенами не считаются.
Вот так на Emoji вывести на экран строку «Hello, World!»
Команда (токен) 💬 читает все символы до следующего 💬 и помещает их в стек, а токен ➡ выводит на экран его содержимое.
Вот результат:
Описание всех токенов языка Emoji:
Позапускать свои программы на Emoji можно здесь.
Emojicode
Emojicode — это объектно-ориентированный язык. Программировать на нём забавно, потому что в коде можно использовать эмодзи.
Это ещё и строго типизированный язык с первоклассной поддержкой классов.
Этот авторский каламбур означает, что в Emojicode запросто можно создавать и использовать классы.
Создатель языка ненавидит ошибки типа NPE (null pointer exception) — они возникают при попытке обратиться к объекту, которому не присвоено значение. Поэтому в Emojicode каждую переменную экземпляра класса (instance variable) нужно сразу инициализировать, чтобы не словить ошибку при компиляции.
А это фрагмент кода для вывода строки «Hello, World!» на этом языке:
И результат выполнения:
Официальная документация по Emojicode здесь, а попрограммировать на нём можно тут.
Emoji-gramming
Emoji-gramming — ещё один эсоланг с эмодзи. В нём всего 25 переменных и четыре команды — те и другие представлены эмодзи.
Константы в Emoji-gramming задаются символами-сердечками:
💔 — это 0
💜 — это 1
💕 — это 2
💞 — это 4
💖 — это 8
Символ микрофона (🎤) отвечает за поток входных данных, а громкоговоритель (📢) обозначает вывод на экран. Выглядит логично, правда? 😃
Ниже — код на Emoji-gramming, который выводит на экран «Hello, World!»:
А вот и результат:
EmojiCoder
EmojiCoder создали Джереми и Сара Натансон (Jeremy Nathanson, Sarah Nathanson). Это эзотерический язык, в котором и команды, и их аргументы записываются в виде эмодзи.
В языке есть эмодзи-обозначения для нуля и единицы. Остальные символы кодируются их комбинациями.
Чтобы понять, как интерпретировать комбинацию (символ это из набора ASCII или же число), перед ней добавляют модификатор — тоже в виде эмодзи:
Возьмём, например, такую последовательность: 🌚🌝🌚🌚🌝🌚🌚🌚, или 01001000 в двоичном виде.
Если поставить перед ней 🔢, то это будет просто целое число 72. А если указать 🔡, то уже символ с кодом 72 (по таблице ASCII), то есть латинская заглавная буква H.
Примечание переводчика
Как из нулей и единиц вдруг получилось 72?
В обычной жизни мы имеем дело с числами в десятичной системе счисления: они получаются из комбинаций десяти цифр от нуля до девяти. Каждое число можно представить в виде суммы произведений его цифр с десяткой в степени, которая зависит от разряда, где стоит цифра (первый разряд справа считается нулевым).
Например: 72 = 7*101 + 2*100, а 372 = 3*102 +7*101+2*100.
Если ограничиться только двумя цифрами (0 и 1), получим двоичную систему счисления. В ней число представляется точно так же, только вместо степеней десятки — степени двойки.
Вот так: 01001000 = 0*27 + 1*26 + 0*25 + 0*24 + 1*23 + 0*22 + 0*21 + 0*20 = 0 + 64 + 0 + 0 + 8 + 0 + 0 + 0 = 72.
Для вывода на экран в EmojiCoder применяется эмодзи «Машущая рука» (👋). Каждую команду нужно писать на новой строке.
Теперь мы знаем всё, чтобы вывести на экран строку «Hello, World!»:
Вот результат:
Полный список команд EmojiCoder смотрите здесь.
Emotinomicon
Это стековый язык программирования (как и Emoji, о котором мы говорили выше). В нём можно использовать как эмодзи, так и эмотиконы. Придумал и создал его Конор О’Брайен (Conor O’Brien).
Вот как вывести строку «Hello, World!» на Emotinomicon:
Объясним назначение токенов:
Примечание переводчика
Почему строка набрана задом наперёд?
Потому что для стека действует правило «последним пришёл — первым ушёл». Последним в стек добавили символ H, так что он будет выведен первым, затем e и так далее до символа !.
И, наконец, результат:
Поиграйтесь с выводом своих строк. Вот вам удобная среда для выполнения программ на Emotinomicone (нужные эмодзи там всегда под рукой, не приходится копипастить их откуда-то ещё).
Emotifuck
Это эмодзи-диалект эсоланга Brainfuck (в переводе «Вынос мозга»).
Emotifuck написан на языке Rust двумя энтузиастами под никами Romulus10 и Insipx. По словам разработчиков, их язык обладает безопасным доступом к памяти.
Ниже список команд Emotifuck и соответствующие им символы языка Brainfuck:
примечание переводчика
Под программу на этом языке вначале выделяется 30 000 ячеек, в которых лежат нули. Вдоль множества ячеек перемещается указатель. Команды «сдвинуть вправо» и «сдвинуть влево» двигают этот указатель на одну ячейку вправо или влево, соответственно.
С прыжками вперёд и назад чуть хитрее: они перемещают указатель вперёд (вправо) или назад (влево) до следующего парного символа: для [ парным будет символ ] и наоборот. Причём команда сработает, только если в текущей ячейке будет лежать не ноль.
Код для вывода «Hello, World!» на Brainfuck выглядит так:
С помощью словарика выше переведём это на Emotifuck и получим:
Вот и всё, ребята! 🤗
Если заинтересовались темой
Документацию и дополнительные материалы ищите тут:
Что дальше?
Например, почитайте про другие эсоланги и о том, какие бывают языки программирования и сколько их вообще в мире.