Концепция Ruby — удовольствие от разработки: "Ruby создан для людей, а не для машин"
Эксклюзивное интервью создателя языка программирования Ruby Юкихиро Мацумото для Evrone — о влиянии японского на Ruby и выбором между работой и творчеством.
RubyRussia — самое заметное событие про Ruby в РФ. Первую конференцию Evrone организовал больше 10 лет назад. Спустя 6 лет, в 2016, мы осмелели настолько, что пригласили к нам разработчика языка Ruby - Юкихиро Мацумото. Мы надеялись, что он хотя бы прочитает приглашение. Вообразите, что локальное сообщество хозяев Tesla неожиданно приглашает на свое мероприятие Илона Маска. А тот не просто соглашается, он проводит у вас свой отпуск. И на следующий год — вновь выступает у вас.
На RubyRussia 2019, DevRel Evrone Григорий Петров взял интервью у Юкихиро. Говорили и о Ruby — основополагающих моментах языка, и о том, каково это — разрабатывать языки. Мацумото поделился, как и над чем он работает и почему ему приятно бывать в России.
Главное из интервью Юкихиро
Работа над Ruby занимает все мое время. 50% я отдаю проектированию новой версии языка, оставшуюся половину работаю над развитием MRuby - легковесной версии интерпретатора. И я рад, что все 100% времени я имею дело с open-source.
От меня ничего не требуют заказчики, единственный мой начальник — я сам. Только я выбираю, над какими задачами буду работать. Так я избегаю стресса.
У меня есть только один дедлайн — ближайший релиз Ruby. Я живу без напряжения и ощущаю спокойствие внутри. Обязательно есть время, которое не связано с разработкой. Я провожу его со своим родными. Участвую в делах локальной церковной общины, играю со своей кошкой, вывожу на прогулку собаку.
Один из самых частых вопросов, которые я слышу, — про новый функционал. «Я пишу на языке X. Мацумото, внедрите, пожалуйста, вот эту фичу из моего языка X». В 99% случаях я отказываю. Это невыполнимо. У Ruby совсем другой дизайн и языковая политика. Так не работает, нельзя просто скопировать что-то из другого языка. Но, если говорить не о фичах, то время от времени мы подсматриваем достойные идеи в других языках программирования. В JavaScript, к примеру.
Почему-то считается, что разработчик языка должен быть лидером сообщества. Нет, я не руковожу сообществом рубистов. Я лишь даю людям возможности, а в каком направлении развиваться — определяет само сообщество. У меня в наличии все технологии и средства, чтобы развивать продуктивность и гибкость в Ruby. Многие разрабатывают на Ruby исключительно веб-решения. Мне хочется, чтобы мой язык использовался гораздо шире: при создании AI, в machine learning, в научных и других исследованиях, в инновационных технологиях, в вычислениях. Мы двигаем разработку именно в сторону расширения вариантов использования Ruby.
Основополагающая цель Ruby — продуктивность. Мой язык — продуктивный. Я разработал его не для компьютеров, а для программистов.
Часто программисты недовольны дизайном языка — если синтаксические конструкции реализуются недостаточно просто. При разработке Ruby мы делали упор на продуктивность, не на производительность. Так мы переключаем внимание программистов с синтаксиса языка на задачи разрабатываемого продукта. При этом мы создали Ruby производительным на максимум — при условии, что не теряем в продуктивности.
Блоки — мое наибольшее достижение при создании Ruby. Они не имеют аналогов. Блоки — это абстракция функций высшего порядка. Гораздо понятней, чем в любом другом языке. Такая простота имеет и положительные моменты, и некоторые ограничения.
Иногда я ошибался. Например, взять глобальные переменные. Сейчас они — атавизм, хотя при добавлении были необходимы для "скриптового" языка. Следующий просчет — потоки в том виде, как они реализованы. Сейчас я понимаю, что для параллелизма требуется более сподручная абстракция. Еще жалею о том, что у некоторых объектов в Ruby нет иммутабельности. Мы способны, к примеру, для объекта типа "время" изменить часовой пояс — хотя правильней было бы создать новый иммутабельный объект.
Не знаю, влияет ли на структуру Ruby то, что я родился в Японии. Вероятно. В Ruby есть method chaining, он похож на то, как в японском соединяются предложения. Еще Япония — страна 1-го мира, где жителям не приходится тяжело трудиться сутками напролет. Это тоже часть нашей культуры, те возможности, которые страна открывает нам.
Open-source не продается и не приносит прибыли. Чтобы работать над Ruby, авторы языка либо ходят на "дневную" работу, либо рассчитывают на спонсорскую поддержку.
Создать свой язык программирования легко. Этому учат в технических вузах, и многие выпускники за время обучения проходят соответствующие курсы. Сложность в другом. Суть в том, что язык — это выражение мыслей. Я говорю не только про языки программирования, к английскому, русскому, японскому — это тоже относится.
Основная задача языка программирования — помочь нам сформулировать мысль. Не важно, Python, JS или Ruby — все они помогают нашему разуму.
Как понять, что язык хороший? У него должен быть свой подход к формулированию мыслей. У Ruby — это высокая продуктивность и удовольствие при разработке. У другого языка подходом может стать эффективность. Или простота. Важно другое: если вы получаете удовольствие, формулируя мысли на Ryby, значит, это ваш язык.
В последнее время все чаще на разработчиков начинают смотреть как на рок-звезд. В России это развито сильнее. Я езжу с выступлениям по всей планете, но лишь в России так часто у меня просят автограф или делают со мной фотографию.
полное интервью на английском: Yukihiro Matsumoto: "Ruby is designed for humans, not machines"
Проектирование языка — это увлекательно. Большое преимущество языкового эксперимента — возможность пригласить сообщество пользователей помочь в разработке. Даже когда разработчиков самого языка станет достаточно много, мы сможем приглашать широкое сообщество Ruby для участия в некоторых языковых экспериментах.
Юкихиро Мацумото
Создатель языка программирования Ruby
Ответы в интервью, которые мне показались важными и интересными:
Типизация в Ruby
Юкихиро: Например, Rust и Go — это статически типизированные языки. Если программное обеспечение, созданное с их использованием, растет довольно быстро, вы можете в конечном итоге поддерживать огромные кодовые базы, потенциально миллионы строк кода, с сотнями членов команды, работающих над каждой, и в этих случаях проверка типов — очень удобный способ обнаружения несоответствий.
Напротив, в языках с динамической типизацией нам приходится писать тесты, чтобы избежать несоответствий типов в нашем коде. По мере роста программного обеспечения объем тестов (и бремя их написания) растет вместе с ним, и это действительно помогло стимулировать недавнюю популярность статической и постепенной типизации.
В то же время, однако, статическое объявление типа избыточно, и с таким языком, как Ruby, мы хотим получить преимущество статической проверки типов без избыточности ручного объявления типов.
Как сообщество Ruby и как язык Ruby, мы пытаемся удовлетворить обе потребности одновременно: мы собираемся иметь файл информации о типе отдельно от программы Ruby — сама программа Ruby не содержит никакой статической информации о типе. Вместо этого отдельный файл информации о типе, мы называем его «файл подписи Ruby», содержит информацию о типе библиотеки, Gems и ваших программ.
Мы собираемся предоставить инструмент, называемый «профилировщиком типов», который может собирать информацию о типах вашего программного обеспечения. После сбора информации о типах для библиотеки и вашего программного обеспечения профилировщик типов получает всю необходимую информацию обо всех классах и методах, поэтому он может обнаруживать противоречия типов — конфликты типов. Вы даже можете вручную уточнить информацию о типах в вашем файле сигнатур, чтобы обеспечить лучшую проверку типов.
В будущем Ruby вы сможете проверять типы статически, в некоторой степени — но в очень ограниченной степени. У вас будет традиционное поведение Ruby, которое выполняет проверку типов во время выполнения. С помощью «проверки типов первого уровня» можно найти от 40 до 80% ошибок типов, используя информацию о типах, доступную в исходном коде. «Проверка типов второго уровня» может генерировать дополнительную информацию о типах на основе анализа самого кода. С помощью этих инструментов будущие версии Ruby смогут обеспечивать статическую проверку типов без необходимости явных аннотаций типов в вашем коде.
Ruby - продуктивный язык программирования
Григорий: Мы, разработчики, любим маркировать и классифицировать вещи. Например, это спортивная машина, а это семейная машина. Мы также маркируем языки программирования: JavaScript — это «веб-язык», C — «системный низкоуровневый язык», C# — «для собственных приложений пользовательского интерфейса Windows». Как вы склонны классифицировать Ruby?
Юкихиро: Я бы отнес Ruby к категории продуктивных языков программирования. Продуктивность — одна из главных, главных целей Ruby. Я разработал Ruby для людей, а не для машин. Иногда основные участники жалуются на дизайн языка, потому что его сложно эффективно реализовать. Дизайн Ruby ориентирован не на производительность, а на продуктивность. Это означает, что у разработчиков есть более сложная задача, но мы воодушевлены этой задачей: мы стремимся сделать Ruby максимально продуктивным для разработчиков и в то же время максимально производительным.
декабрь 2019