Язык программирования Rockstar: когда код выглядит как текст рок-хита



    Словосочетание «rockstar developer» заставляет некоторых морщиться: «вот же глупый рекрутерский баззворд, среди самих разработчиков никто так себя не называет». В России оно встречается не так часто, а вот в англоговорящих странах многим уже надоело. И особенно остро ощущает его засилье британский .NET-разработчик Дилан Битти: он фанат рок-музыки, поэтому хорошо видит, насколько это «rockstar» далеко от настоящих rockstars.

    В итоге Дилан затеял язык программирования Rockstar, код на котором должен быть похож на рок/метал-тексты. Во-первых, если получится сделать такой проект заметным, то можно отнять у рекрутеров слова «rockstar developer», дав им новое значение. А во-вторых, интересно же попробовать скомпилировать тексты любимых песен! Ну и делать наклейки на ноутбук «certified rockstar developer» тоже весело.

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

    Началось всё с того, что разработчики стали иронично обыгрывать понятие «rockstar developer», вспоминая о настоящих рок-звёздах. Вы можете помнить эту картинку:



    И подобные шуточки со временем дошли до такого твита:



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

    Но Дилан Битти именно такой и есть. Он давно делает программистские пародии на рок-хиты — то есть как раз соединяет программирование, рок-музыку и юмор, затрачивая на это порядочно времени. Можете послушать, например, его версию «Another Brick in the Wall» Pink Floyd, которая на вечеринках IT-конференций заходит на ура:



    Дилан вспомнил о уже существующих эзотерических языках, где не ставили цель «стать популярнее C++», а ставили цель «давайте реализуем интересную идею, просто потому что можем». Среди них есть такие, которые привносили в код лексику и стилистику из какой-то другой области: например, язык Shakespeare, стилизующий программы под шекспировские пьесы, и Lingua::Romana::Perligata, позиционирующийся как «Perl на латыни». Да, в продакшн на них никто не пишет, но сам факт их существования делает наш мир немного красочнее.

    С такими мыслями он решил создать язык, где FizzBuzz может выглядеть так:

    Midnight takes your heart and your soul
    While your heart is as high as your soul
    Put your heart without your soul into your heart
    
    Give back your heart
    
    
    Desire is a lovestruck ladykiller
    My world is nothing 
    Fire is ice
    Hate is water
    Until my world is Desire,
    Build my world up
    If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
    Shout "FizzBuzz!"
    Take it to the top
    
    If Midnight taking my world, Fire is nothing
    Shout "Fizz!"
    Take it to the top
    
    If Midnight taking my world, Hate is nothing
    Say "Buzz!"
    Take it to the top
    
    Whisper my world
    


    В августе Дилан завёл репозиторий на GitHub и написал о своей идее в Twitter, не ожидая никакой особенной реакции — и внезапно всё взорвалось ретвитами и гитхаб-звёздами. Круги разошлись вплоть до того, что у него взял интервью журнал Classic Rock.

    В этом интервью Дилан заметил, что затевать подобный проект — это «как пытаться объехать Канаду на моноцикле: такое делают не для решения реальной задачи, а чтобы посмотреть, чего получится достичь, загнав самого себя в необычные рамки».

    А ещё заметил, что при всей шумихе будущее проекта под вопросом: интернет очень быстро переключается на новые шутки, так что назавтра Rockstar может оказаться забыт, не успев оказаться реализованным.

    Однако, хотя первая волна интереса действительно схлынула, проект не выглядит заброшенным. И уже сейчас он выглядит куда проработаннее, чем простая шутка на один день. Когда читаешь спецификацию, она впечатляет в двух отношениях. Во-первых, по ней видно, что там действительно задумывались «как должен выглядеть такой язык», а не просто набросали что-то за пять минут и забыли. А во-вторых, она местами очень забавная:

    «Использование комментариев не поощряется. Это рок-н-ролл, аудитория должна сама находить в тексте смысл!»

    «Система типов похожа на ECMAScript, только undefined звучит недостаточно рок-н-ролльно, так что мы решили использовать слово mysterious».

    «Поскольку Rockstar объединяет программирование, английский язык и рок-н-ролл, с апострофами всё сложно. В программировании их используют для строковых значений — 'вроде этого'. В английском для сокращённых форм — you're, he's. А в рок-н-ролле, похоже, используют вообще рандомно: sweet child o' mine, ain't talkin' 'bout love, guns n' roses».



    Мы решили уточнить некоторые подробности у самого Дилана:

    — Эта затея на первый взгляд выглядит «шуткой на один коммит», за которым не последует второго. Но сейчас коммитов в проекте уже 132 — правильно понимаем, что он жив?

    — Да! Начался он как шутка — первый черновик спецификации языка я написал, сидя в баре за ноутбуком. Выложил на GitHub, опубликовал ссылки в Twitter… и получил больше тысячи звёзд на GitHub. А затем люди занялись реализациями. Кто-то создал транспайлер Rockstar-JavaScript, кто-то другой — подсветку синтаксиса для Sublime Text и VS Code. Люди создавали пулл-реквесты, открывали issue, делали собственные имплементации — это было потрясающе.

    Теперь есть целая маленькая команда, занимающаяся референсной реализацией Rockstar; есть группа в Discord, где мы обсуждаем дизайн языка. Это всё ещё шуточный язык — но это шуточный язык с набором интеграционных тестов и рекурсивным нисходящим парсером, а в ноябре мы планируем релиз 1.0.

    — А этот язык предназначен строго для рок-фанатов? Любителям поп-музыки или хип-хопа тут ловить нечего?

    — Даже не знаю! Изначальная идея была в том, чтобы рекрутеры не могли больше говорить о «rockstar developers»… есть ли такая вещь, как хип-хоп-разработчик? Но язык спроектирован так, чтобы соответствовать текстам песен в целом, там нет каких-то вещей, строго требующих использовать именно рок-лексику. Я уверен, что можно написать такой хип-хоп-текст, который будет валидной программой.

    — А хотите ли как-то совмещать Rockstar с пародиями, которыми вы известны?

    — Написать такую пародию на рок-песню, которая одновременно с этим будет ещё и валидной Rockstar-программой? Звучит интересно… возможно, попробую после того, как мы финализируем спецификацию 1.0 :)

    Напоследок небольшое объявление. Мы знаем Дилана благодаря тому, что он регулярно выступает на нашей .NET-конференции DotNext: его доклады каждый раз получают отличные отзывы, показывая, что он хорош не только в пародиях. И на ближайшем DotNext 2018 Moscow (22-23 ноября) он закроет конференцию докладом «Ctrl-Alt-Del: learning to love legacy code». А ещё он наверняка, как обычно, прихватит с собой гитару, чтобы на конференционной вечеринке исполнить свои пародии перед всеми желающими. В общем, если хотите обсудить с ним Rockstar, увидеть его в качестве докладчика или услышать его творчество вживую — вы знаете, где это можно сделать.

    JUG.ru Group

    554,00

    Конференции для взрослых. Java, .NET, JS и др. 18+

    Поделиться публикацией

    Похожие публикации

    Комментарии 24
      +1
      Так и джаз девелоперы появятся =)
        +12
        а также 1С-шансонье
          +11
          «Раз пошли физзбаззить
          Я и Рабинович
          Третьим будешь? Если да, то fizz»
            +3
            function fizz(you){
              let i = 1;
              let rabinovich = 1;
              let we = i + rabinovich;
              we += you;
              if (we==3) {
                return true;
              } 
              return false;
            }
              0
              Не совсем понятно чем ваш код отличается от
              (you===1)

              Но вообще js умеет в юникод.
              function fizz(ты){
                let Я = 1;
                let Рабинович = 1;
                let Мы = Я + Рабинович;
                Мы += ты;
                if (Мы==3) {
                  return 'Да';
                } 
                return 'Нет';
              }
              
                +1
                физзты — как-то не очень звучит, на матерный походит )))
                Да и «Да» не воспринимается как true.=)
                Функция не оптимизирована, для передачи всех деталей.
                В данном случае важен процесс, а не результат.)
            +5
            На самом деле 1С для этого и придуман (извиняюсь за многабукаф, но из песни слов не выкинешь):
            Код. Некоторые вещи упрощены
            Процедура ПриНаступленииУтра() 
            	Если Константы.ЯНаВоле.Получить() = Истина Тогда
            		Возврат;
            	Иначе
            		МотаюСрок();
            	КонецЕсли;
            КонецПроцедуры
            
            Процедура МотаюСрок()
            	МойСрок = Объект.Приговор.Срок;
            	Если СрокОтсидки >= МойСрок И Жена.Преданность = Ложь Тогда
            		ВероятностьОчереднойПередачки = Ложь;
            		Сообщить("Все плохо, жена " + Жена.Наименование + " сука!...");
            		Сообщить("Вы звоните кореша все будет путем!");
            	Иначе
            		ВероятностьОчереднойПередачки = Истина;
            		Сообщить("любимая " + Жена.Наименование + ", дождись и я вернусь");
            	КонецЕсли;
            	
            	СпетьПрипев(ВероятностьОчереднойПередачки);
            	
            	
            Конецпроцедуры
            
            Процедура СпетьПрипев(ПередачкаБудет)
            	
            	Посадка = РегистрыСведений.МоиХодки.СрезПоследних(ТекущаяДата(), Структура("Я", Объект));
            	Если ПередачкаБудет = Истина Тогда
            		Сообщить("Жду с нетерпением,любимая моя...");
            		Сообщить("Я не специально, менты суки меня поймали за очередным " + Посадка.ОписаниеСтатьи);
            	КонецЕсли;
            	Для Каждого Кореш Из Справочник.Кореша Цикл
            		КорешОтветил = ОбщиеПроцедурыОбщенияСКорешами(Кореш.НомерТелефона);
            		Если КорешОтветил = Истина Тогда
            			ВероятностьОчереднойПередачки = Истина;
            		Иначе
            			ВероятностьОчереднойПередачки = Ложь;
            		КонецЕсли;
            	КонецЦикла;
            	
            	Если ВероятностьОчереднойПередачки = Истина Тогда
            		Сообщить("Кореш " + Кореш.Наименование + " жди, бухнем");
            	КонецЕсли;
            	
            	Сообщить("я тут ни за што!");
            	
            КонецПроцедуры
            
            // эти функции применять по желанию:
            Функция ЯНеВиноват()
            	Возврат Истина;
            КонецФункции
            
            Функция СукиВсеВрут()
            	Возврат Истина;	
            КонецФункции
            
            Функция МеняНеТакПоняли()
            	Возврат Истина;	
            КонецФункции

              0
              В программе ошибка — кусок с выводом «жди бухнем» должен находиться внутри цикла по корешам, а у вас он почему-то из него выпал.
          0

          Хорошо что тексты Металлики на самом деле так не выглядят.

            +3
            Конечно, на самом деле разница есть. Но, по-поему, тексты Металлики временами выглядят вполне как код:

            image
              +1

              Странно, что до сих пор никто не вспомнил image


              А вообще, есть


              ряд языков реализуют «литературный» синтаксис, таковы Chef (рецепты), Shakespeare (шекспировские пьесы), Haifu (стихотворения хокку), ArnoldC (фразы Арнольда Шварценеггера), FiM++ (письма Принцессе Селестии).
              (с) Википедия
                0
                Ниже вспомнили уже два раза)
                  +3
                  Да кто листает комментарии дальше третьего? ))
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              А почему заголовок глючит?
              p.s Не глючит, но он странный )
                0
                Не до конца понял, что именно вы имеете в виду, но на всякий случай убрал упоминание Metallica, раз возникают возражения.
                  +1
                  человек с хабраголосом столкнулся)
              0
              Простите, я наверное что-то не понимаю, но при чём здесь разработчики GTA?
                0
                Нужен язык программирования Junior
                  0
                  Для Junior-oв уже есть язык Spaghetti :)
                  +9
                  Пришел сюда чтобы увидеть это, не увидел - запостил
                  image
                    +1
                    Rama Developer
                    0
                    Не могу не поделиться этим бояном
                    instaco.de/77164

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое