Чарльз Наттер. Как перенести древний монолитный проект на JRuby и стоит ли это делать?

    Через пару дней в Москве пройдет конференция RubyRussia. Наш гость Чарльз Наттер (работает над JRuby и JVM поддержкой в Red Hat) ответил на пару вопросов.

    Как вы попали в мир программирования и Ruby?

    В 2004 году я работал по контракту в правительственной фирме в качестве Java Enterprise архитектора. Я работал над проектом для Министерства сельского хозяйства США, и проводил пару недель в месяц в Вашингтоне. Одна из таких поездок совпала с RubyConf 2004, и поскольку один из моих друзей давно рекомендовал мне обратить внимание на Ruby, я решил сходить на конференцию. Так я оказался на мероприятии, посвященном Ruby, не имея никакого представления об этом языке… но я понял каждый кусочек кода, каждый приведенный пример. Я был поражен и пообещал себе найти способ принести Ruby в мой Java-мир.

    Над какими проектами вы работаете сейчас?

    Я один из двух руководителей проекта JRuby. В эту работу входят и разные связанные проекты, например, поддержка нативных библиотек (мы поддерживаем Ruby FFI на JRuby), или перекодировка строк (портирование аналогичной логики из CRuby). Кроме того, я работаю с сообществом, чтобы быть уверенным, что наши пользователи всегда могут получить от нас помощь. В общем, работы всегда полно!

    У какого из этих проектов самое яркое будущее?

    Думаю, что это JRuby, хотя это и не самый популярный язык на платформе JVM.
    По крайней мере, мы поспособствовали позитивным изменениям в самой JVM. Во многом благодаря нашему сотрудничеству с Sun Microsystems и Oracle, сейчас JVM стал удобной платформой для многих динамических языков, не только Java. Я надеюсь, что мы сыграли не последнюю роль в этом изменении.

    На каких языках вы пишете чаще всего? Какой из них вам нравится больше всего и почему?

    Я в основном пишу на Ruby и Java, так как JRuby написан с использованием обоих. Каждый из этих языков хорошо подходит для своих задач. Ruby — для создания приложений, которым необходимо быстро развиваться и адаптироваться. Java — для написания высокоскоростных, надежных библиотек и сервисов. А JRuby сочетает в себе лучшее из обоих миров!

    Вам нравится программировать на Java?

    Да, особенно, если учесть все недавно добавленные улучшения языка, такие как лямбды (замыкания или блоки в Ruby), и новый синтаксис для объявления локальных переменных (var), когда статический тип однозначен.

    А что Вы думаете о Rust?

    Rust — отличный язык! В колледже я много использовал C ++, но я могу однозначно сказать, что, если бы в то время я знал Rust, я предпочел бы писать на нем. Мне особенно нравится статически-типизированная модель владения, которая позволяет писать стабильные параллельные программы, и гарантирует безопасный доступ к памяти. Думаю, другим языкам стоит перенять это в будущем.

    Какие у вас мысли по поводу перспектив Ruby? Многие годы многие считают, что язык и его сообщество «умирают»...

    После многих лет работы над JRuby, я полюбил синтаксис Ruby, и то, как вообще все в нем устроено. Но, боюсь, что проблема производительности реально существует и является важной. JRuby борется за то, чтобы сделать параллельные потоки реальностью для Ruby разработчиков, но, до сих пор, подавляющее большинство Ruby сервисов используют несколько изолированных процессов, тратя огромное количество и ресурсов процессора и памяти. Думаю, это связано со слишком масштабным и инвазивным C API для написания расширений Ruby, которое не позволяет внедрить такие улучшения, как параллельные потоки.
    Но я не теряю надежды, что однажды мы все же увидим изменения.

    Как вы думаете, какие из не самых популярных фич Ruby должны завоевать внимание в будущем?

    Я с нетерпением жду, когда строки станут иммутабельными по умолчанию, как это происходит в большинстве других языков. Параллельное программирование было бы намного проще, если бы больше объектов Ruby можно было бы сделать полностью неизменяемыми (deeply frozen). Это может напоминать модель, используемую в Rust… если вы делитесь объектом в потоках, следует выбирать ту версию объекта, которая точно не будет модифицирована. Это распространяется на массивы, хэши и практически на любой другой изменяемый объект в Ruby: нам необходимо упростить блокировку изменения данных.

    У меня есть большой старый монолитный проект на Ruby. Я подумал — а не перевести ли его на JRuby. Как это можно было бы сделать, и имеет ли это вообще смысл?

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

    • Сокращение затрат ресурсов, когда есть их недостаток, например, если на одном сервере хостятся сразу несколько приложений
    • Развертывание приложения Ruby в JVM-нагруженной среде, которая используется в крупных финансовых и правительственных организациях
    • Необходимость доступа к библиотекам, которые существуют только на Java, или которые проще портировать на JVM, чем их эквиваленты в Ruby или C
    • Небольшое повышение производительности в приложениях с тяжелыми вычислениями (которые грузят процессор) или с большим количеством параллельно выполняющихся задач.

    Я бы сказал, что если приложение масштабируется хорошо и не слишком дорого вам обходится, то возможно, вам не стоит ничего предпринимать. Но если вы решите получить от Ruby больше, то вот процесс миграции:

    • Соберите воедино все сторонние библиотеки, которые использует ваше приложение.
    • Выделите среди них те, которые используют С-расширения.
    • Для каждого расширения найдите эквивалент JRuby. У нас есть несколько
    • страниц в JRuby вики об этом. Самые популярные библиотеки имеют JRuby версии. Если же JRuby версий не находится, то можно использовать чистую Ruby версию (она будет достаточно быстрой на JRuby) или JVM-библиотеки (в Java, Scala, Clojure и т.п.), которые могут быть использованы в качестве замены.
    • Как только все ваши гемы заработали на JRuby — заработает и все приложение! Мы очень много внимания уделяем совместимости и стараемся принимать во внимание новые проблемы, на которые обращают внимание наши пользователи. Поэтому с большой вероятностью если у вас собрался bundle на JRuby — то приложение заработает.

    Ну а дальше начинается самое сложное — что делать с освободившимися ресурсами. На сколько потоков распараллелить приложение, как потратить сэкономленные деньги… :)

    Что сейчас необходимо знать студентам, чтобы стать хорошими программистами?

    Когда я учился в университете, на моих курсах по информатике преподавался язык Scheme, функциональный язык, подобный Lisp, который отлично подходил для обучения основам программирования. Я по-прежнему рекомендую начинающим программистам изучить хотя бы часть книги Structure and Interpretation of Computer Programs, изданной Массачусетским технологическим институтом (MIT). Ну и в целом, чем больше разных языков вы знаете, тем лучше. Это дает новые идеи, и позволяет взглянуть на решение ваших задач под разными углами.

    Где вы черпаете мотивацию для работы? Сталкивались ли вы с проблемой профессионального выгорания?

    Выгорание — это настоящая проблема в нашей отрасли. Особенно работа в open source
    приносит с собой огромное количество стресса. Думаю, это случалось со всеми… когда слишком много работы, не успеваешь все сделать, жертвуешь временем с семьей и друзьями, забываешь о здоровье, ради того, чтобы исправить еще один очередной баг. Чтобы бороться с этим, я стараюсь уделять внимание на хобби: играть в компьютерные и настольные игры, учиться играть на гитаре,
    изучать иностранные языки и путешествовать по миру, встречать новых людей. Во мне всегда будет жить ворчащий трудоголик, уговаривающий меня вернуться к работе, но я все же стараюсь поддерживать правильный баланс.

    Каково ваше мнение о России, и что вы ожидаете от предстоящего мероприятия RubyRussia?

    Я люблю Россию, и все мои поездки на конференции сюда за последние несколько лет были очень полезными. Это будет мой четвертый визит, ранее я был в Санкт-Петербурге, Москве и даже в Новосибирске (!!!). Я с нетерпением жду возвращения в Москву и встречи с российским Ruby-сообществом, о котором я весьма наслышан.

    Вопросы подготовил Дмитрий Матвеев, PM в компании Evrone. А задать свой вопрос можно будет уже 6 октября. Так что увидимся на конференции! Все подробности на сайте.

    Прочитать оригинал на английском можно на hype.codes.

    И огромное спасибо компаниям, которые подерживают главное Ruby-событие в России:

    Генеральный партнер — Toptal
    Золотые партнеры — Gett и Cookpad
    Серебярные партнеры — Instamart, UCHi.ru, JetBrains и Qlean
    Партнер афтепати — Teachbase
    Бронзовые партнеры — Bookmate и InSales

    RubyRussia

    56,00

    Конференция разработчиков на Ruby и RoR

    Поделиться публикацией
    Комментарии 1
      –1
      После многих лет работы над JRuby, я полюбил синтаксис Ruby, и то, как вообще все в нем устроено.

      Это ж сколько должно пройти лет, чтобы всё это полюбить?

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

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