1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

8.4 KiB

Ruby 3.0

Пробуем новые возможности языка программирования Ruby 3.0, изучаем, какая подготовка к их появлению была сделана в версии 2.7 и как они влияют на обратную совместимость.

Содержание

Примеры

Поскольку примеры требуют разных версий Ruby, желательно использовать какое-то программное обеспечение для управления версиями Ruby, например Ruby Version Manager. В каждой директории с примером находится файл .ruby-version, поэтому версия Ruby переключается автоматически при переходе в эту директорию в вашей командной оболочке, если Ruby Version Manager установлен правильно.

Обратите внимание, что некоторые примеры состоят из нескольких независимых программ. Если в директории примера нет ничего, кроме других директорий и файла README.md, то нужно переходить в эти поддиректории. Более подробно о каждом примере читайте в файле README.md, который есть в каждой директории и поддиректории.

Если вы просматриваете этот репозиторий на веб-сайте, где файл README.md отображается автоматически для каждой директории, то можете последовательно переключать страницы с помощью кнопок навигации "Вперёд" и "Назад" вверху документа README.md.

Начать
  1. Ruby не следует спецификации семантического версионирования
  2. Разделение позиционных и ключевых аргументов
  3. Ractor
  4. Fiber scheduler
  5. Static analysis
  6. Pattern matching
  7. Destructuring

Официальные публикации

На сайте языка программирования Ruby имеются публикации, описывающие рассматриваемые нами нововведения:

Мотивация

Почему мы решили сделать этот обзор сейчас, в июле 2021 года?

Время выпуска

Предварительный выпуск Ruby 3.0.0 (preview1) состоялся 25 сентября 2020 года. То есть прошло меньше года с тех пор, как у пользователей, которые не следят за процессом разработки языка изнутри, впервые появилась возможность попробовать его новые относительно стабильные возможности без необходимости самостоятельно собирать программное обеспечение из исходных кодов, например путём установки с помощью Ruby Version Manager (rvm install ruby-3.0.0-preview1).

Что касается дистрибутивов популярных операционных систем, то в стабильных версиях большинства из них до сих пор используется Ruby 2.7:

Хотя есть и исключения. На этих дистрибутивах вы уже можете установить Ruby 3.0 с помощью системного менеджера пакетов:

Можно предположить, что ещё далеко не все пользователи перешли на Ruby 3.0 или хотя бы изучили и попробовали сделанные в нём нововведения.

Полезные тенденции

Язык программирования Ruby появился в 1995 году. Долгое время он был весьма прогрессивным, поскольку за счёт динамической типизации давал возможность писать очень высокоуровневый код с функциями высшего порядка, анонимными функциями и замыканиями. Платой за это была более низкая производительность по сравнению со статически типизированными языками и порой меньшая надёжность кода.

В последние десять лет всё изменилось. В C++ 11 и Java 8 появились анонимные функции и замыкания. Появился язык программирования Rust, где помимо этого присутствуют мощная система типов с обобщённым программированием и сопоставление с шаблоном. Создатель Ruby Юкихиро Мацумото так описывает это: "2010-е были эрой статически типизированных языков программирования".

Может показаться, что с появлением Rust в других языках программирования не будет никакой необходимости. Однако пока что Rust ещё довольно молод, и для него нет множества библиотек. Также существует большое количество кода на Ruby, переписывание которого будет стоить очень дорого. Поэтому Ruby неизбежно проживёт ещё долгое время. Чтобы сделать это время максимально приятным для пользователей и менее рискованным для компаний, создатели языка следуют лучшим тенденциями. Так, в рассматриваемых нами версиях Ruby 2.7 и 3.0 появились сопоставление с шаблоном и зачатки статической типизации. Этот подход, а также более совершенный синтаксис дают Ruby преимущество по крайней мере перед своими главными конкурентами: Python и JavaScript.