Главная / Блог / Интервью с Юкихиро Мацумото

Концепция Ruby — удовольствие от разработки

Эксклюзивное интервью создателя языка Ruby Юкихиро Мацумото для Evrone — о влиянии японского на Ruby и выбором между работой и творчеством.

April 2020

RubyRussia — самое заметное событие про Ruby в РФ. Первую конференцию Evrone организовал больше 10 лет назад. Спустя 6 лет, в 2016, мы осмелели настолько, что пригласили к нам разработчика языка Ruby, Юкихиро Мацумото. Мы надеялись, что он хотя бы прочитает приглашение. Вообразите, что локальное сообщество хозяев Tesla неожиданно приглашает на свое мероприятие Илона Маска. А тот не просто соглашается, он проводит у вас свой отпуск. И на следующий год — вновь выступает у вас.

На RubyRussia 2019, DevRel Evrone Григорий Петров взял интервью у Юкихиро. Говорили и о Ruby — основополагающих моментах языка, и о том, каково это — разрабатывать языки. Мацумото поделился, как и над чем он работает и почему ему приятно бывать в России.

Вот главное из интервью Юкихиро:

Yukihiro Matsumoto interview

Работа над 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-го мира, где жителям не приходится тяжело трудиться сутками напролет. Это тоже часть нашей культуры, те возможности, которые страна открывает нам.

yukihiro matsumoto rubyrussia

Open-source не продается и не приносит прибыли. Чтобы работать над Ruby, авторы языка либо ходят на "дневную" работу, либо рассчитывают на спонсорскую поддержку.

Создать свой язык программирования легко. Этому учат в технических вузах, и многие выпускники за время обучения проходят соответствующие курсы. Сложность в другом. Суть в том, что язык — это выражение мыслей. Я говорю не только про языки программирования, к английскому, русскому, японскому — это тоже относится.

Основная задача языка программирования — помочь нам сформулировать мысль. Не важно, Python, JS или Ruby — все они помогают нашему разуму.

Как понять, что язык хороший? У него должен быть свой подход к формулированию мыслей. У Ruby — это высокая продуктивность и удовольствие при разработке. У другого языка подходом может стать эффективность. Или простота. Важно другое: если вы получаете удовольствие, формулируя мысли на Ryby, значит, это ваш язык.

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

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

 
Проектирование языка — это увлекательно. Большое преимущество языкового эксперимента — возможность пригласить сообщество пользователей помочь в разработке. Даже когда разработчиков самого языка станет достаточно много, мы сможем приглашать широкое сообщество Ruby для участия в некоторых языковых экспериментах.
Юкихиро Мацумото
Создатель языка программирования Ruby
Будем на связи
Прикрепить файл
Максимальный размер файла: 2 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.