Джереми Эванс: «Мое отношение к новым возможностям Ruby очень консервативно»
Джереми Эванс — ведущий разработчик библиотеки для работы с базами данных Sequel,
Интервью
Evrone: Благодаря работе над именованными параметрами тебя приняли в основную команду разработчиков и вручили премию Ruby Prize 2020. Можешь рассказать нам об этой работе и своих впечатлениях?
Джереми: Я счастлив, что стал членом основной команды и получил премию RubyPrize в 2020 году. Начну с того, как меня приняли в команду.
Я присылал в Ruby патчи и сообщения об ошибках с 2009 года. В 2019 году стал работать с Ruby гораздо активнее, после того как услышал о новом подходе к именованным параметрам в Ruby 3. Первоначальной идеей было полное разделение: попытки передать хэш методам, которые принимают именованные параметры должны были приводить к ошибке; передача именованного параметра методу, который принимает опциональные аргументы в виде хэша тоже должно было стать ошибкой. Мне эта идея показалось слишком радикальной, поскольку она бы сломала совместимость со старым кодом, который не использовал именованные параметры.
Я разработал новый патч, который был
Что касается RubyPrize, изначально меня номинировали в 2019 году за мою работу над именованными параметрами и исправление ошибок, но тогда мне удалось только выйти в финал. Я продолжил работу над Ruby и исправил множество ошибок в его объектной модели, а также улучшил производительность обработки именованных параметров и отслеживания исключений. В 2020 году меня снова номинировали на премию, и в этот раз я победил. Мне кажется, это второй раз, когда разработчик сначала становится финалистом, а на следующий год оказывается победителем: Такаси Кокобун (Takashi Kokubun), автор реализации
Evrone: Ты автор Roda и Rodauth, координатор разработки Sequal и член команды разработчиков Ruby. Какую деятельностью в работе над проектами с открытым исходным кодом ты находишь самой интересной и что приносит тебе больше удовлетворения?
Джереми: Это непростой вопрос. Я получаю удовольствие от всей своей работы над open-source проектами. Однако работа над самим Ruby, пожалуй, приносит больше всего удовлетворения — по нескольким причинам.
Evrone: У твоих проектов очень большие наборы тестов и хорошее покрытие кода тестами. Что ты думаешь об аннотациях типов в Ruby 3: помогут ли они тебе писать более качественный код?
Джереми: Вынужден признать, что не знаком с этой областью. Никогда не использовал инструменты проверки типов для Ruby, так что ничего не могу сказать о том, помогают ли они улучшить качество кода.
Судя по документации, мне кажется они создают слишком много ограничений. В моих проектах я часто использую системы плагинов и
Evrone: Ты сейчас отвечаешь за Ruby в системе портов OpenBSD, включая JRuby и Rubinius. С твоей точки зрения, как OpenBSD используется в 2021 году и какую нишу занимает, по сравнению с дистрибутивами Linux?
Джереми: Не могу говорить об использовании OpenBSD в целом. Я использую этот дистрибутив на всех своих компьютерах и ноутбуках, а также на всех критичных по безопасности серверах моей компании. Думаю, что это лучшая операционная система общего назначения. В своих
Ещё мне нравится, что администрировать OpenBSD очень просто и с годами становится всё проще. Я использую её с 2002 года и по моему опыту она очень стабильна, не только в смысле бесперебойной работы, но и в смысле отсутствия неоправданных изменений.
Производительность OpenBSD ниже, чем у других операционных систем, но в моём окружении я готов пожертвовать производительностью ради безопасности и простоты обслуживания.
Evrone: Насколько активно ты следишь за другими фреймворками для
Джереми: Что касается
За фреймворками для аутентификации не слежу вовсе. Когда я начал работать над Rodauth в 2015 году, то изучил существовавшие тогда фреймворки, чтобы позаимствовать из них идеи для своего. С тех пор ни на один из них не смотрел.
Относительно библиотек для работы с базами данных, я просматриваю изменения в ActiveRecord каждые несколько месяцев в поиске полезных добавлений, которые можно было бы реализовать в Sequel. В последнее время узнал о многих важных pull request’ах в ActiveRecord через Twitter. В паре случаев мне показалось, что они достаточно полезны, чтобы сделать такое же в Sequel. Так появились расширения async_thread_pool
и column_encryption
. Я также просматриваю изменения в ROM, но скорее, чтобы понять, как они используют Sequel, а не как её можно улучшить.
Evrone: В последние годы в Ruby появилось множество новых возможностей: сопоставление с образцом, нумерованные и именованные параметры, аннотации типов, ractor’ы, асинхронные fiber’ы, правостороннее присваивание и многое другое. Какие из них тебе нравятся больше всего и сильнее всего повлияли на твой процесс разработки?
Джереми: Мое отношение к новым возможностям языка очень консервативно. Многие из моих библиотек до сих пор поддерживают Ruby 1.9, а мои приложения работают на Ruby 2.5. Самая новая фича, которую использую в своем коде — «одинокий оператор» для проверки значений на nil из Ruby 2.3.
Evrone: Ты работаешь над Sequel и её реализацией ORM уже более десяти лет. Как ты думаешь, какие основные сложные задачи сейчас стоят перед разработчиками ORM?
Джереми: Я не уверен, что хорошо понимаю, какие трудности стоят перед разработчиками других ORM. Что касается Sequel, в последние годы всё идет гладко и без особых трудностей. Тем не менее, есть много областей, где сложность кода очень высока и работать с ним непросто. Одна из таких областей — работа с подготовленными запросами и связанными переменными. Сложность там возникла от того, что при проектировании Sequel их поддержка не предусматривалась. Другая — работа со сложными ассоциациями, особенно с жадной загрузкой данных. Однако не могу сказать, что у нас были серьёзные трудности в этих областях в последние несколько лет.
Evrone: Для каких сценариев использования ты посоветовал бы разработчикам на Ruby использовать Roda, Rodauth и Sequel? Для чего они подходят идеально, а для чего лучше взять другие фреймворки?
Джереми: С чисто технической точки зрения, думаю, что Roda, Rodauth и Sequel — лучшие фреймворки для
Однако во многих случаях, технические преимущества не так важны. Если сравнить Roda, Rodauth и Sequel c Rails, Devise и ActiveRecord, то у стека Rails есть несколько преимуществ.
Думаю, что выбор между Roda/Sequel и Rails зависит от того, что для тебя важнее: технические преимущества или нетехнические.
Evrone: Пандемия заставила разработчиков работать из дома и проводить конференции в
Джереми: Считаю, что мне очень повезло, что пандемия не слишком повлияла на мою жизнь. Пару месяцев я работал удалённо из дома, но в основном всё оставалось
Evrone: Roda недавно перешагнул порог в миллион загрузок и стал четвертым фреймворком на Ruby, которому это удалось. У Sequel 25 миллионов загрузок, а это очень много обратной связи с пользователями. Чему тебя это научило в техническом плане за все эти годы?
Джереми: Самый главный урок, который я извлёк из моей работы над проектами с открытым кодом — важность тестирования. Набор тестов очень важен, чтобы с уверенностью исправлять ошибки и добавлять новые функции.
Пока не начал работать над Sequel, я не понимал, насколько важно иметь хороший набор тестов. Думаю, именно благодаря почти стопроцентному покрытию кода тестами я смог взять на себя разработку Sequel. Я мог легко видеть, не вызывали ли мои изменения регрессию.
Evrone: Работа над твоими проектами и OpenBSD вынуждает тебя сталкиваться с альтернативными реализациями Ruby, такими как JRuby, MRuby и Rubinius. Насколько они популярны и как влияют на твои проекты?
Джереми: Тестирование моих библиотек на JRuby помогло мне найти множество ошибок, особенно ошибок безопасности параллелизма, которые не проявляются в CRuby
Не уверен, насколько они популярны. Мне кажется, число приложений, которые работают на JRuby невелико по сравнению с CRuby. Однако среди больших корпоративных приложений их процент может быть куда выше.
Я не работаю со встраиваемыми системами, так что не было случая поработать с MRuby, кроме разработки пакета для OpenBSD. По моему опыту, в США он непопулярен, но известен в Японии.
Насколько я могу судить, проект Rubinius уже мёртв, его место в экосистеме занял TruffleRuby. Я использую TruffleRuby в некоторых автоматизированных тестах, но не уверен, работает ли он на OpenBSD.
Evrone: VIM остается твоим любимым текстовым редактором на протяжении многих лет. Ты пробовал VSCode? Многие разработчики думают, что это отличная современная альтернатива VIM, поскольку он поддерживают привычную навигацию с клавиатуры. Что ты об этом думаешь?
Джереми: Я не пробовал VSCode. VIM полностью соответствует моим потребностям. Если честно, хоть и использую его уже много лет, но я не такой уж продвинутый пользователь. Тем не менее VIM хорош для меня настолько, чтобы не задумываться о возможных альтернативах.
Evrone: Есть ли у тебя планы на будущее, которыми ты мог бы поделиться с нашими читателями?
Джереми: Мои планы довольно скучные. Я собираюсь поддерживать мои проекты как минимум еще 15–20 лет, а может и дольше. Также планирую дальше работать над самим Ruby, в основном над исправлением ошибок.
Evrone: Разработка
Джереми: Я уже много лет активно призываю ограничивать использование JavaScript. Большинство моих приложений написаны в стиле Web 1.0 с подходом
Однако это не полный ответ на вопрос. Я никогда не пробовал Hotwire или похожие библиотеки, и когда посылаю запросы с помощью JavaScript, вероятно предпочту получить ответ в виде JSON, а не HTML. Так что в некотором смысле надеюсь, что тенденция к простоте сохранится.
Когда используешь JavaScript, не нужно мыслить о выборе между JSON и HTML догматически. Бери то, что лучше подходит для конкретного случая. Если нужно заменить содержимое целого элемента, HTML подойдет лучше, в иных случаях лучше взять JSON. Ничто не мешает использовать оба формата. У меня есть приложения, где сервер возвращает JSON с фрагментами HTML, если мне нужно обновить несколько элементов HTML сразу.
Evrone: Если бы ты мог изменить
Джереми: Скорее всего удалил бы ряд фич из Ruby, начиная с локальных расширений классов (refinements) и Module#prepend. Обе эти возможности сильно усложняют объектную модель и реализацию. Обе были причиной множества дефектов, причем такие дефекты могут быть неисправимыми. Это эгоистичный ответ, поскольку я сам не использую эти фичи, но потратил много времени на исправление дефектов, которые
Заключение
Мы активно поддерживаем open-source проекты и берём интервью у самых разных людей из мира разработки, чтобы вы могли познакомиться с авторами инструментов, которые, быть может, используете в работе. Если хотите узнать больше — познакомьтесь с нашими собственными open-source инициативами и другими интервью.