Программирование на эмодзи. 5 забавных языков
2026-02-21 03:00 Diff

#подборки

  • 6 июл 2021
  • 0

О скольких из них слышали вы? Зовём познакомиться и даже попрограммировать на каждом.

Полина Суворова для Skillbox

Фулстек-разработчик. Любимый стек: Java + Angular, но в хорошей компании готова писать хоть на языке Ада.

об авторе

Архитектор решений в IT-компании из списка Fortune 100. Любимым занятием называет свою работу. Старается учиться чему-то полезному каждый день.

Кто бы мог подумать, что наши любимые смайлики могут сгодиться на что-то посерьёзнее оживления чатов? Однако ж нашлись таланты, которые придумали целые языки программирования на эмодзи и эмотиконах.

Большинство из них относятся к эзотерическим языкам — эсолангам (от англ. esolang), но разобраться в них проще, чем во многих других эсолангах.

Эзотерические языки плохо подходят для решения бизнес-задач. Их создают, чтобы доказать саму возможность реализации какой-то идеи («подтвердить концепцию», от англ. proof of concept), а то и вовсе шутки ради.

примечание переводчика

Эсоланг может быть даже своего рода произведением искусства. Например, программа на Piet выглядит как абстрактный рисунок. Язык этот назван в честь Пита Мондриана — одного из родоначальников абстрактной живописи.

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

1) Emoji;

2) Emojicode;

3) Emoji-gramming;

4) EmojiCoder;

5) Emotinomicon.

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

Вот так на Emoji вывести на экран строку «Hello, World!»

Команда (токен) 💬 читает все символы до следующего 💬 и помещает их в стек, а токен ➡ выводит на экран его содержимое.

Вот результат:

Описание всех токенов языка Emoji:

💬 Считывает строку до следующего символа 💬 и помещает её в стек ⛽ Считывает строку до следующего символа 🚘 и помещает её в стек (эти конструкции могут быть вложенными, в них можно хранить функции) ➡ Выводит на экран содержимое стека 🚲 Помещает в стек логическое значение True («истина») 🚳 Помещает в стек логическое значение False («ложь») 🚴 Инвертирует логическое значение в стеке (true преобразуется в false и наоборот) 👫 Складывает два числа из стека 👪 Перемножает два числа из стека 🌊 Вычитает из одного числа в стеке второе число из стека 🍴 Делит одно число в стеке на другое 💸 Делит одно число в стеке на другое и возвращает остаток от деления 💿 Округляет число до ближайшего большего целого 📥 Округляет число из стека до ближайшего меньшего целого 📤 Округляет число из стека до ближайшего большего целого 🐂 Переводит число в шестнадцатеричный вид 🔢 Преобразует строку в число 👬 Проверяет два числа на равенство 🐣 Проверяет, что одно число меньше другого 🐔 Проверяет, что одно число больше другого 🔚 Извлекает логическое значение из стека. Если оно равно false, пропускает код до следующего символа 🐧. 🔙 Если при предыдущей команде 🔚 код не был пропущен, пропускает код до следующего 🐧. 🔃 Берёт две строки из стека. Интерпретирует первую как команду и выполняет её. Дальше проверяет второй логический параметр, и если он равен true, выполняет как команду вторую строку из стека. Затем всё повторяется 👥 Дублирует содержимое стека 🔣 Возвращает числовой код символа 🔍 Возвращает символ по его числовому коду 📲 Принимает два параметра-объекта, создаёт новую переменную и считает второй параметр её именем, а первый — её значением 📱 Принимает один параметр-объект и возвращает значение из переменной с именем, равным этому параметру 📃 Возвращает длину строки (или массива) из стека ✂ Принимает строку и два числа. Возвращает подстроку, начиная с символа с номером, равным первому числу (включительно), и заканчивая символом с номером, равным второму числу (не включая сам этот символ) 🏃 Вычисляет выражение в строке 📚 Создаёт пустой массив 📌 Берёт массив и объект и добавляет этот объект в конец массива. Ничего не возвращает, так что если вам нужен этот изменённый массив, сохраните его в переменную до вызова команды 🔑 Принимает массив (или строку) и индекс. Возвращает значение элемента с этим индексом 🔀 Меняет местами два элемента в стеке 🔊 Преобразует все символы строки к верхнему регистру 🔉 Преобразует все символы строки к нижнему региструИсточник: gist.github.com

