![](https://habrastorage.org/webt/8w/3c/ey/8w3ceygsjqk2tt2s9gb0aqadcbk.jpeg)
О докладчике
Чарльз является одним из двух ключевых разработчиков проекта JRuby. Активнейший участник конференций в качестве докладчика, в том числе неоднократно принимал участие в конференциях JUG.ru Group.
Некоторые из его докладов в хронологическом порядке:
- «Beyond JVM» (YOW! 2013: видео)
- «What's Next For The JVM?» (GOTO 2014: видео)
- «Let's Talk About Invokedynamic» (Joker 2016: видео, презентация)
- «From Java to Assembly: Down the Rabbit Hole» (Joker 2016: видео, презентация)
- «More Than You Want to Know about Java's String» (JBreak 2017: видео, презентация)
- «More Than You Want to Know about Java's String» (JPoint 2017: презентация)
- «Going Native: Foreign Functions on the JVM» (JPoint 2017: видео, презентация)
- «JRuby in 2017: Fast, Compatible, and Concurrent» (RubyConfBY 2017: видео)
- «JRuby at 15 Years: Meeting the Challenges» (RubyKaigi 2017: видео)
- «MethodHandles Everywhere» (Jfocus 2018: видео, презентация)
- «Graal Without Truffle» (JVM Language Summit 2018: видео)
Ещё ссылки: твиттер, технический блог, GitHub, YouTube-канал.
О докладе
Текущее посещение Чарльзом Москвы было связано с участием его в конференции RubyRussia (см. интервью с ним на Хабре). Усилия, которые приложил Андрей Когунь, позволили участникам jug.msk.ru встретиться с Чарльзом.
Андрей открывает встречу. Рукопожатие с докладчиком, ставшее уже традиционным.
![](https://habrastorage.org/webt/c8/fw/1t/c8fw1t2sehqm0_74ik09qkgwuzm.jpeg)
В первой половине встречи Чарльз рассказал о сегодняшнем состоянии динамических языков в JVM: сравнении статических и динамических языков, месте JRuby среди различных языков программирования, характеристике свойств JRuby, результатах тестов, будущем динамических языков.
![](https://habrastorage.org/webt/k2/ek/ye/k2ekye1mao5kgo2r5_281q1rsp0.jpeg)
Во второй половине была практическая демонстрация примеров, иллюстрирующих ранее показанную презентацию.
![](https://habrastorage.org/webt/do/or/hc/doorhcabchgmntd7hekggy6wx9a.jpeg)
Весьма интересные вопросы от слушателей задавались и по ходу выступления, и в перерыве, и после встречи: о востребованности продукта и количестве разработчиков JRuby, сравнении по производительности реализаций языка Ruby, разумности и особенностях перехода на JRuby с Jython (от IvanPonomarev) и прочее, прочее. Вопросы понравились как аудитории, так и Чарльзу.
![](https://habrastorage.org/webt/xl/w8/-q/xlw8-qpy_6bm4ggge2hhg7ekqda.jpeg)
С презентацией доклада можна ознакомиться здесь (на SpeakerDeck создана учётная запись jugmsk, на которой появится архив предыдущих встреч и будут выкладываться презентации будущих).
Фотографии скоро появятся здесь. Видео будет доступно на YouTube (с анонсом в VK и Google+). Имеется возможность подписаться на рассылку с анонсами следующих встреч jug.msk.ru.
Комментарии (12)
fzn7
12.10.2018 17:55+1Я думаю стоит упомянуть, что наряду с JRuby существует проект TruffleRuby под GraalVM github.com/oracle/truffleruby
TruffleRuby aims to:
- Run idiomatic Ruby code faster
- Run Ruby code in parallel
- Boot Ruby applications in less time
- Execute C extensions in a managed environment
- Add fast and low-overhead interoperability with languages like Java, JavaScript, Python and R
- Provide new tooling such as debuggers and monitoring
- All while maintaining very high compatibility with the standard implementation of Ruby
IvanPonomarev
12.10.2018 19:52Есть и такое, Чарльз как раз упоминал:
Касательно C-extensions — у JRuby, естественно, нет прямой совместимости с ними. Но, со слов Чарльза, это не большая беда, т. к. всего несколько процентов Ruby-библиотек их используют, а для самых важных Ruby-библиотек, зависящих от C (например, парсер XML) написаны «Java-заменители».
Всё это — со слов самого Чарльза, конечно. Но говорил он убедительноfzn7
13.10.2018 23:17Увы, но Java 8 уже сильно устарела, поэтому трюфель в перспективе заменит jruby. На пришествие этого момента работает уже в первую очередь Ruby комьюнити, возлагающее большие надежды на базовую платформу от Оракл, против самодурства ребят из mri
IvanPonomarev
Очень круто, что ребята позвали Чарльза, для меня это был актуальный и полезный доклад.
Языку Ruby, конечно, здорово повезло, что в него зашёл такой человек, как Чарльз — и теперь есть JRuby. Который, оказывается, не просто «ещё одна» имплементация языка, а по многим параметрам лучшая имплементация языка, важный игрок в экосистеме Ruby, подпитывающий экосистему со своей стороны.
К сожалению, такого не произошло с Python. Когда несколько лет назад мы начинали использовать Jython, это был ещё живой проект, сейчас же его развитие слишком медленное, а проблемы накапливаются как снежный ком. При том что у стратегически у проекта Jython были все шансы оказаться успешнее, чем JRuby — в силу популярности и востребованности языка Python в наше время. Ставка, в своё время сделанная нами на Jython, надо это признать, проиграла. Выбери мы Groovy или JRuby — результат был бы лучше.
C JRuby я вижу только одну проблему. Ruby мне не очень нравится как язык — он наследник Perl с его «there's more than one way to do it», и потому там легко наколбасить «эзотерический» код )
excentro
Да, жаль, что с Jython все грустно…
dbelob Автор
Иван, спасибо за хорошие вопросы на встрече!
Что ещё рассматривали, когда выбрали для Celesta Jython? Насколько трудно (и планируется ли) переехать на что-то другое, например, на JRuby?
IvanPonomarev
Я смотрел и на Groovy, и на JRuby. Но тогда Jython казался лучшим выбором: перспективный язык Python, живой (тогда) проект, легко встроить в Java-приложение. В итоге через несколько лет мы получили: 1) отставание от спецификации языка 2) с большинством библиотек из pip либо несовместимость, либо просадка по производительности 3) баги в самой имплементации языка. Жить, однако, можно. По утверждениям Чарльза, всех этих проблем в JRuby нет. Как оно обстоит на самом деле — это надо слушать независимые свидетельства :-)
Касательно же Celesta — новости близко!!! :-) На одном из наших проектов мы используем ветку версии 7.x. Сейчас мы доведём до ума эту ветку, доработаем тесты, обновим документацию и тогда я где-нибудь напишу пост. Если вкратце, произошло вот что:
1) вовсе убрали из Celesta зависимость от Jython,
2) кодогенерируем классы курсоров на чистой Java, а не на Python,
3) сделали spring-boot-starter и в целом теперь основной сценарий использования Celesta 7.x — это бэкенд на спрингбуте, всё это должно стать гораздо интереснее Java-разработчикам,
4) инвертировали контроль — теперь не Celesta вызывает процедуры, а из процедур используется Celesta как сервис. Т.е. это значит, что Celesta становится возможно использовать из любого JVM языка. На практике — мы уже сейчас пишем на Celesta в чистой Java. Я, возможно, для статьи сделаю демо-пример на Groovy.
Увы и ах, всё это — дорогой ценой того, что вся написанная на Jython-е кодовая база перестала быть совместимой. Но надо двигаться дальше с новыми проектами. Jython-ориентированную ветку 6.x и все Jython-проекты мы будем поддерживать ещё долго.
dbelob Автор
Благодарю за столь подробный ответ — т.е. отказались от Jython не в пользу чего-то нового другого, а в пользу написания на уже имеющейся Java (как одного из возможных JVM-языков)?
Использование JRuby в подобном качестве уже неактуально по причине архитектурных изменений?
IvanPonomarev
Не за что, мне это всё равно скоро предстоит писать-объяснять)
В Celesta 6.x в папке score лежат CelestaSQL-скрипты + Python-код + кодогенерированные на Python классы доступа. Python-код запускается через
celesta.runPython("proc.name"...)
. Необходим внешний сервис, который выполняет метод runPython (чаще всего Flute).В Celesta 7.x в папке score челесту интересуют исключительно SQL-ники. Классы доступа кодогенерируются на Java (например, с помощью celesta-maven-plugin). Точка входа на уровне сервисных классов выглядит так:
В этом случае HelloService может запускаться из контроллера, например
И тут уже не важно, на чём написан контроллер и сервис. Может на Java, может на Groovy. Может, на Kotlin. А может — почему нет? — на JRuby или всё том же Jython. В последних двух случаях надо с интеграцией повозюкаться, но в целом не вижу проблемы. Интересное свойство JRuby паковаться в .jar/.war тут может помочь.
xvilka
У Python есть PyPy.
IvanPonomarev
И есть IronPython для .NET, и вроде бы там всё гораздо лучше обстоит, чем в Jython. Но мы-то про JVM-реализации говорим…