Языки программирования на эмодзи, и как можно использовать смайлики в коде
Поговорим о том, как можно использовать эмодзи при написании кода и какие для этого есть специальные языки программирования. А ещё дадим советы программисту, как использовать эмодзи в кодинге (спойлер: добавлять их в комментарии, описания коммитов и даже строки — для оживления логов). Ну, и немного истории появления смайлика.
Как появился смайл
Дело было 39 лет назад, в 1982 году. Америка, Питтсбург, университет Карнеги-Меллон. Молодой учёный-программист Скотт Фалман корпеет над работой по искусственному интеллекту, который тогда только начинал развиваться. И периодически, чтобы отвлечься и проветрить мозги, общается с коллегами из других университетов в «первобытном чате» Arpanet — это была экспериментальная сеть по заказу Министерства обороны США, где можно было создавать доски объявлений и обмениваться на них сообщениями по теме объявления. Надо сказать, что это сейчас мы в чатах проводим больше времени, чем в реальных беседах, а первая в жизни фотография нашего ребёнка прямо из родильного зала летит через чат родственникам. Но тогда даже интернета в нашем пользовательском понимании ещё не было, поэтому и культуры онлайн-общения не было совсем.
Фалман пишет какое-то традиционно ироничное для «чата» сообщение и по реакции коллег понимает, что его иронию не считывают, принимая написанное за агрессию (знакомо, не так ли?). Как показать, что ты пошутил, не вдаваясь в скучное объяснение шутки? Естественный интеллект учёного нашёл решение. Вот что он написал на «доске»:
«Предлагаю следующую последовательность знаков для маркеров анекдотов: :-) Прочтите её боком. На самом деле, вероятно, экономичнее отмечать то, что НЕ является шутками, учитывая современные тенденции. Для этого используйте :-(»
Идею тут же подхватили, стали придумывать вариации смайликов для обозначения разных эмоций, и скоро новых участников переписок уже встречали милыми рожицами из знаков препинания. А когда в 1991 году открыли Всемирную паутину, «улыбашки» вслед за пользователями переместились и туда. Так Фалман стал известен на весь мир, но вовсе не благодаря своим трудам по искусственному интеллекту, которые, к слову, были новаторскими.
Но, вообще-то, Набоков был первым!
Знает ли Фалман, что он незаконно присвоил себе славу смайлооткрывателя (не присваивал, конечно :-)? Апрель 1969 года, Швейцария, Монтре. Почти семидесятилетний великий русско-американский писатель Владимир Набоков даёт интервью корреспонденту The New York Times Олдену Уитмену. Вопросы Уитмена, мягко говоря, напрягают Набокова, и на самый бестактный вопрос 70-летнему человеку — «Вы причисляете себя к современными (живущим) писателям или к писателям прошлого?» — он отвечает:
«Я часто думаю, что должен существовать специальный типографский знак для улыбки — какой-то вогнутый знак, круглая скобка на спине, которую я сейчас хотел бы ввести в ответ на ваш вопрос»
Каков, а! :)) Прошло 50 лет, и появилось...
Программирование на эмодзи-языках
А что, так правда можно? Можно. Эмодзи, графические братья смайликов и эмотиконов, созданные японским программистом Сигэтака Курита в качестве набора символов для телеоператора NTT DoCoMo, вполне комфортно себя чувствуют в esolangs. Это так называемые эзотерические ЯП, которые пародируют настоящие, но, в отличие от них, используются не для бизнес-задач, а для «извращённых технических глупостей», как сказали об этом два студента Принстонского университета в 1972 году, придумавшие первый эзотерический ЯП - INTERCAL. Авторы настоящих языков программирования стараются сделать их синтаксис максимально понятным, авторы esolangs — наоборот. И создают их для того, чтобы подтвердить концепцию (proof of concept) или исследовать возможности разработки языков. Ну или написать простенькую игру. Среди них есть такие, в которых можно применять эмодзи, а есть и те, которые полностью из эмодзи состоят. Вот они.
Emojicode
Это строго типизированный язык с поддержкой классов, построенный на принципах объектно-ориентированного программирования. Его можно использовать для создания кроссплатформенных приложений.
Тео Видманн, автор языка, вроде как ненавидит ошибки типа NPE (null pointer exception) — они возникают при попытке обратиться к объекту, которому не присвоено значение. Поэтому в Emojicode каждую переменную экземпляра класса (instance variable) нужно сразу инициализировать, чтобы не словить ошибку при компиляции. И вообще, он хотел создать язык, свободный от недостатков существующих языков программирования, поэтому в некоторых случаях Emojicode даже эффективней, чем Python, С++ или Java. Как ему пришла в голову идея написания языка на эмодзи: однажды кто-то прислал Тео сообщение со множеством смайликов, и его мозг по привычке стал парсить текст, как если бы это был чей-то код.
В Emojicode есть:
классы
типизация
протоколы
опциональность
замыкания
дженерики
многопоточность
управление памятью
Emojicode не компилируется в другие языки — у него есть свой компилятор и виртуальное окружение, в котором выполняется код. Это вполне самостоятельный язык программирования, он предусматривает наличие пакетного менеджера, позволяющего писать разные утилиты и тулзы, чтобы работать с файловой системой или с БД. Имеющееся небольшое количество пакетов для языка позволяет делать HTTP-запросы, работать с файлами, получать доступ к микрофону и динамикам — достаточно для написания компьютерной игры.
Но придётся, конечно, изучить синтаксис. Смысл некоторых эмодзи угадывается: ? сделает значение, хранящееся в переменной, константой (заморозит его); ? и ? — это значения булевых функций true и false. Но у других ассоциативный ряд не так прост, если вообще есть: например, любой блок кода начинается с ? и заканчивается ?, а условный оператор (if) — это ?. Тео называет Emojicode безумно продуманным, хотя отмечает, что многие скорее назвали бы его продуманно безумным. И обе эти характеристики верны.
Исходный код языка находится в открытом доступе, и любой может добавить туда новые возможности. Здесь можно почитать документацию по Emojicode, а попрограммировать на нём — здесь.
Emoji-gramming
Язык, в котором все переменные (24 нормальных и одна специальная) и 4 команды — эмодзи. Константы в Emoji-gramming задаются символами-сердечками, ? отвечает за поток входных данных, а ? — за вывод на экран.
Честно говоря, много про него и рассказывать нечего, даже создатель неизвестен (если знаете — пишите в комментариях), но язык прикольный. Тут Python Interpreter и страничка на esolangs.org с описанием.
EmojiCode
Как указано у авторов на GitHub: «EmojiCode — это эзотерический ЯП, который использует эмодзи для представления команд и аргументов. Разработано и написано Сарой и Джереми Натансон на HackRPI 2015». В языке ноль и единица обозначаются эмодзи-смайлами, а остальные символы кодируются их комбинациями. Для правильной интерпретации комбинации, чтобы понять, это символ из набора ASCII или число, перед ней добавляют эмодзи-модификатор: ? — целое число от 0 до 255 или ? — символ ASCII с кодом от 0 до 255. Для вывода на экран в EmojiCode применяется эмодзи ?. Каждую команду нужно писать на новой строке.
Страница на esolangs.org с описанием.
Emoji
Язык на основе стека. Тут эмодзи отвечают за команды (токены), управляющие этим стеком. Их 38, а остальные символы не считаются токенами. Токен ? читает все символы до следующего ? и помещает их в стек, а токен ➡ выводит на экран его содержимое. Описание их довольно исчерпывающее — «? Берёт массив и объект и добавляет этот объект в конец массива. Ничего не возвращает, так что, если вам нужен этот изменённый массив, сохраните его в переменную до вызова команды», а подбор картинок не без юмора — «? Перемножает два числа из стека».
Полное описание на esolangs.org, а запустить тут.
Emotinomicon
Автор этого эзотерического ЯП — энтузиаст языкового дизайна (как он сам себя называет) Конор О’Брайен. Он же создал языки Stacked, Attache и другие. А ещё он любит играть в кодовый гольф. Да, к языкам программирования он явно неровно дышит. Да и не без юмора парень: начало строки у него ?, а конец строки ?.
Выполнить свои программы на Emotinomicon удобно тут (много эмодзи). Описание на GitHub.
Motes
«Пылинки» (так переводится название с английского) написал Штеффен Блейк, который объясняет: «Первое, что нужно понять, — это то, что у Motes нет формы переменных. Вместо этого у вас есть так называемый Индекс, который представляет собой бесконечно длинный список чисел, которые вы можете редактировать. Вы начинаете с указателя ?, указывая на самый первый номер в списке. Вы можете перемещать указатель влево и вправо, а также увеличивать и уменьшать значения указателя, на который вы указываете». Остальное читайте в описании. Это язык с открытым исходным кодом и, вроде бы, автор приглашает присоединиться к проекту желающих, но ссылка не работает.
Описание на GitHub.
Советы: как эмодзи может оживить программирование
Да, порой эмодзи можно вставлять прямо в ваш код. Спорно, знаем: многих смайлики раздражают даже в простой переписке. Но есть и те, кому это вполне заходит. Например, разработчик Гейр Арне Хьелле создал пакет для поддержки эмодзи на Python. На создание проекта его вдохновила конференция EuroSciPy 2018 в Тренто, посвящённая использованию Python в научных проектах, где специалисты указали на недостатки в обработке Unicode-символов на Python. Кстати, год назад консорциум Unicode одобрил 217 новых эмодзи, среди которых есть даже женщина с бородой. Все можно найти на Emojipedia. А здесь можно почитать интересную статью про эмодзи в Unicode.
Большинство языков программирования поддерживают использование эмодзи в строках — это может оказаться довольно удобным для оживления логов. Но надо осознавать две вещи. Во-первых, не забывать о продуктивности: эмодзи должно быть удобно набирать, чтобы не отвлекаться. В OS X в большинстве приложений можно вызвать меню с эмодзи сочетанием Ctrl + Cmd + Пробел. В Windows 10 есть встроенная поддержка эмодзи в экранной клавиатуре. Также ваш редактор должен поддерживать эмодзи. Не все, но некоторые на это способны, и таких редакторов становится всё больше (например, это Visual Studio Code, Sublime Text, iTerm2).
Во-вторых, следует понимать, что символический язык пиктограмм не всеми воспринимается одинаково. У кого-то возникнет одна ассоциация от «ракеты», у кого-то — другая. Чтобы эмодзи не вызывали визуального шума и мозг не работал по алгоритму с лишними этапами «картинка —> ассоциация —> ничего не понятно —> чтение комментария», лучше стараться использовать однозначно понятные эмодзи: крестики, галочки и тому подобное.
Эмодзи можно использовать в описаниях коммитов, которые, как известно, весьма унылы, а картинки могут улучшить читаемость. Особенно это может быть полезным в больших списках коммитов крупных проектов. Да и просто эмодзи разрядят атмосферу (если, конечно, они вас не раздражают). Если тема вас заинтересовала, вы можете почитать гайд по использованию эмодзи в коммитах на Github и в редакторе Atom.
Эмодзи можно вставлять в комментарии, например, в качестве привлечения внимания к предупреждению. Ведь эмодзи легче считываются при беглом просмотре текста. Поскольку это всего лишь комментарии, шанс что-то сломать довольно невелик. Максимальная польза от привлекающих картинок в комментариях может быть, если вы с коллегами договоритесь о конкретных изображениях, которыми будете помечать определённые вещи. Тогда и не будет недопонимания от разного ассоциативного ряда.
В общем, если продуктивность от более лёгкого поиска в простыне текста повысится, то почему бы не достигать этого таким простым и забавным способом? А вот если понизится, то, конечно, не стоит. А ещё можно зарегистрировать доменное имя, созданное с помощью эмодзи, с расширением «.ws», — вот здесь.