Позапускать свои программы на Emoji можно здесь.

Emojicode — это объектно-ориентированный язык. Программировать на нём забавно, потому что в коде можно использовать эмодзи.

Это ещё и строго типизированный язык с первоклассной поддержкой классов.

Этот авторский каламбур означает, что в Emojicode запросто можно создавать и использовать классы.

Создатель языка ненавидит ошибки типа NPE (null pointer exception) — они возникают при попытке обратиться к объекту, которому не присвоено значение. Поэтому в Emojicode каждую переменную экземпляра класса (instance variable) нужно сразу инициализировать, чтобы не словить ошибку при компиляции.

А это фрагмент кода для вывода строки «Hello, World!» на этом языке:

🏁 🍇 😀 🔤Hello, World!🔤❗️ 🍉

И результат выполнения:

Официальная документация по Emojicode здесь, а попрограммировать на нём можно тут.

Emoji-gramming — ещё один эсоланг с эмодзи. В нём всего 25 переменных и четыре команды — те и другие представлены эмодзи.

Константы в Emoji-gramming задаются символами-сердечками:

💔 — это 0

💜 — это 1

💕 — это 2

💞 — это 4

💖 — это 8

Символ микрофона (🎤) отвечает за поток входных данных, а громкоговоритель (📢) обозначает вывод на экран. Выглядит логично, правда? 😃

Ниже — код на Emoji-gramming, который выводит на экран «Hello, World!»:

😊🕐💖 😇🕐🕐 😊🕑🕐 😇🕑🕑 😊🕒🕑 😇🕒🕒 😊♈💖 😇♈🕒 😊📢♈ 😊♈💜 😇♈💞 😇♈🕑 😇♈🕒 😊📢♈ 😊♉💞 😇♉💖 😇♉🕑 😇♉🕒 😊📢♉ 😊📢♉ 😊♊💜 😇♊💕 😇♊💞 😇♊💖 😇♊🕑 😇♊🕒 😊📢♊ 😊♈💞 😇♈💖 😇♈🕑 😊📢♈ 😊📢🕑 😊♈💜 😇♈💕 😇♈💞 😇♈🕐 😇♈🕒 😊📢♈ 😊📢♊ 😊♈💕 😇♈🕐 😇♈🕑 😇♈🕒 😊📢♈ 😊📢♉ 😊♈💞 😇♈🕑 😇♈🕒 😊📢♈ 😊♈💜 😇♈🕑 😊📢♈ 😊♈💖 😇♈💕 😊📢♈Источник: gist.github.com

А вот и результат:

EmojiCoder создали Джереми и Сара Натансон (Jeremy Nathanson, Sarah Nathanson). Это эзотерический язык, в котором и команды, и их аргументы записываются в виде эмодзи.

В языке есть эмодзи-обозначения для нуля и единицы. Остальные символы кодируются их комбинациями.

Чтобы понять, как интерпретировать комбинацию (символ это из набора ASCII или же число), перед ней добавляют модификатор — тоже в виде эмодзи:

🔡: Символ ASCII с кодом от 0 до 255 🔢: Целое число от 0 до 255

Возьмём, например, такую последовательность: 🌚🌝🌚🌚🌝🌚🌚🌚, или 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!»:

