Ruby 3 что нового
RubyGems Digest 2020·09
Большая подборка информации о библиотеках языка Ruby за сентябрь 2020 года. Новости, включая русскоязычные источники. А также полезные мнения и опыт разработки.
Новости
Вышел Ruby 3.0.0 Preview 1. В нём добавляются статическая типизация RBS, улучшение производительности с помощью MJIT, параллельные вычисления на модели акторов с помощью Ractor, планировщик для перехвата блокирующих операций и другое. Новую версию уже можно попробовать в Docker.
4-5 сентября прошла японская конференция RubyKaigi Takeout 2020. Многие доклады представлены на английском. Больше ссылок на видео — ниже, в Полезных материалах.
8 сентября прошла итальянская конференция RubyDay 2020.
12-13 сентября прошла украинская конференция RubyC 2020.
RWpod 35 выпуск
В Ruby добавляется экспериментальная поддержка правостороннего присваивания
В Rails добавляется поддержка сохранения часовых поясов для ActiveJob
Система тестов II: надежное браузерное Rails-тестирование с помощью SitePrism
RWpod 36 выпуск
Sinatra v2.1.0
В класс Symbol добавят метод name для получения неизменяемой строки с именем символа
Вышли Rails 5.2.4.4 и Rails 6.0.3.3
Написание web-сервера на основе Ractor
RWpod 37 выпуск
В Ruby добавляется пересылка списка аргументов с выделением ведущих аргументов
Мы сделали Puma быстрее с помощью Sleep Sort
Rails Concerns: использовать Concern или нет
RWpod 38 выпуск
Вышел Ruby 3.0.0 Preview 1
В Rails 6.1 объявляются устаревшими команды rails db:structure:dump и rails db:structure:load
В Ruby объявляется устаревшим класс DateTime
Новинки
Classy Hash 1.0.0 — валидатор схем для хэшей
Cloudflare::Rails 1.0.0 — библиотека для правильной настройка Rails для CloudFlare
Новые версии
Puma 5.0.0 — HTTP-сервер для Ruby/Rack-приложений.
Browser 5.0.0 — определитель браузера, включает интеграцию с ActionController.
Airbrake 11.0.0 — онлайн инструмент для отслеживания исключений в приложениях.
docker-api 2.0.0 — гем, предоставляющий объектно-ориентированный интерфейс для Docker Engine API
Coverband 5.0.0 — измерение использования кода на продакшене со счетчиком для каждой строки.
Castle-rb 5.0.0 — защита аккаунтов от взлома.
Foreman-tasks 3.0.0 — движок управления задачами для системы управления инфраструктурой Foreman
Blocks 4.0.0 — библиотека для работы с блоками MVC-представлений
Hawkular Client 5.0.0 — клиент для инструментария мониторинга Hawkular
Waterdrop 2.0.0 — библиотека для простой отправки сообщений в Kafka с валидацией
Ruby-bandwidth 3.0.0 — интеграция с сервисом звонков и сообщений Bandwidth
Rgeo-shapefile 3.0.0 — компонент для чтения файлов геопространственных данных библиотеки RGeo
Stripe-rails 2.0.0 — движок для интеграции с платежной инфраструктурой Stripe
Обновления
StimulusReflex 3.3.0 — frontend-библиотека для создания современных реактивных real-time приложений на привычном Ruby on Rails
Webpacker 5.2.0 — надстройка над webpack для управления Javascript-модулями в Rails-приложениях.
Sinatra 2.1.0 — DSL для создания web-приложений.
Rack::Protection 2.1.0 — защита от распространненых способов web-атак.
Unicorn 5.7.0 — HTTP-сервер с Rack-интерфейсом
Haml 5.2.0 — шаблонизатор для HTML.
WebMock 3.9.0 — библиотека для заглушек и установки ожиданий на HTTP-запросы в Ruby.
Rack-mini-profiler 2.1.0 — профайлер, замеряющий скорость отображения каждой страницы
New Relic Ruby Agent 6.13.0 — агент New Relic для мониторинга производительности.
Faker 2.14.0 — порт Perl-библиотеки Data::Faker для генерации фейковых данных
Ruby_parser 3.15.0 — парсер языка Ruby написанный на чистом Ruby, позволяющий преобразовывать код в изменяемые s-выражения.
Brakeman 4.10.0 — сканер уязвимостей, преимущественно для Ruby on Rails
Active Admin 2.8.0 — фреймворк для создания админки к вебсайту
Regexp::Parser 1.8.0 — библиотеки для токенизации, парсинга и преобразования регулярных выражений
RuboCop Rails 2.8.0 — автоматический контроль соглашений по наилучшему стилю кода в Rails-приложениях
Groonga-command 1.5.0 — библиотека команд для системы поиска Groonga
Kiba 3.5.0 — легковесная ETL для Ruby
Arbre 1.3.0 — DSL для описания HTML
iCalendar 2.7.0 — библиотека для работы с календарем в формате iCalendar
Gon 6.4.0 — получение Rails-переменных в Js-коде
Ancestry 3.2.0 — организация записей в ActiveRecord в древовидной структуре
hamlit 2.13.0 — высокопроизводительная реализация Haml
Scientist 1.5.0 — библиотека для осторожного рефакторинга критических участков кода
Grape-swagger 1.3.0 — автогенерация документации для API на Grape
Invisible Captcha 1.1.0 — библиотека для защиты приложения от спам-ботов
Down 5.2.0 — инструмент для гибкого, потокового и безопасного скачивания удаленных файлов
Racecar 2.1.0 — дружественный фреймворк для Kafka-обработчиков
Travis 1.10.0 — консольный клиент и библиотека для Travis CI
March_hare 4.3.0-java — RabbitMQ-клиент для JRuby созданный на основе официального клиента для Java
Unicode::Emoji 2.6.0 — библиотека для сопоставление юникод-текста с эмодзи
karafka 1.4.0 — фреймворк для работы с Kafka
Lita 4.8.0 — чат-бот с плагинами для различных чат-сервисов
Closure Tree 7.2.0 — простая и эффективная реализация иерархии в ActiveRecord-моделях
pusher-fake 2.2.0 — имитация Pusher-сервера для разработки и тестирования
Leaflet-rails 1.7.0 — привязка фронтенд библиотеки географических карт leaflet.js к Rails
Rails Multisite 2.5.0 — обеспечение нескольких баз данных для Rails-приложений
Ibandit 1.2.0 — библиотека для проверки и действий с IBAN
Blind Index 2.2.0 — безопасный поиск в зашифрованных полях базы данных
Validators 3.4.0 — дополнение некоторых полезных ActiveModel/ActiveRecord валидаторов
Signalfx 3.1.0 — клиент для сервиса мониторинга SignalFx
Полезные материалы
Структура типизации в Ruby 3
Магия Pry для отладки кода Ruby
Компания Evrone провела марафон кейсов, часть из которых посвящена Ruby или связана с ним.
Ключевые идеи из интервью с создателем Ruby on Rails (а также полный текст
интервью с Дэвидом Ханссоном на русском).
Медиа-портал на Ruby-движке
Vexor — что нужно знать, если создаёте продукт для разработчиков?
Связываем обычные и криптовалюты с Cryptopay
Оцифровываем консультанта с планшетом
Work&Play — превращаем мотивацию персонала в игру
Quiv — конвертируем знания в помощь благотворительным фондам
Айдентика конференции RubyRussia
Программирование только классами
Пришло время запускать Ruby в Web через WebAssembly?
Почему и как транспилировать Ruby?
Ускорение работы Rack и Rails с TruffleRuby
Разработка Dreamcast-приложений и игр на mruby
Повышение производительности с Ruby 3.0 JIT
dry-system — для чего? от ручного перечисления зависимостей к полномасштабной архитектуре
Разработка через тестирование, мой упрощенный подход
Разделяем монолит
Ruby 3 обещает параллельное выполнение
Ruby 3.0.0 – это планируемое обновление динамического языка с открытым исходным кодом, которое уже доступно в качестве предварительной версии. Основные особенности новой версии включают возможности параллельного выполнения и описания типов.
Ractor
Параллельное выполнение осуществляется в форме экспериментальной функции, получившей название «Ractor», которая представляет собой абстракцию параллелизма, подобную модели Actor, предназначенную для обеспечения параллельного выполнения без проблем безопасности потоков. Разработчики могут создавать несколько «ракторов» и запускать их параллельно. Эти параллельные программы можно сделать потокобезопасными, поскольку «ракторы» не могут совместно использовать обычные объекты. Связь между «ракторами» поддерживается посредством передачи сообщений.
Чтобы ограничить совместное использование объектов, Ractor вводит несколько ограничений в синтаксис Ruby.
Спецификация и внедрение не дорабатываются и не изменяются в будущем, поэтому эта функция помечена как экспериментальная.
пример использования Ractor
Ruby 3.0.0 также представляет RBS, заявленный как язык для описания типов программ Ruby. Он позволяет анализировать и обрабатывать определения типов. Средства проверки типов, включая профилировщики типов и другие инструменты, поддерживающие RBS, будут лучше понимать программы Ruby.
RBS предназначен для поддержки часто встречающихся шаблонов в программах Ruby. Поддерживаются расширенные типы, включая типы объединения, перегрузка методов и универсальные типы. Программисты смогут использовать определение классов и модулей: методы, определенные в классе, переменные экземпляра и их типы, а также отношения наследования/смешивания.
Планировщик
В 3 версии языка также добавлен планировщик, который находится на экспериментальной стадии, для перехвата блокирующих операций. Обозначаемая как Thread#scheduler, возможность обеспечивает легкий параллелизм без изменения существующего кода.
Поддерживаемые в настоящее время классы / методы:
Текущая точка входа для параллелизма, Fiber.schedule<. >, однако, может измениться к моменту выпуска Ruby 3.
Другие примечательные функции
Предварительная версия Ruby 3.0.0 была представлена 25 сентября и доступна для скачивания с официального сайта. Во второй предварительный просмотр разработчики Ruby планируют включить профилировщик типов, который служит функцией статического анализа. Текущие стабильные выпуски Ruby – это версии 2.7.1 и 2.6.6.
Напомним, что по данным опроса Stack Overflow среди программистов, Ruby вошел в десятку «самых высокооплачиваемых» языков в этом году.
Структура типизации в Ruby 3
Sep 11, 2020 · 6 min read
Об авторе: Соутаро является ведущим разработчиком Ruby в Square, работающим над Steep и статической типизацией; вместе с Матцем и другими разработчиками ядра он работает над спецификацией RBS, которая будет поставляться с Ruby 3.
Мы с радостью анонсируем новый язык сигнатуры типов для Ruby 3 — RBS. Одной из давно заявленных целей Ruby 3 было добавление инструментов проверки типов. После продолжительных обсуждений с Матцем и командой разработчиков Ruby мы решили предпринять инкрементный шаг, добавив в Ruby 3 язык сигнатуры типов RBS, который будет поставляться вместе с сигнатурами для stdlib. Инструменты командной строки RBS также будут поставляться вместе с Ruby 3, так что вы сможете генерировать сигнатуры для собственного кода Ruby.
Справочная информация
Статическая или динамиче с кая типизация — эта дихотомия является давней проблемой языков программирования. Языки со статической типизацией лучше подходят для больших проектов, при этом зачастую они менее гибкие. Языки с динамической типизацией обеспечивают быструю разработку, но масштабировать команды и базы кода с ними может быть затруднительно.
Ещё четыре года назад Матц объявил, что Ruby 3 будет поддерживать статическую проверку типов. После просмотра нескольких средств проверки типов, разработанных сообществом, команда разработчиков Ruby решила заложить основу для последующего развития сообществом. Ruby 3 будет поставляться со способностью писать сигнатуры типов для программ на Ruby, а также со встроенными сигнатурами типов для стандартных библиотек Ruby. Язык сигнатуры стандартного типа сделает определение типов в коде Ruby переносимым между средствами проверки типов и вдохновит сообщество на написание типов для собственных гемов и приложений.
Мы назвали язык и библиотеку RBS.
Как выглядит RBS?
Сигнатуры типов для классов Ruby в RBS будут выглядеть так.
RBS — это язык для описания структуры программ Ruby. Он даёт разработчикам обзор кода и представление о том, какие классы и объекты в нём определены. Самым большим преимуществом является то, что определение типа может быть проверено на соответствие как на стадии разработки, так и в режиме выполнения!
Ключевые фичи RBS
Разработка системы типирования для такого языка с динамической типизацией, как Ruby, отличается от ординальных языков со статической типизацией. В мире уже существует огромное количество кода на Ruby, и система типов должна поддерживать как можно больший объём этого кода.
Это заставляет разработчиков системы типирования идти на компромиссы в отношении сложности и корректности для совместимости с существующим кодом. Возможно, нам придётся вводить функцию проверки типов для поддержки шаблона в существующем коде Ruby, который в противном случае может быть ошибочным. Однако добавление функции делает систему типов громоздкой и сложной для понимания. Поэтому мы сосредоточились на наиболее важных шаблонах кода, чтобы минимизировать её сложность.
Продемонстрируем две важные характеристики кода Ruby и возможности присвоения типа для них.
Утиная типизация
Утиная типизация — популярный в среде рубистов стиль программирования, который предполагает, что объект будет реагировать на определённый набор методов. Преимущество утиной типизации в её гибкости. Она не требует наследования, миксинов или объявлений реализации. Если у объекта есть конкретный метод, он работает. Проблема в том, что это предположение скрыто в коде, что делает его визуально сложнее.
Чтобы учесть утиную типизацию, мы ввели типы интерфейса, которые представляют собой наборы методов, независимых от конкретных классов и модулей.
Если мы хотим определить метод, требующий конкретный набор методов, мы можем написать его с помощью типов интерфейса.
Этот код лучше традиционной утиной типизации, поскольку определяет ожидаемую реализацию явного интерфейса класса или модуля и предоставляет подсказки для документации и расширений для редактора кода. Таким образом, ранее неявный интерфейс представлен в качестве надёжной практичной документации.
Неоднородность
Неоднородность — ещё один шаблон, позволяющий выражению иметь различные типы значений. Он популярен в Ruby и применяется:
Чтобы приспособиться к этому, RBS допускает типы объединения и перегрузку методов.
Типы объединения и перегрузка методов часто встречаются в коде Ruby и стандартных библиотеках.
Программирование на Ruby с использованием типов
Мы предоставляем язык для написания типов. Так что же мы можем делать с файлами RBS?
Ниже список основных преимуществ наличия типов. Мы можем писать типы в файлах RBS, чьи инструменты помогают с:
Разумеется ничто не бывает просто так. Как мы создаём инструменты для RBS, чтобы облегчить разработчикам работу с ним?
Мы разработали средства статической проверки типов поверх RBS. Steep — это средство статической проверки типов, реализованное в Ruby и основанное на RBS. Sorbet — это средство статической проверки типов, имеющее собственный язык определения типов, RBI, но в будущем планируется поддержка RBS.
Кроме того, мы разрабатываем и работаем над дополнительными инструментами для расширения набора RBS. Средство проверки типов выполнения RBS — это один из проектов Ruby Google Summer of Code, использующий сигнатуры типов RBS для реализации проверки типов выполнения. type-profiler — это исследовательский проект для создания файлов RBS из исходного кода Ruby на основе метода анализа программ, называемого Abstract Interpretation. Также существует проект поддержки для Rails.
Sorbet и RBS
Sorbet — это наиболее широко используемое на сегодняшний день средство статической проверки типов для Ruby. RBS не пытается вытеснить Sorbet и его формат сигнатуры типа RBI. Матц и команда разработчиков Ruby тесно сотрудничают с командой Sorbet и высоко ценят их усилия и те улучшения, которые команда Sorbet вносит в разработку.
Цель RBS в том, чтобы предоставить основу для описания информации о типах программ Ruby. Такие средства статической проверки типов, как Sorbet или Steep, могут использовать определение типов, написанное в RBS. Для упрощения взаимодействия гем RBS поставляется с переводчиком с RBI на RBS, а переводчик с RBS на RBI уже разрабатывается.
Заключение
В этом посте я представил вам RBS — новый проект Ruby 3 для работы с типами. Я объяснил, что можно написать, используя RBS, ключевые идеи его дизайна, а также его преимущества и инструменты, поставляющиеся с ним. Вы пишете определения типов для кода Ruby, а наши инструменты анализируют ваш код. Мы знаем, что не все рубисты перейдут на типизированный Ruby, но мы уверены, что его стоит попробовать!
Ruby Digest 2020·08·2
Подборка информации о Ruby с 16 по 31 августа, включая русскоязычные источники: новости, конференции, новинки, медиа, статьи.
На сколько большие зарплаты у Ruby-разработчиков в России и где растет спрос на рубистов?
Юкихиро Мацумото, создатель Ruby, рассказывает о предстоящих нововведениях в Ruby 3.
Что дало обновление GitHub до Ruby 2.7? И каких улучшений ждать от Ruby 3?
Какие Js-библиотеки чаще используются с Ruby on Rails? Кому-нибудь пригодился StimulusJS? Много ли в rails-проектах легаси? Какие базы данных предпочитают rails-разработчики? На сколько обширно используют контейнеризацию? Много ли желающих продолжать использовать Ruby on Rails в 2020 году и готовы ли они рекомендовать его для начинающих разработчиков и для новых проектов? — результаты опроса Rails-сообщества.
Новости
По данным исследования спроса на айтишников в 2020 году сервиса Хабр Карьера спрос на Ruby растет в Санкт-Петербурге и в регионах России, при этом в регионах Ruby является самым высокооплачиваемым языком программирования.
Юкихиро Мацумото в своем коммите установил следующую версию Ruby 3.0.
21 августа состоялась конференция NoRuKo — миниреорганизация в online-формате конференции EuRuKo. Юкихиро Мацумото рассказал о некоторых общих особенностях языков программирования, о планируемой дате выхода Ruby 3 и о предстоящих нововведениях. Среди них: увеличение производительности, статическая типизация (RBS), параллельные вычисления на основе акторов (Ractor) и другие. Конференция проходила в два потока: основной поток и поток сообщества.
12 сентября, уже на этой неделе, в День программиста, пройдёт конференция RubyC 2020 — крупнейшая украинская конференция, посвященная Ruby, Ruby on Rails и сопутствующим технологиям.
Обновление GitHub до Ruby 2.7 дало ощутимое повышение производительности. При этом у Ruby 3 задача еще выше — увеличить производительность в 3 раза в сравнении с версией 2.0. В GitHub сложилось впечатление, что разработчики Ruby уверено идут к этой цели.
Ruby вошел в Топ10 популярных языков программирования по рейтингу IT Shifting, составленному на основе поисковых запросов в Google.
Ruby возглавил Топ backend-языков программирования, составленный на основе данных о 50ти лучших стартапах Y Combinator. А в списке Топ100 компаний, поддержанных Y Combinator, каждые
8 из 10 компаний используют Ruby.
Открыт конкурс заявок на гранты 2020 от Ruby Association. Гранты предназначены для проектов, связанных с реализацией языка Ruby, его библиотеками и фреймворками, включая улучшение уже существующего программного обеспечения. Если у вас есть хорошие идеи — отправляйте предложения.
Опубликованы результаты опроса участников Rails-сообщества из многих стран мира по разнообразным техническим темам. Вот некоторые из них.
Новинки
Полный буткемп по Ruby on Rails 6 — новый обучающий курс, включающий более 14 часов видео, объясняющих основные принципы разработки rails-приложений.
Aws-sdk-appflow — официальный гем для Amazon Appflow, является частью AWS SDK для Ruby.
CodaDocs — библиотека для доступа к Coda Docs API.
Omniauth::Inspur — OAuth2-стратегия для аутентификации в сервисе Inspur.
SimpleCov::Formatter::ERBFormatter — текстовое отображение информации о покрытии кода тестами в результатах CI.
Kitchen::Pester 1.0.0 — выполнение Pester-тестов из Test-Kitchen.
Посмотреть/послушать
RWpod 33 выпуск 08 сезона. В этом выпуске:
Новые методы including, excluding для Array и Enumerable в Rails 6;
Rodauth — обновленное решение для аутентификации;
Отладка утечек памяти.
RWpod 34 выпуск 08 сезона. В этом выпуске:
Юкихиро Мацумото, создатель Ruby, о проблемах обновления языка программирования;
Большой Rubykon Benchmark 2020: CRuby vs JRuby vs TruffleRuby;
Обновление GitHub до Ruby 2.7.
«Давайте строить» для разработчиков Ruby и Rails — Часть 6 Элементы пользовательского интерфейса.
«Давайте строить» для разработчиков Ruby и Rails — Часть 7 Стилизация интерфейса приложения с помощью Tailwind CSS.
Объемная загрузка на Active Storage.
Использование CloudFlare CDN для статики в Ruby on Rails.
Применение сетей доставки данных (CDN) не только для статики, но и для загружаемого контента на Active Storage.
Проектирование и создание гема уведомлений | Превью.
Dry-types и Dry-struct — для чего? (или почему я перестал работать над virtus).
Интервью с Тимом Кэнтли — сохранение организованности Rails-приложений по мере роста.
Интервью с Кеном Коллинсом — Serverless-логика с AWS Lambda и Ruby on Rails
Интервью с Робби Расселом — опрос сообщества Ruby on Rails.
Познавательное
Усиливаем финтех-компанию экспертизой в разработке: «Рево Россия».