Виноград, кот, микрофон, арбуз: как программировать при помощи эмодзи
Существуют разные языки программирования. Есть популярные, на которых написаны самые крупные программы и сервисы, такие как С++, Java или Python, есть специализированные, вроде Swift, но существуют также эзотерические языки, которые неизвестны практически никому. Их придумывают для того, чтобы исследовать возможности разработки языков или просто для развлечения. Такие языки не используются в продакшне, код на них сложно читать непосвящённым, а иногда они и вовсе выглядят бесполезными (как, например, язык WhiteSpace, программа на котором состоит только из пробелов, табуляций и символов перевода строки). Разработчик интерфейсов Василий Горюнов рассказал о своем любимом эзотерическом языке — Emojicode, код на котором, как можно догадаться, полностью состоит из эмодзи.
Создатель языка Тео Видманн начал работу над Emojicode в 2016 году. Исходный код находится в открытом доступе, и любой разработчик может добавить в него новые возможности, но главным контрибьютором по-прежнему остаётся Тео. Как именно ему в голову пришла идея создать язык, полностью состоящий из эмодзи, создатель не помнит, но рассказывает, что однажды, когда кто-то прислал сообщение со множеством смайликов, его мозг по привычке стал парсить текст, как если бы это был чей-то код.
Сам автор называет язык безумно продуманным, но также отмечает, что многие скорее назвали бы его продуманно безумным. Обе эти характеристики вполне верны.
Безумно продуманный
Тео, как и многие другие разработчики, хотел создать язык, который был бы свободен от всех недостатков и неверных решений, принятых при создании существующих языков программирования. В Emojicode с самого начала появились классы, типизация, при первой необходимости были добавлены протоколы, опциональность, замыкания, дженерики, многопоточность и управление памятью. Из-за этого он в некоторых случаях эффективнее и удобнее Java, Python или С++.
Обычно эзотерические языки компилируются в другие языки программирования, но не Emojicode. Он, наоборот, имеет свой собственный компилятор и виртуальное окружение, в котором выполняется код. Также Emojicode предусматривает наличие пакетного менеджера, который позволяет разработчикам писать различные утилиты и тулзы, чтобы, например, работать с файловой системой или с базами данных. В итоге получился достаточно серьезный и вполне самостоятельный язык программирования.
В настоящее время первая рабочая версия языка еще не выпущена. Но можно скачать вторую бету и попробовать себя в роли Emojicode-разработчика. Сейчас пакетов для языка достаточно мало, однако даже они уже позволяют работать с файлами, делать HTTP-запросы, получать доступ к микрофону и динамикам. В принципе, этого достаточно для создания, например, простых компьютерных игр.
Продуманно безумный
Чтобы начать писать код, нужно изучить синтаксис языка. Как нетрудно догадаться, в Emojicode вы не найдете привычных слов function, if или return, они заменены на эмодзи. Какие-то из них выглядят так, что их значения легко сопоставляются с их функцией, например, эмодзи 🍦 заморозит значение, хранящееся в переменной, то есть сделает его константой. 👍 и 👎 — это значения булевых функций true и false.
Но в некоторых случаях понять, почему используются те или иные эмодзи, бывает достаточно сложно. Условный оператор (if) — это эмодзи 🍊, а return — это 🍎 (причём именно 🍎, а не 🍏). Любой блок кода начинается с эмодзи 🍇 и заканчивается эмодзи 🍉. Почему так? Загадка.
Эмодзи могут быть использованы и в расширениях файлов: обычно файлы с кодом имеют расширение .emojic, но также можно использовать просто .🍇.
Конечно, не всё в этом языке эмодзи. Для названий переменных и их значений используются привычные буквы и цифры латинского алфавита.
Учитывая сказанное выше, вы теперь без труда сможет понять, что делает приведенный ниже код:
🏁 🍇
🍦 a 10
🍦 b 4
🍊 ▶️ a b 🍇
😀 🔤a is bigger than b🔤
🍉
🍉
(правильный ответ: печатает строку, если значение переменной a больше, чем значение переменной b).
Поскольку эмодзи — это по сути идеографический язык, то в Emojicode можно писать код менее абстрактно и более буквально. В примере ниже для того, чтобы услышать, что говорит кошка, просто достаточно создать экземпляр кошки и поднести к ней микрофон:
📦 catsimulator 🏠
🏁 🍇
🆕🐱❗️ ➡️ cat
🎙cat❗️
🍉
Здесь, конечно, сама реализация класса «кошка» вынесена в отдельный пакет catsimulator, который имеет говорящий публичный метод, что по сути делает использование класса довольно очевидным.
Если синтаксис ещё можно принять и выучить, то набирать эмодзи представляется достаточно проблематичным, потому что на обычных клавиатурах просто нет символов, необходимых для написания программ. Слава эмодзи-богу, в macOS и Windows 10 есть эмодзи-пикер, но придется каждый раз переключаться на него и искать необходимый символ (прощай слепой десятипальцевый набор). Владельцам макбуков с тач-баром будет чуть полегче: на нём набирать эмодзи получается намного быстрее.
Единственный минус: если вы уже начали писать код на этом языке, то не факт, что после этого вы захотите по-прежнему использовать эмодзи в своих сообщениях и не будет воспринимать их как часть кода.