👋🔡🌚🌝🌚🌚🌝🌚🌚🌚 //Печатает символ H 👋🔡🌚🌝🌝🌚🌚🌝🌚🌝 //Печатает символ e 👋🔡🌚🌝🌝🌚🌝🌝🌚🌚 //Печатает символ l 👋🔡🌚🌝🌝🌚🌝🌝🌚🌚 //Печатает символ l 👋🔡🌚🌝🌝🌚🌝🌝🌝🌝 //Печатает символ o 👋🔡🌚🌚🌝🌚🌝🌝🌚🌚 //Печатает символ запятой (,) 👋🔡🌚🌚🌝🌚🌚🌚🌚🌚 //Печатает пробел 👋🔡🌚🌝🌝🌝🌚🌝🌝🌝 //Печатает символ w 👋🔡🌚🌝🌝🌚🌝🌝🌝🌝 //Печатает символ o 👋🔡🌚🌝🌝🌝🌚🌚🌝🌚 //Печатает символ r 👋🔡🌚🌝🌝🌚🌝🌝🌚🌚 //Печатает символ l 👋🔡🌚🌝🌝🌚🌚🌝🌚🌚 //Печатает символ d 👋🔡🌚🌚🌝🌚🌚🌚🌚🌝 //Печатает символ !

Вот результат:

Полный список команд EmojiCoder смотрите здесь.

Это стековый язык программирования (как и Emoji, о котором мы говорили выше). В нём можно использовать как эмодзи, так и эмотиконы. Придумал и создал его Конор О’Брайен (Conor O’Brien).

Вот как вывести строку «Hello, World!» на Emotinomicon:

Объясним назначение токенов:

😭 — начало строки !dlroW ,olleH — строка с обратным порядком символов 😲 — конец строки ⏪ — начало цикла ⏬ — извлекает из стека и выводит на экран очередной символ строки ⏩ — конец цикла

Примечание переводчика

Почему строка набрана задом наперёд?

Потому что для стека действует правило «последним пришёл — первым ушёл». Последним в стек добавили символ H, так что он будет выведен первым, затем e и так далее до символа !.

И, наконец, результат:

Поиграйтесь с выводом своих строк. Вот вам удобная среда для выполнения программ на Emotinomicone (нужные эмодзи там всегда под рукой, не приходится копипастить их откуда-то ещё).

Это эмодзи-диалект эсоланга Brainfuck (в переводе «Вынос мозга»).

Emotifuck написан на языке Rust двумя энтузиастами под никами Romulus10 и Insipx. По словам разработчиков, их язык обладает безопасным доступом к памяти.

Ниже список команд Emotifuck и соответствующие им символы языка Brainfuck:

🔥 — Сдвинуть вправо (>) 💯 — Сдвинуть влево (<) 💩 — Уменьшить на 1 (-) [ну почему они не сделали ЭТО командой вывода ;)] 😂 — Увеличить на 1 (+) 💞 — Вывести (.) 🙏 — Ввести (,) 🌚 — Прыгнуть вперёд ([) 🐸 — Прыгнуть назад (])

примечание переводчика

Под программу на этом языке вначале выделяется 30 000 ячеек, в которых лежат нули. Вдоль множества ячеек перемещается указатель. Команды «сдвинуть вправо» и «сдвинуть влево» двигают этот указатель на одну ячейку вправо или влево, соответственно.

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

Код для вывода «Hello, World!» на Brainfuck выглядит так:

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

С помощью словарика выше переведём это на Emotifuck и получим:

😂😂😂😂😂😂😂😂🌚🔥😂😂😂😂🌚🔥😂😂🔥😂😂😂🔥😂😂😂🔥😂💯💯💯💯💩🐸🔥😂🔥😂🔥💩🔥🔥😂🌚💯🐸💯💩🐸🔥🔥💞🔥💩💩💩💞😂😂😂😂😂😂😂💞💞😂😂😂💞🔥🔥💞💯💩💞💯💞😂😂😂💞💩💩💩💩💩💩💞💩💩💩💩💩💩💩💩💞🔥🔥😂💞🔥😂😂💞

Вот и всё, ребята! 🤗

Документацию и дополнительные материалы ищите тут:


Бесплатный курс по Python ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу