GraalVM is a universal virtual machine for running applications written in JVM-based languages (Java, Scala, Clojure, Kotlin), JavaScript, Python, Ruby, R, and LLVM-based languages such as C and C++.
Quite often research projects look like something out of the world, something you won’t probably use in real life. Graal changes the picture: it took the stage out of the blue, and not as a newbie, but as a mature competitor. In this talk, we’ll look at what Graal consists of and what practical use you can get from it right now.
We’ll talk about GraalVM components:
Graal Compiler – an optimizing compiler that supports both dynamic and static compilation and can integrate with the Java HotSpot VM or run standalone. We’ll see how to run existing applications, and what benefit (in numbers) it can bring.
Substrate VM — a framework for ahead-of-time (AOT) compilation into executable images or shared objects. It sounds like a most radical and cheating optimization because it works the way no one else can (under closed-world assumption).
Truffle – language implementation framework for creating languages and instrumentations for GraalVM. Language design is a very complex field, so here we’ll focus on existing languages from GraalVM distribution.
Реактивный двигатель вашего Android приложенияMatvey Malkov
Презентация, объясняющая концепцию реактивных потоков с использованием Android SDK и RxJavа. Рассчитано на программистов с любым стажем, которые жеалют начать использовать эту концепцию в своих программах.
Реактивные потоки -- это круто.
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...IT Event
Время сборки swift-приложений стало притчей во языцех в iOS-сообществе. Чуть ли не каждый день появляется новая статья о том, как ускорить компиляцию исходного кода очередным лайфхаком. При этом современные мобильные проекты давно перешагнули стадию быстрой домашней разработки и сейчас включают сотни тысяч строк кода, удобная организация которого также представляет собой нетривиальную задачу. Одним из решений указанных проблем является создание фреймворков, реализующих основополагающий принцип разделения ответственностей модульной архитектуры.
В рамках доклада будут рассмотрены процессы создания и поддержки фреймворков и организация многослойного приложения на их основе. Слушатели узнают о сложностях, с которыми им придется столкнуться при разработке фреймворка, и о том, как их следует решать.
Рассказ будет интересен разработчикам, сталкивающимся в своей практике с задачей развития универсальных приложений со множеством дополнительных возможностей.
В этой презентации я рассказываю не только об автотестах, а о целом комплексе автоматических инструментов для обеспечения качества веб-сервиса на разных этапах разработки.
Как обеспечить проверку формата? Как поддерживать документацию в актуальном виде? Какую архитектуру выбрать для функциональных тестов?
Немного интересного про JSON-схемы и параметризованные тесты, про тестирование API методом чёрного ящика и про выбор исходных данных для тестирования.
В этом докладе рассмотрен опыт NetCracker по выбору инструмента для изучения причин проблем производительности.
Рассмотрены критерии по которым не подошли имеющиеся инструменты и показаны примеры того, чего не хватает при анализе результатов обычными профайлерами.
http://jokerconf.com/#sitnikov
Полной автоматизацией процесса сборки приложения уже никого не удивишь. Не в последнюю очередь благодаря Maven – системе управления жизненным циклом проекта. Однако проекты растут очень быстро: увеличивается количество модулей, тестов, зависимостей, используемых плагинов. И всего лишь за год легковесный проект, на сборку которого уходило 5 минут, превращается в монстра, который пожирает время разработчиков 30-минутной сборкой. Чтобы справится с этой проблемой разработчикам приходится постоянно чистить свой код и бороться со скоростью выполнения тестов. Это верное решение, но не следует забывать о том, что и сам процесс сборки можно улучшить. В этом докладе будет рассмотрено, как при помощи простых и нехитрых шагов можно оптимизировать работу с зависимостями и обогатить скрипты сборки полезными плагинами. Также будут обсуждаться тонкости конфигурации основных плагинов и особенности работы с командной строкой, которые появились в последней версии Maven.
Реактивный двигатель вашего Android приложенияMatvey Malkov
Презентация, объясняющая концепцию реактивных потоков с использованием Android SDK и RxJavа. Рассчитано на программистов с любым стажем, которые жеалют начать использовать эту концепцию в своих программах.
Реактивные потоки -- это круто.
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...IT Event
Время сборки swift-приложений стало притчей во языцех в iOS-сообществе. Чуть ли не каждый день появляется новая статья о том, как ускорить компиляцию исходного кода очередным лайфхаком. При этом современные мобильные проекты давно перешагнули стадию быстрой домашней разработки и сейчас включают сотни тысяч строк кода, удобная организация которого также представляет собой нетривиальную задачу. Одним из решений указанных проблем является создание фреймворков, реализующих основополагающий принцип разделения ответственностей модульной архитектуры.
В рамках доклада будут рассмотрены процессы создания и поддержки фреймворков и организация многослойного приложения на их основе. Слушатели узнают о сложностях, с которыми им придется столкнуться при разработке фреймворка, и о том, как их следует решать.
Рассказ будет интересен разработчикам, сталкивающимся в своей практике с задачей развития универсальных приложений со множеством дополнительных возможностей.
В этой презентации я рассказываю не только об автотестах, а о целом комплексе автоматических инструментов для обеспечения качества веб-сервиса на разных этапах разработки.
Как обеспечить проверку формата? Как поддерживать документацию в актуальном виде? Какую архитектуру выбрать для функциональных тестов?
Немного интересного про JSON-схемы и параметризованные тесты, про тестирование API методом чёрного ящика и про выбор исходных данных для тестирования.
В этом докладе рассмотрен опыт NetCracker по выбору инструмента для изучения причин проблем производительности.
Рассмотрены критерии по которым не подошли имеющиеся инструменты и показаны примеры того, чего не хватает при анализе результатов обычными профайлерами.
http://jokerconf.com/#sitnikov
Полной автоматизацией процесса сборки приложения уже никого не удивишь. Не в последнюю очередь благодаря Maven – системе управления жизненным циклом проекта. Однако проекты растут очень быстро: увеличивается количество модулей, тестов, зависимостей, используемых плагинов. И всего лишь за год легковесный проект, на сборку которого уходило 5 минут, превращается в монстра, который пожирает время разработчиков 30-минутной сборкой. Чтобы справится с этой проблемой разработчикам приходится постоянно чистить свой код и бороться со скоростью выполнения тестов. Это верное решение, но не следует забывать о том, что и сам процесс сборки можно улучшить. В этом докладе будет рассмотрено, как при помощи простых и нехитрых шагов можно оптимизировать работу с зависимостями и обогатить скрипты сборки полезными плагинами. Также будут обсуждаться тонкости конфигурации основных плагинов и особенности работы с командной строкой, которые появились в последней версии Maven.
До выхода Feature Complete версии OpenJDK 9 EA остался месяц. Самое время посмотреть, что ждет нас в следующей версии Java. Для начала рассмотрим процесс того, как идеи становятся JEP-ами, а потом становятся частью стандарта языка Java. Потом посмотрим на список из четрех десятков фич, разберем наименее тривилаьные из них на примерах: jshell, jmh, unified jvm logging и, конечно же, модулярность.
Случалось ли, что вы видели (чужой) код и хотели все переписать? Бывало такое, что вы не могли понять, почему кем-то было принято конкретное решение, не другое? Хотели ли вы воскликнуть:«А я бы сделал еще круче!»?
Если вы задумывались об этом, вам будет интересно послушать историю о том, как эти вопросы возникали у Александра и Кирилла и как они решались в условиях большой компании.
Разработчики расскажут, как в самом начале пути вытаскивали шашки и шли в атаку на проблемную архитектуру. Но все оказалось не так просто, и по мере погружения в проект парни стали понимать, что архитектура большой системы — компромисс между различными подходами и решениями, инновациями и легаси (наследованным кодом), централизацией и децентрализацией компонентов. Докладчики наработали очень много опыта в решении архитектурных задач и поделятся опытом и выработанными принципами, которых придерживаются в настоящее время.
Во время доклада будут обсуждаться непростые вопросы, возникающие при принятии решений о том, как будет жить и эволюционировать система.
Вместе со слушателями Александр и Кирилл проделают упражнение по созданию «таблицы технологий» и её эволюции. Также они покажут, насколько важно инженерное решение на любой из стадий развития системы.
Мы напишем простейший веб-сервис из клиента и сервера на C++. На этом C++ часть закончится, и пойдет настройка окружения и инфраструктуры. Мы обеспечим детерминируемость сборки и прогона тестов. Облегчим последующее обновление зависимых библиотек. Автоматизируем статические проверки, верификацию кода, прогон тестов. Обеспечим доступность сервиса, настроим инфраструктуру, сбалансируем нагрузку, добавим автоматическое и ручное масштабирование. И под конец мы настроим continious delivery таким образом, что код будет на продакшене через 5 минут после реквеста, при этом даже невалидные изменения и ошибки программиста не смогут повлиять на его работу.
Пара простых советов как ускорить регулярные выражения и предотвратить stackoverflowerror.
Да, хоть и нужны они нечасто, но почему-то мало кто знает про *+ и ?>.
Рассмотрен и вопрос xpath vs regexp. Регулярные выражения побеждают стандартный XML движок.
Все говорят, что при проблемах с памятью нужно открыть Eclipse MemoryAnalyzer и немного покрутить. Да, часто это срабатывает, но бывает, что даже опытного инженера задача ставит в тупик.
В докладе мы рассмотрим примеры коварных OOM, и научимся анализировать причины их возникновения. На живых мертвецах дампах памяти увидим почему может не очищаться WeakHashMap, куда утекает native память, сколько finalizer'ов поместится на кончике иглы.
Полученные знания позволят вам уверенно разбирать дампы памяти и избегать шаблонов кода, приводящих к утечкам.
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыOleg Nenashev
Рассказ о Configuration as Code в Jenkins и возможностях Pipeline: DSL, Multi-Branch, Pipeline Model Definition, восстановление после ошибок, параллелизация задач, интеграции. В каком направлении развивается экосистема?
Behavior Driven Development - подход к разработке ПО, основывающийся на ориентации на business value и исполняемых спецификациях, написанных на человеческом языке
Low-code sells great, but in practice, it does not provide the benefits that vendors have claimed. What are the reasons and how can we get an advantage using the Low-code principle? Experience of radical rethinking and use-cases in enterprise applications together with multi-paradigm programming and metaprogramming.
https://fwdays.com/en/event/architecture-fwdays-2021/review/rethinking-low-code
Когда проект делает один разработчик — все просто. Когда над ним работает небольшая команда, можно синхронизироваться и договориться. А вот когда проектов (сайтов и приложений) становится много, и над ними трудится множество команд с перекрестной функциональностью и смежными зонами ответственности, все становится сложным и запутанным.
Я расскажу о своем виденье архитектуры фронтенда, какой она должна быть, чтобы обеспечить её масштабируемость. На основе своего опыта и проблем, с которыми сталкиваются большие проекты.
Видео: https://www.youtube.com/watch?list=PLknJ4Vr6efQFtZmsXmGG64Rz_PHrcXCBL&v=z9y6PNC2FL0
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
Покажу как выпилить пароли/сертификаты/важные данные из репозиториев. Дам всю необходимую информацию для внедрения Hashicorp Vault в вашей компании и команде. Сделаю акцент на использовании в контейнерных инфраструктурах. Рассмотрю продвинутые практики использования и юз-кейсы с вау эффектом, которые работают в реальной жизни. Тут будут звучать такие слова как Ansible, Chef, Puppet, Docker, Swarm, Kubernetes etc.
Доклад, который сможет помочь сделать все хорошо, даже если сейчас все плохо.
Доклад на конференции Selenium Camp 2012.
http://seleniumcamp.com/program/#parallel-testing
Видео: http://video.yandex.ru/users/xpinjection/view/105/#hq
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Fwdays
Every company comes to a point where it’s infrastructure no longer fits team and business needs, and kludges are not working anymore. That’s the time to re-think and redesign the whole infrastructure. This is exactly where our company was half a year ago. I will talk about our experience dealing with this challenge while balancing between existing technology, costs, today’s reality and future needs.
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Ontico
HighLoad++ 2017
Зал «Кейптаун», 7 ноября, 17:00
Тезисы:
http://www.highload.ru/2017/abstracts/2897.html
Нашей группе было поручено создать новый самостоятельный “регион” для всех продуктов New Relic, предназначенный для обслуживания европейских клиентов, подпадающих под ограничения GDPR. Здесь следует отметить, что так как наша компания предоставляла свои услуги исключительно через “облако” (SaaS), то хорошо выработанных процессов для настройки всей инфраструктуры “с нуля” у нас не было.
...
До выхода Feature Complete версии OpenJDK 9 EA остался месяц. Самое время посмотреть, что ждет нас в следующей версии Java. Для начала рассмотрим процесс того, как идеи становятся JEP-ами, а потом становятся частью стандарта языка Java. Потом посмотрим на список из четрех десятков фич, разберем наименее тривилаьные из них на примерах: jshell, jmh, unified jvm logging и, конечно же, модулярность.
Случалось ли, что вы видели (чужой) код и хотели все переписать? Бывало такое, что вы не могли понять, почему кем-то было принято конкретное решение, не другое? Хотели ли вы воскликнуть:«А я бы сделал еще круче!»?
Если вы задумывались об этом, вам будет интересно послушать историю о том, как эти вопросы возникали у Александра и Кирилла и как они решались в условиях большой компании.
Разработчики расскажут, как в самом начале пути вытаскивали шашки и шли в атаку на проблемную архитектуру. Но все оказалось не так просто, и по мере погружения в проект парни стали понимать, что архитектура большой системы — компромисс между различными подходами и решениями, инновациями и легаси (наследованным кодом), централизацией и децентрализацией компонентов. Докладчики наработали очень много опыта в решении архитектурных задач и поделятся опытом и выработанными принципами, которых придерживаются в настоящее время.
Во время доклада будут обсуждаться непростые вопросы, возникающие при принятии решений о том, как будет жить и эволюционировать система.
Вместе со слушателями Александр и Кирилл проделают упражнение по созданию «таблицы технологий» и её эволюции. Также они покажут, насколько важно инженерное решение на любой из стадий развития системы.
Мы напишем простейший веб-сервис из клиента и сервера на C++. На этом C++ часть закончится, и пойдет настройка окружения и инфраструктуры. Мы обеспечим детерминируемость сборки и прогона тестов. Облегчим последующее обновление зависимых библиотек. Автоматизируем статические проверки, верификацию кода, прогон тестов. Обеспечим доступность сервиса, настроим инфраструктуру, сбалансируем нагрузку, добавим автоматическое и ручное масштабирование. И под конец мы настроим continious delivery таким образом, что код будет на продакшене через 5 минут после реквеста, при этом даже невалидные изменения и ошибки программиста не смогут повлиять на его работу.
Пара простых советов как ускорить регулярные выражения и предотвратить stackoverflowerror.
Да, хоть и нужны они нечасто, но почему-то мало кто знает про *+ и ?>.
Рассмотрен и вопрос xpath vs regexp. Регулярные выражения побеждают стандартный XML движок.
Все говорят, что при проблемах с памятью нужно открыть Eclipse MemoryAnalyzer и немного покрутить. Да, часто это срабатывает, но бывает, что даже опытного инженера задача ставит в тупик.
В докладе мы рассмотрим примеры коварных OOM, и научимся анализировать причины их возникновения. На живых мертвецах дампах памяти увидим почему может не очищаться WeakHashMap, куда утекает native память, сколько finalizer'ов поместится на кончике иглы.
Полученные знания позволят вам уверенно разбирать дампы памяти и избегать шаблонов кода, приводящих к утечкам.
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыOleg Nenashev
Рассказ о Configuration as Code в Jenkins и возможностях Pipeline: DSL, Multi-Branch, Pipeline Model Definition, восстановление после ошибок, параллелизация задач, интеграции. В каком направлении развивается экосистема?
Behavior Driven Development - подход к разработке ПО, основывающийся на ориентации на business value и исполняемых спецификациях, написанных на человеческом языке
Low-code sells great, but in practice, it does not provide the benefits that vendors have claimed. What are the reasons and how can we get an advantage using the Low-code principle? Experience of radical rethinking and use-cases in enterprise applications together with multi-paradigm programming and metaprogramming.
https://fwdays.com/en/event/architecture-fwdays-2021/review/rethinking-low-code
Когда проект делает один разработчик — все просто. Когда над ним работает небольшая команда, можно синхронизироваться и договориться. А вот когда проектов (сайтов и приложений) становится много, и над ними трудится множество команд с перекрестной функциональностью и смежными зонами ответственности, все становится сложным и запутанным.
Я расскажу о своем виденье архитектуры фронтенда, какой она должна быть, чтобы обеспечить её масштабируемость. На основе своего опыта и проблем, с которыми сталкиваются большие проекты.
Видео: https://www.youtube.com/watch?list=PLknJ4Vr6efQFtZmsXmGG64Rz_PHrcXCBL&v=z9y6PNC2FL0
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
Покажу как выпилить пароли/сертификаты/важные данные из репозиториев. Дам всю необходимую информацию для внедрения Hashicorp Vault в вашей компании и команде. Сделаю акцент на использовании в контейнерных инфраструктурах. Рассмотрю продвинутые практики использования и юз-кейсы с вау эффектом, которые работают в реальной жизни. Тут будут звучать такие слова как Ansible, Chef, Puppet, Docker, Swarm, Kubernetes etc.
Доклад, который сможет помочь сделать все хорошо, даже если сейчас все плохо.
Доклад на конференции Selenium Camp 2012.
http://seleniumcamp.com/program/#parallel-testing
Видео: http://video.yandex.ru/users/xpinjection/view/105/#hq
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Fwdays
Every company comes to a point where it’s infrastructure no longer fits team and business needs, and kludges are not working anymore. That’s the time to re-think and redesign the whole infrastructure. This is exactly where our company was half a year ago. I will talk about our experience dealing with this challenge while balancing between existing technology, costs, today’s reality and future needs.
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Ontico
HighLoad++ 2017
Зал «Кейптаун», 7 ноября, 17:00
Тезисы:
http://www.highload.ru/2017/abstracts/2897.html
Нашей группе было поручено создать новый самостоятельный “регион” для всех продуктов New Relic, предназначенный для обслуживания европейских клиентов, подпадающих под ограничения GDPR. Здесь следует отметить, что так как наша компания предоставляла свои услуги исключительно через “облако” (SaaS), то хорошо выработанных процессов для настройки всей инфраструктуры “с нуля” у нас не было.
...
Кирилл Комлев. О реализации continuous integration для web проектовOlesya_V
Доклад на конференции WebDev 2015
С развитием веб-проектов в качестве SaaS по agile-технологиям основной проблемой становиться своевременной обновление разрабатываемого ПО на множестве подконтрольных доменов. В этом случае достаточно удобно использовать системы непрерывной интеграции, которые позволяют оценить новый код, произвести тестирование и развертывание веб-проекта. В докладе представлена общая картинка организации системы непрерывной интеграции и рассмотрены основные инструменты для тестирования, оценки качества кода и организации развертывания веб-проекта под UNIX-подобные системы с использованием бесплатного ПО.
AzovDevMeetup 2016 | Выстраивание процесса и применение Best Practices с нуля...JSC “Arcadia Inc”
Представьте себе ситуацию: к вам приходит заказчик, у него уже есть продукт, и вам надо организовать процесс и создать соответствующую инфраструктуру так, чтобы сделать работу над продуктом максимально удобной и эффективной. Какие шаги были сделаны и почему, какие проблемы встретились и как были решены проектной командой в вышеописанной ситуации, к чему всё это привело на данный момент — об этом и будет рассказано в докладе.
Привет, Санкт-Петербург!
В разгар летнего сезона, мы поговорим об историях обновлений,
например, с 6.4 до 7.х, с разными трюками, а также об истории исследования разных регрессий на продуктах Atlassian и других плагинов.
Наша программа будет пополняться, и мы рады к сотрудничеству.
Ждем Вас на встрече в Яндекс Деньгах.
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
В последнее время во фронтенде появляется столько нового и внедряется настолько быстро, что не все успевают осознать последствия. Хорошо это или плохо? Рассмотрим некоторые новинки с точки зрения «за», а главное – «против».
Dev&Test на Windows Azure IaaS:
* Что за Dev&Test? Ситуации Dev&Test
* Как делать D&T на Windows Azure?
* Как делают люди?
* Ограничения Windows Azure, которые важны
* Топологии
Доклад читался на http://university.jokerconf.com/. Целевая аудитория -- начинающие программисты.
У enterprise-приложений много общих подводных камней, которые подстерегают на пути к выводу систему в эксплуатацию.
Что делать, если через неделю после выхода в production система начала тормозить? Что делать, если проблема воспроизводится только у заказчика?
В докладе рассмотрим частые случаи, приводящие к полной или частичной недоступности production-системы. Научимся обходить стороной грабли и поднимать их до того, как на них кто-то наступит.
Из презентации вы узнаете:
— как мы пришли к Go, оставив идею использования Node.js, Scala или Rust;
— про первый сервис, который мы написали на Go и запустили в продакшен;
— про ошибки, с которыми сталкивались под нагрузкой;
— про оптимизации, которые мы сделали и еще планируем сделать;
— про тестирование и предотвращение тестирования на продакшене (в частности, websocket'ов).
Similar to Graal, Truffle, SubstrateVM and other perks: what are those and why do you need them (20)
Graal, Truffle, SubstrateVM and other perks: what are those and why do you need them
1. One GraalVM to rule them all
One VM to find them,
One VM to bring them all and in darkness bind
them
In the land of Java where shadows lie.
2. The following is intended to outline our supposed general direction of growth and
development as Java programmers. It is intended for information purposes only, and may not
be incorporated into any contract. It is not a commitment to deliver any material, code, or
functionality, and should not be relied upon in making purchasing decisions. The
development, release and timing of any features or functionality described for products or
services remains at the sole discretion of corresponding companies. Opinions expressed are
solely my own and do not express the views or opinions of my employer.
Информация предназначается чтобы обозначить наше общее направление роста и
развития как Java-программистов. Она предоставляется только в целях ознакомления, и
не может быть использована в контрактах или договорах любого вида. Эта информация
не является попыткой предоставления какого-то материала, кода, или
функциональности, и не должна быть использована в принятии коммерческих решений.
Разработка, выпуск, календарные сроки любых объектов или функциональности,
описанных в контексте продуктов или услуг различных компаний, остается на
усмотрение соответствующих компаний. Описанные в докладе мнения не отражают
позиции работодателя.
Safe Harbor
6. Нужно ли это нам?
НЕТ
ДА!
Обычная бизнес-логика, код в стиле Java 6
• Код в современном стиле (лямбды, стримы, Spring, …)
• Дикое количество мелких объектов (которые не убегают)
• Числодробилки
• Scala
• Смешивание языков в одном проекте
7. ЭТО В ПРОДЕ!
• Twitter
• Несколько финансовых организаций
(пожелавших остаться неизвестными)
• Oracle Labs (GraalVM Enterprise Edition)
25. ДЕНЬ СУРКА
1. Дизайн языка
2. Парсер, интерпретатор AST
3. Люди начинают этим пользоваться
26. ДЕНЬ СУРКА
1. Дизайн языка
2. Парсер, интерпретатор AST
3. Люди начинают этим пользоваться
4. Все тормозит
27. ДЕНЬ СУРКА
1. Дизайн языка
2. Парсер, интерпретатор AST
3. Люди начинают этим пользоваться
4. Все тормозит → разработчик — криворукая тварь
28. ДЕНЬ СУРКА
1. Дизайн языка
2. Парсер, интерпретатор AST
3. Люди начинают этим пользоваться
4. Все тормозит → разработчик — криворукая тварь
5. Мучительная оптимизация
30. ДЕНЬ СУРКА
1. Дизайн языка
2. Парсер, интерпретатор AST
3. Люди начинают этим пользоваться
4. Все тормозит → разработчик — криворукая тварь
5. Мучительная оптимизация
• Может, переписать на C++? (нет, нельзя)
• Байткод, интерпретатор байткода
• Работа с немусором (кэширование)
• Работа с мусором (сборщик)
• … (стандартные оптимизации)
31. МЕЧТЫ
1. Придумал язык
2. Записал на фреймворке
3. Все счастливы
• Быстро работает
• Включая границу языков
• Есть инструменты
• Кишки понятны
33. НЕУЛОВИМЫЙ ДЖО
1.Очень академический
2.Сложный и не очень понятный
3.Частично закрытые исходники
4.Недостаточное освещение в СМИ
• Куча научных работ
• Документации днем с огнем не найдешь
• Очень специальные люди
69. 1. Partial Escape Analysis
2. Более хороший инлайнинг
GraalVM CE vs C2
70. 1. Более лучший инлайнинг (+10 — +150%)
• Java Streams
• BigData (Apache Spark)
2. Автоматическая векторизация SIMD
3. Вынос условий из циклов
4. Дублирование/инлайнинг на merge points
5. cmov вместо бранча, если предикшен плох
GraalVM EE vs CE
74. JEP 243: Java-Level JVM Compiler Interface
http://openjdk.java.net/jeps/243
JEP 317: Experimental Java-Based JIT Compiler
http://openjdk.java.net/jeps/317
75. public interface JVMCICompiler {
int INVOCATION_ENTRY_BCI = -1;
/**
* Services a compilation request. This object should compile the method
to machine code and
* install it in the code cache if the compilation is successful.
*/
CompilationRequestResult compileMethod(CompilationRequest request);
}
76. public class CompilationRequest {
private final ResolvedJavaMethod method;
/**
* Gets the method to be compiled.
*/
public ResolvedJavaMethod getMethod() {
return method;
}
}
78. src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/CompilerToVM.java
/**
* Installs the result of a compilation into the code cache.
*
* @param target the target where this code should be installed
* @param compiledCode the result of a compilation
* @param code the details of the installed CodeBlob are written to this object
* @return the outcome of the installation which will be one of
native int installCode(TargetDescription target,
HotSpotCompiledCode compiledCode,
InstalledCode code,
HotSpotSpeculationLog speculationLog);
final class CompilerToVM {
79. Context-sensitive trace inlining for Java
• Одна из самых старых оптимизаций (исследование)
• Позволяет понять, какие оптимизации можно делать
• Сейчас не используется
(мешает высоко полиморфный код)
https://www.sciencedirect.com/science/article/pii/S1477842413000146
99. public int ArrayList.indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
100. public class LineBuilder {
private final Appendable buffer;
public LineBuilder(Appendable buffer) {
this.buffer = buffer;
}
public void appendLine(CharSequence sequence)
throws Exception {
buffer.append(sequence);
buffer.append("n");
}
}
105. public int ArrayList.indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
113. abstract class Node {
// Запускаем операцию, возвращаем результат
public abstract Object execute(Frame f);
// Родительский узел в AST
private Node parent;
// Заменить этот узел другим
protected void replace(Node newNode);
}
114.
115. abstract class Node {
public abstract Object execute(Frame f);
public abstract int executeInt(Frame f)
throws UnexpectedResultException;
public abstract double executeDouble(Frame f)
throws UnexpectedResultException;
}
119. class IntegerAddNode extends BinaryNode {
public Object execute(Frame frame) {
Object a = left.execute(frame);
if (!(a instanceof Integer)) {
// Перезаписать ноду, запустить перезаписанное
// подав на вход уже вычисленное left
}
Object b = right.execute(frame);
if (!(b instanceof Integer)) {
// Перезаписать ноду, запустить перезаписанное
// подав на вход уже вычисленное right
}
// Здесь могла бы быть ваша реклама проверка на переполнение.
return (Integer) a + (Integer) b;
}
}
120. class IntegerAddNode extends BinaryNode {
public int executeInt(Frame frame)
throws UnexpectedResultException {
int a;
try {
a = left.executeInt(frame);
} catch (UnexpectedResultException ex) {
// Перезаписать ноду и запустить с left
}
int b;
try {
b = right.executeInt(frame);
} catch (UnexpectedResultException ex) {
// Перезаписать и запустить с left и right
}
// Здесь могла бы быть ваша реклама проверка на переполнение.
return a + b;
}
121. function foo(a, b, c, d) {
return add(a, b) + add(c, d);
}
function add(a, b) {
return a + b;
}
foo(1, 2, "Маша", "Петя");
132. function foo(a, b, c, d) {
var x; var i;
for (i = 0; i < n; i++) {
x += add (a, b);
}
var y; var i2;
for (i2 = 0; i2 < n; i2++) {
y += add (a, b);
}
return x + y;
}
144. Основные проблемы
• Использование наиболее подходящего языка
(можно смешивать произвольные языки)
• Миграция между языками, поддержка легаси
(взять две существующие кодовые базы и развивать их параллельно)
(без написания костыльных переходников и врапперов)
• Избежать потерь при пересечении границы языка
145. Доступные языки в GraalVM
• Java
• JavaScript
• Ruby
• R
Доступные языки вообще
• С, C++, Fortran (Sulong – LLVM bitcode)
• Python (ZipPy)
• Можно написать свой
https://gist.github.com/smarr/d1f8f2101b5cc8e14e12
One VM to Rule Them All by Thomas Wuerthinger
151. Node.JS
var fs = require('fs');
var vm = require('vm');
var includeInThisContext = function(path) {
var code = fs.readFileSync(path);
vm.runInThisContext(code, path);
}.bind(this);
includeInThisContext(__dirname+"/shared.js");
validate(1);
156. Зачем нужна Java для генерации фронта?
• Генерация стабов и прокси-классов для общения по HTTP
• Состав поставки приложения (набор фич)
• Статическая генерация по Java-источникам (Hibernate)
• Перенос данных об окружении (номер версии из Maven)
• Причины возникают по ходу дела
164. loaders/preload.js
module.exports = function main(source) {
this.cacheable();
var MyString = Java.type("java.lang.String");
var buttonCaption = new MyString("Сказать ещё дичи!");
return `window.buttonCaption="${buttonCaption}";` + `${source}`;
};
204. JDK 11 - не всё адаптировано
JDK 8 - устарел
mx igv
Error occurred during initialization of boot layer
java.lang.module.FindException: Module java.xml.bind not found