stringtranslate.com

Ruby (язык программирования)

Rubyинтерпретируемый , высокоуровневый , универсальный язык программирования . Он был разработан с упором на производительность и простоту программирования. В Ruby все является объектом , включая примитивные типы данных . Он был разработан в середине 1990-х годов Юкихиро «Мац» Мацумото в Японии .

Ruby динамически типизирован и использует сборку мусора и компиляцию just-in-time . Он поддерживает несколько парадигм программирования, включая процедурное , объектно-ориентированное и функциональное программирование . По словам создателя, Ruby находился под влиянием Perl , Smalltalk , Eiffel , Ada , BASIC , Java и Lisp . [10] [3]

История

Ранняя концепция

Мацумото сказал, что Ruby был задуман в 1993 году. В сообщении 1999 года в списке рассылки ruby-talk он описывает некоторые из своих ранних идей относительно языка:

Я разговаривал с коллегой о возможности объектно-ориентированного языка сценариев. Я знал Perl (Perl4, не Perl5), но он мне не очень нравился, потому что от него веяло игрушечным языком (и до сих пор так). Объектно-ориентированный язык казался очень многообещающим. Тогда я знал Python . Но он мне не нравился, потому что я не считал его настоящим объектно-ориентированным языком — OO-функции казались дополнением к языку. Будучи языковым маньяком и поклонником OO на протяжении 15 лет, я действительно хотел настоящий объектно-ориентированный, простой в использовании язык сценариев. Я искал, но не мог найти. Поэтому я решил создать его.

Мацумото описывает дизайн Ruby как нечто похожее на простой язык Lisp по своей сути, с объектной системой, как в Smalltalk, блоками, вдохновленными функциями высшего порядка , и практической полезностью, как в Perl. [11]

Название «Ruby» возникло во время сеанса онлайн-чата между Мацумото и Кейдзю Ишицукой 24 февраля 1993 года, до того, как был написан какой-либо код для языка. [12] Первоначально было предложено два названия: « Coral » и « Ruby ». Мацумото выбрал последнее в более позднем электронном письме Ишицуке. [13] Позже Мацумото отметил фактор выбора названия «Ruby» — это был камень, по которому родился один из его коллег. [14] [15]

Ранние релизы

Первый публичный релиз Ruby 0.95 был анонсирован в японских внутренних новостных группах 21 декабря 1995 года. [16] [17] Впоследствии в течение двух дней были выпущены еще три версии Ruby. [12] Выпуск совпал с запуском японоязычного списка рассылки ruby-list , который стал первым списком рассылки для нового языка.

На этом этапе разработки уже присутствовали многие функции, знакомые по более поздним версиям Ruby, включая объектно-ориентированное проектирование, классы с наследованием, миксины , итераторы , замыкания , обработку исключений и сборку мусора . [18]

После выпуска Ruby 0.95 в 1995 году в эти годы было выпущено несколько стабильных версий Ruby:

В 1997 году в Интернете была опубликована первая статья о Ruby. В том же году Мацумото был нанят netlab.jp для работы над Ruby в качестве штатного разработчика. [12]

В 1998 году Мацумото запустил Ruby Application Archive, а также простую англоязычную домашнюю страницу для Ruby. [12]

В 1999 году был запущен первый список рассылки Ruby-talk на английском языке , что сигнализировало о растущем интересе к языку за пределами Японии. [19] В том же году Мацумото и Кейдзю Исицука написали первую книгу о Ruby, «Объектно-ориентированный язык сценариев Ruby» (オブジェクト指向スクリプト言語 Ruby), которая была опубликована в Японии в октябре 1999 года. 2000-е примерно 20 книг по Ruby, опубликованных на японском языке. [12]

К 2000 году Ruby стал более популярен в Японии, чем Python. [20] В сентябре 2000 года была напечатана первая англоязычная книга Programming Ruby , которая позже была бесплатно выпущена для публики, что еще больше расширило принятие Ruby среди англоговорящих. В начале 2002 года англоязычный список рассылки ruby-talk получал больше сообщений, чем японоязычный ruby-list , что демонстрирует растущую популярность Ruby в неяпоноязычном мире.

Рубин 1.8 и 1.9

Ruby 1.8 был первоначально выпущен в августе 2003 года, был стабилен в течение длительного времени и был прекращен в июне 2013 года. [21] Несмотря на то, что он устарел, на его основе все еще существует код. Ruby 1.8 лишь частично совместим с Ruby 1.9.

Ruby 1.8 стал предметом нескольких отраслевых стандартов. Спецификации языка для Ruby были разработаны Центром продвижения открытых стандартов Агентства по продвижению информационных технологий ( японское правительственное агентство) для представления в Японский комитет по промышленным стандартам (JISC), а затем в Международную организацию по стандартизации (ISO). Он был принят в качестве Японского промышленного стандарта (JIS X 3017) в 2011 году [22] и международного стандарта (ISO/IEC 30170) в 2012 году. [23] [24]

Логотип Ruby on Rails

Около 2005 года интерес к языку Ruby резко возрос вместе с Ruby on Railsвеб-фреймворком , написанным на Ruby. Rails часто приписывают росту узнаваемости Ruby. [25]

Начиная с Ruby 1.9.3, выпущенного 31 октября 2011 г., [26] Ruby перешел с двойной лицензии под лицензией Ruby License и GPL на двойную лицензию под лицензией Ruby License и двухпунктовой лицензией BSD. [27] Принятие 1.9 было замедлено изменениями из 1.8, которые потребовали переписать многие популярные сторонние gem-файлы. Ruby 1.9 вносит много существенных изменений по сравнению с серией 1.8. Вот некоторые примеры: [28]

Рубин 2

Ruby 2.0 был предназначен для полной обратной совместимости с Ruby 1.9.3. На момент официального выпуска 2.0.0 24 февраля 2013 года было известно только о пяти (незначительных) несовместимостях. [29] Ruby 2.0 добавил несколько новых функций, в том числе:

Начиная с версии 2.1.0 политика управления версиями Ruby изменилась и стала больше похожа на семантическую политику управления версиями . [31]

Ruby 2.2.0 включает ускорения, исправления ошибок и обновления библиотек, а также удаляет некоторые устаревшие API. В частности, Ruby 2.2.0 вносит изменения в обработку памяти — инкрементальный сборщик мусора, поддержку сбора мусора символов и возможность компиляции напрямую с jemalloc. Он также содержит экспериментальную поддержку использования vfork (2) с system() и spawn() и добавленную поддержку спецификации Unicode 7.0. Начиная с версии 2.2.1, [32] производительность Ruby MRI на PowerPC64 была улучшена. [33] [34] [35] Функции, которые были сделаны устаревшими или удалены, включают callcc, библиотеку DL, Digest::HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger::Application, а также различные функции C API. [36]

Ruby 2.3.0 включает в себя множество улучшений производительности, обновлений и исправлений ошибок, включая изменения в Proc#call, использовании ключевых слов исключений Socket и IO, обработке Thread#name, пассивных соединениях Net::FTP по умолчанию и удалении Rake из stdlib. [37] Другие заметные изменения включают в себя:

Ruby 2.4.0 включает улучшения производительности хэш-таблицы, Array#max, Array#min и доступа к переменным экземпляра. [39] Другие заметные изменения включают:

Несколько заметных изменений в Ruby 2.5.0 включают в себя операторы rescue и ensure , которые автоматически используют окружающий блок do-end (меньше необходимости в дополнительных блоках begin-end ), цепочку методов с помощью yield_self , поддержку покрытия ветвей и измерения покрытия методов, а также более простые преобразования хеша с помощью Hash#slice и Hash#transform_keys. Вдобавок ко всему этому появилось множество улучшений производительности, таких как более быстрая передача блоков (в 3 раза быстрее), более быстрые мьютексы, более быстрые шаблоны ERB и улучшения некоторых методов конкатенации.

Несколько заметных изменений в Ruby 2.6.0 включают экспериментальный JIT- компилятор и RubyVM::AbstractSyntaxTree (экспериментальный).

Несколько заметных изменений в Ruby 2.7.0 включают сопоставление с образцом (экспериментальное), улучшения REPL, компактный GC и разделение позиционных и ключевых аргументов.

Рубин 3

Ruby 3.0.0 был выпущен в Рождество 2020 года. [40] Он известен как Ruby 3x3, что означает, что программы будут работать в три раза быстрее в Ruby 3.0 по сравнению с Ruby 2.0. [41] и некоторые из них уже были реализованы в промежуточных выпусках на пути от 2 к 3. Для достижения 3x3 Ruby 3 поставляется с MJIT, а позже и YJIT, компиляторами Just-In-Time, чтобы сделать программы быстрее, хотя они описаны как экспериментальные и остаются отключенными по умолчанию (включаются флагами во время выполнения).

Еще одной целью Ruby 3.0 является улучшение параллелизма , и еще две утилиты Fibre Scheduler и экспериментальная Ractor способствуют достижению этой цели. [40] Ractor является легким и потокобезопасным, поскольку это достигается путем обмена сообщениями, а не общими объектами.

Ruby 3.0 вводит язык RBS для описания типов программ Ruby для статического анализа . [40] Он отделен от общих программ Ruby.

В Ruby 3.0 также есть некоторые улучшения синтаксиса и изменения библиотеки. [40]

Ruby 3.1 был выпущен 25 декабря 2021 года. [42] Он включает YJIT, новый экспериментальный компилятор Just-In-Time, разработанный Shopify , для повышения производительности реальных бизнес-приложений. Также включен новый отладчик . В этом выпуске есть некоторые улучшения синтаксиса и другие улучшения. Сетевые библиотеки для FTP , SMTP , IMAP и POP перемещены из стандартных гемов в связанные гемовы. [43]

Ruby 3.2 был выпущен 25 декабря 2022 года. [44] Он обеспечивает поддержку запуска внутри среды WebAssembly через интерфейс WASI. Регулярные выражения также получают некоторые улучшения, включая более быстрый, мемоизированный алгоритм сопоставления для защиты от определенных атак ReDoS и настраиваемые тайм-ауты для сопоставления регулярных выражений. Дополнительные функции отладки и синтаксиса также включены в этот выпуск, которые включают предложение синтаксиса, а также подсветку ошибок. Компилятор MJIT был повторно реализован как стандартный библиотечный модуль, в то время как YJIT, JIT- компилятор на основе Rust , теперь поддерживает больше архитектур в Linux.

Ruby 3.3 был выпущен 25 декабря 2023 года. [1] Ruby 3.3 вносит значительные улучшения и улучшения производительности в язык. Ключевые особенности включают введение парсера Prism для переносимого и поддерживаемого парсинга, добавление чистого Ruby JIT-компилятора RJIT и значительное повышение производительности в компиляторе YJIT. Кроме того, улучшения в использовании памяти, введение планировщика потоков M:N и обновления стандартной библиотеки способствуют более эффективной и дружественной к разработчикам экосистеме Ruby.

Семантика и философия

Юкихиро Мацумото , создатель Ruby

Мацумото сказал, что Ruby разработан для продуктивности и удовольствия программиста, следуя принципам хорошего дизайна пользовательского интерфейса . [45] На Google Tech Talk в 2008 году он сказал: «Я надеюсь увидеть, как Ruby поможет каждому программисту в мире быть продуктивным, получать удовольствие от программирования и быть счастливым. Это основная цель языка Ruby». [46] Он подчеркивает, что проектирование систем должно подчеркивать потребности человека, а не компьютера: [47]

Часто люди, особенно компьютерные инженеры, фокусируются на машинах. Они думают: «Сделав это, машина будет работать быстрее. Сделав это, машина будет работать эффективнее. Сделав это, машина будет что-то делать что-то делать». Они фокусируются на машинах. Но на самом деле нам нужно сосредоточиться на людях, на том, как люди заботятся о программировании или эксплуатации приложений машин. Мы хозяева. Они рабы.

Мацумото сказал, что его главная цель дизайна — создать язык, который он сам любил бы использовать, минимизируя работу программиста и возможную путаницу. Он сказал, что не применял принцип наименьшего удивления (POLA) к дизайну Ruby; [47] в обсуждении в мае 2005 года в группе новостей comp.lang.ruby Мацумото попытался дистанцировать Ruby от POLA, объяснив, что поскольку любой выбор дизайна будет для кого-то неожиданным, он использует личный стандарт при оценке неожиданности. Если этот личный стандарт останется неизменным, то для тех, кто знаком со стандартом, сюрпризов будет мало. [48]

Мацумото так определил это в интервью: [47]

У каждого свой бэкграунд. Кто-то может прийти с Python, кто-то может прийти с Perl, и они могут быть удивлены разными аспектами языка. Затем они подходят ко мне и говорят: «Я был удивлен этой особенностью языка, поэтому Ruby нарушает принцип наименьшего удивления». Подождите. Подождите. Принцип наименьшего удивления не только для вас. Принцип наименьшего удивления означает принцип наименьшего моего удивления. И это означает принцип наименьшего удивления после того, как вы очень хорошо изучите Ruby. Например, я был программистом на C++, прежде чем начал разрабатывать Ruby. Я программировал исключительно на C++ в течение двух или трех лет. И после двух лет программирования на C++ он все еще удивляет меня.

Ruby является объектно-ориентированным : каждое значение является объектом, включая классы и экземпляры типов, которые во многих других языках определяются как примитивы (например, целые числа , логические значения и « null »). Поскольку все в Ruby является объектом, все в Ruby имеет определенные встроенные возможности, называемые методами. Каждая функция является методом , а методы всегда вызываются для объекта. Методы, определенные в области верхнего уровня, становятся методами класса Object. Поскольку этот класс является предком любого другого класса, такие методы могут быть вызваны для любого объекта. Они также видны во всех областях, эффективно выступая в качестве «глобальных» процедур. Ruby поддерживает наследование с динамической диспетчеризацией , миксинами и одноэлементными методами (принадлежащими и определенными для одного экземпляра , а не определенными в классе). Хотя Ruby не поддерживает множественное наследование , классы могут импортировать модули как миксины.

Ruby описывается как язык программирования с несколькими парадигмами : он допускает процедурное программирование (определение функций/переменных вне классов делает их частью корневого, «самого» объекта), с объектной ориентацией (все является объектом) или функциональное программирование (в нем есть анонимные функции , замыкания и продолжения ; все операторы имеют значения, а функции возвращают последнюю оценку). Он поддерживает интроспекцию , рефлексивное программирование , метапрограммирование и потоки на основе интерпретатора . Ruby поддерживает динамическую типизацию и параметрический полиморфизм .

Согласно FAQ по Ruby, синтаксис похож на Perl , а семантика похожа на Smalltalk , но философия дизайна сильно отличается от Python . [49]

Функции

Синтаксис

Синтаксис Ruby в целом похож на синтаксис Perl и Python . Определения классов и методов обозначаются ключевыми словами, тогда как блоки кода могут быть определены как ключевыми словами, так и фигурными скобками. В отличие от Perl, переменные не обязательно имеют префикс sigil . При использовании sigil изменяет семантику области действия переменной. Для практических целей нет различия между выражениями и операторами . [57] [58] Разрывы строк значимы и воспринимаются как конец оператора; точка с запятой может быть эквивалентно использована. В отличие от Python, отступы не имеют значения.

Одно из отличий от Python и Perl заключается в том, что Ruby сохраняет все свои переменные экземпляра полностью закрытыми для класса и раскрывает их только через методы доступа ( attr_writer, attr_reader, и т. д.). В отличие от методов «getter» и «setter» других языков, таких как C++ или Java , методы доступа в Ruby можно создать одной строкой кода с помощью метапрограммирования ; однако методы доступа также можно создать традиционным способом C++ и Java. Поскольку вызов этих методов не требует использования скобок, легко изменить переменную экземпляра на полноценную функцию, не изменяя ни одной строки вызывающего кода или не выполняя никакого рефакторинга, достигая функциональности, аналогичной членам свойств C# и VB.NET .

Дескрипторы свойств Python похожи, но в процессе разработки приходится идти на компромисс. Если начать в Python с использования публично открытой переменной экземпляра, а затем изменить реализацию, чтобы использовать закрытую переменную экземпляра, открытую через дескриптор свойства, может потребоваться скорректировать внутренний код класса для использования закрытой переменной, а не открытого свойства. Дизайн Ruby заставляет все переменные экземпляра быть закрытыми, но также предоставляет простой способ объявления методов setи getметодов. Это соответствует идее, что в Ruby никто никогда не обращается напрямую к внутренним членам класса извне класса; вместо этого он передает сообщение классу и получает ответ.

Реализации

Интерпретатор Ruby от Matz

Оригинальный интерпретатор Ruby часто называют Matz's Ruby Interpreter или MRI. Эта реализация написана на языке C и использует собственную виртуальную машину , специфичную для Ruby .

Стандартизированная и устаревшая реализация Ruby 1.8 была написана на языке C как однопроходный интерпретируемый язык . [21]

Начиная с Ruby 1.9 и далее с Ruby 2.x и выше официальным интерпретатором Ruby является YARV («Yet Another Ruby VM»), и эта реализация заменила более медленную виртуальную машину, использовавшуюся в предыдущих версиях MRI.

Альтернативные реализации

По состоянию на 2018 год существует ряд альтернативных реализаций Ruby, включая JRuby , Rubinius и mruby . Каждая из них использует свой подход, при этом JRuby и Rubinius обеспечивают компиляцию just-in-time , а mruby также обеспечивает компиляцию ahead-of-time .

У Ruby есть три основных альтернативных реализации:

Другие реализации Ruby включают в себя:

Другие ныне несуществующие реализации Ruby:

Зрелость реализаций Ruby обычно измеряется их способностью запускать фреймворк Ruby on Rails (Rails), поскольку он сложен в реализации и использует множество специфичных для Ruby функций. Точка, когда конкретная реализация достигает этой цели, называется «сингулярностью Rails». Эталонная реализация, JRuby и Rubinius [60] способны запускать Rails без изменений в производственной среде.

Поддержка платформы

Первоначально Мацумото разрабатывал Ruby на базе Sony NEWS-OS 3.x 4.3BSD , но позже перенес свою работу на SunOS 4.x и, наконец, на Linux . [61] [62] К 1999 году Ruby, как известно, работал во многих различных операционных системах . Современные версии и реализации Ruby доступны во всех основных настольных, мобильных и серверных операционных системах. Ruby также поддерживается рядом облачных хостинговых платформ, таких как Jelastic , Heroku , Google Cloud Platform и другие.

Такие инструменты, как RVM и RBEnv, облегчают установку и разбиение на разделы нескольких версий Ruby и нескольких «gemsets» на одной машине.

Репозитории и библиотеки

RubyGems — это менеджер пакетов Ruby. Пакет Ruby называется «gem» и может быть установлен через командную строку. Большинство gem-пакетов — это библиотеки, хотя есть и несколько, которые являются приложениями, например, IDE . [63] На RubyGems.org размещено более 100 000 gem-пакетов Ruby. [64]

Многие новые и существующие библиотеки Ruby размещены на GitHub — сервисе, который предлагает хостинг репозитория с контролем версий для Git .

Архив приложений Ruby, в котором размещались приложения, документация и библиотеки для программирования на Ruby, поддерживался до 2013 года, когда его функции были переданы RubyGems. [65]

Смотрите также

Ссылки

  1. ^ ab "Ruby 3.3.0 Released". Архивировано из оригинала 2023-12-25 . Получено 2023-12-25 .
  2. ^ abc Купер, Питер (2009). Beginning Ruby: From Novice to Professional . Beginning from Novice to Professional (2nd ed.). Беркли: APress. стр. 101. ISBN 978-1-4302-2363-4. В меньшей степени на Ruby также оказали влияние Python, LISP, Eiffel, Ada и C++.
  3. ^ ab "Причины Ruby". Ruby Conference 2008. Confreaks (YouTube). 15 апреля 2013 г.
  4. ^ abcdef Бини, Ола (2007). Практические проекты JRuby on Rails Web 2.0: внедрение Ruby on Rails в Java. Беркли: APress. стр. 3. ISBN 978-1-59059-881-8. Он в основном использует возможности Perl, Smalltalk, Python, Lisp, Dylan и CLU.
  5. ^ "Julia 1.0 Documentation: Introduction". Архивировано из оригинала 16 августа 2018 года . Получено 6 октября 2018 года .
  6. ^ Burks, Tim. "About Nu™". Programming Nu™ . Neon Design Technology, Inc. Архивировано из оригинала 2018-12-25 . Получено 2011-07-21 .
  7. ^ Ring Team (3 декабря 2017 г.). «Ring и другие языки». ring-lang.net . ring-lang. Архивировано из оригинала 25 декабря 2018 г. Получено 3 декабря 2017 г.
  8. ^ "Влияния - The Rust Reference". The Rust Reference . Архивировано из оригинала 2019-01-26 . Получено 2023-04-18 .
  9. ^ Латтнер, Крис (2014-06-03). "Домашняя страница Криса Латтнера". Крис Латтнер. Архивировано из оригинала 2018-12-25 . Получено 2014-06-03 . Язык Swift является продуктом неустанных усилий команды экспертов по языку, гуру документации, ниндзя оптимизации компиляторов и невероятно важной внутренней группы догфуда, которая предоставила обратную связь, чтобы помочь доработать и проверить идеи в бою. Конечно, он также значительно выиграл от опыта, полученного с трудом многими другими языками в этой области, черпая идеи из Objective-C, Rust, Haskell, Ruby, Python, C#, CLU и слишком многих других, чтобы перечислить.
  10. ^ "About Ruby". Архивировано из оригинала 9 октября 2014 года . Получено 15 февраля 2020 года .
  11. ^ Мацумото, Юкихиро (13 февраля 2006 г.). "Re: Ruby's lisp features". Архивировано из оригинала 2018-10-27 . Получено 15 февраля 2020 г.
  12. ^ abcdef "История Руби". Архивировано из оригинала 2011-07-14 . Получено 2008-08-14 .
  13. ^ "[FYI: historic] Решающий момент в названии языка Ruby. (Re: [ANN] ruby ​​1.8.1)" (Электронное письмо от Хироши Сугихары в ruby-talk). Архивировано из оригинала 2011-07-17 . Получено 2008-08-14 .
  14. ^ "1.3 Почему название „Ruby“?". FAQ по языку Ruby . Ruby-Doc.org. Архивировано из оригинала 28 мая 2012 г. Получено 10 апреля 2012 г.
  15. Юкихиро Мацумото (11 июня 1999 г.). «Re: the name of Ruby?». Ruby-Talk (список рассылки). Архивировано из оригинала 25 декабря 2018 г. Получено 10 апреля 2012 г.
  16. ^ "Больше археолингвистики: раскопки прото-Руби". Архивировано из оригинала 6 ноября 2015 г. Получено 2 мая 2015 г.
  17. ^ "[ruby-talk:00382] Re: история рубина". Архивировано из оригинала 16 июля 2011 г. Получено 2 мая 2015 г.
  18. ^ "[ruby-list:124] TUTORIAL — ruby's features". Архивировано из оригинала 24 мая 2003 г. Получено 2 мая 2015 г.
  19. ^ "Интервью с создателем Ruby". Архивировано из оригинала 2008-02-08 . Получено 2007-07-11 .
  20. ^ Юкихиро Мацумото (октябрь 2000 г.). «Программирование Ruby: вперед». Архивировано из оригинала 25 декабря 2018 г. Получено 5 марта 2014 г.
  21. ^ ab "Мы прекращаем поддержку Ruby 1.8.7". Архивировано из оригинала 6 июня 2015 г. Получено 2 мая 2015 г.
  22. ^ "IPA 独立行政法人 情報処理推進機構:プレス発表 プログラム言語RubyのJIS規格(JIS X 3017)制定について». Архивировано из оригинала 2 февраля 2015 года . Проверено 2 мая 2015 г.
  23. ^ "IPA 独立行政法人 情報処理推進機構:プレス発表プログラム言語Ruby、国際規格として承認». Архивировано из оригинала 1 февраля 2015 года . Проверено 2 мая 2015 г.
  24. ^ "ISO/IEC 30170:2012". Архивировано из оригинала 2017-03-12 . Получено 2017-03-10 .
  25. ^ Веб-разработка: Ruby on Rails Архивировано 24.02.2009 на Wayback Machine . Devarticles.com (22.03.2007). Получено 17.07.2013.
  26. ^ "Ruby 1.9.3 p0 is released". ruby-lang.org. 31 октября 2011 г. Архивировано из оригинала 14 января 2013 г. Получено 20 февраля 2013 г.
  27. ^ "v1_9_3_0/NEWS". Репозиторий исходного кода Ruby Subversion . ruby-lang.org. 17 сентября 2011 г. Архивировано из оригинала 6 ноября 2015 г. Получено 20 февраля 2013 г.
  28. ^ Ruby 1.9: Чего ожидать Архивировано 04.03.2016 на Wayback Machine . slideshow.rubyforge.org. Получено 17.07.2013.
  29. ^ Эндо, Юсуке. (24.02.2013) Выпущен Ruby 2.0.0-p0. Архивировано 27.02.2013 на Wayback Machine . Ruby-lang.org. Получено 17.07.2013.
  30. ^ Эндо, Юсуке. (24.02.2013) Выпущен Ruby 2.0.0-p0. Архивировано 17.01.2016 на Wayback Machine . Ruby-lang.org. Получено 17.07.2013.
  31. ^ "Semantic Versioning starting with Ruby 2.1.0". 21 декабря 2013 г. Архивировано из оригинала 13 февраля 2014 г. Получено 27 декабря 2013 г.
  32. ^ Густаво Фредерико Темпл Педроса, Витор де Лима, Леонардо Бьянкони (2015). "Ruby 2.2.1 Released". Архивировано из оригинала 16 мая 2016 года . Получено 12 июля 2016 года .{{cite web}}: CS1 maint: несколько имен: список авторов ( ссылка )
  33. ^ Густаво Фредерико Темпл Педроса, Витор де Лима, Леонардо Бьянкони (2015). «Журнал изменений v2.2.1». Архивировано из оригинала 26 февраля 2017 года . Проверено 12 июля 2016 г.{{cite web}}: CS1 maint: несколько имен: список авторов ( ссылка )
  34. ^ Густаво Фредерико Темпл Педроса, Витор де Лима, Леонардо Бьянкони (2014). «Определение неизменяемых регистров для повышения производительности в ppc64». Архивировано из оригинала 17 сентября 2016 г. Получено 12 июля 2016 г.{{cite web}}: CS1 maint: несколько имен: список авторов ( ссылка )
  35. ^ Густаво Фредерико Темпл Педроса, Витор де Лима, Леонардо Бьянкони (2014). «Указание MACRO для увеличения производительности в ppc64». Архивировано из оригинала 17 сентября 2016 года . Получено 12 июля 2016 года .{{cite web}}: CS1 maint: несколько имен: список авторов ( ссылка )
  36. ^ "ruby/NEWS в v2_2_0 · ruby/ruby · GitHub". GitHub . Архивировано из оригинала 1 января 2015 . Получено 2 мая 2015 .
  37. ^ "Ruby/NEWS в v.2_3_0 - ruby/ruby". GitHub . Архивировано из оригинала 1 марта 2017 г. Получено 25 декабря 2015 г.
  38. ^ "Изменения и функции Ruby 2.3.0". Работает с Ruby . dev.mensfeld.pl. 14 ноября 2015 г. Архивировано из оригинала 5 января 2016 г. Получено 27 декабря 2015 г.
  39. ^ "Ruby 2.4.0 Released". www.ruby-lang.org . Архивировано из оригинала 2017-02-17 . Получено 2016-12-30 .
  40. ^ abcd "Ruby 3.0.0 Released". Язык программирования Ruby . 2020-12-25. Архивировано из оригинала 2020-12-25 . Получено 2020-12-25 .
  41. ^ Шеффлер, Джонатан (10 ноября 2016 г.). «Ruby 3x3: Matz, Koichi и Tenderlove о будущем Ruby Performance». Ruby . Архивировано из оригинала 10 мая 2019 г. . Получено 18 мая 2019 г. .
  42. ^ "Ruby 3.1.0 Released". ruby-lang.org . Архивировано из оригинала 25 декабря 2021 г. . Получено 25 декабря 2021 г. .
  43. ^ "Ruby 3.1.0 Released". Архивировано из оригинала 2021-12-26 . Получено 2021-12-26 .
  44. ^ "Ruby 3.2.0 Released". Архивировано из оригинала 2022-12-25 . Получено 2022-12-25 .
  45. ^ "Язык программирования Ruby". Архивировано из оригинала 18 января 2020 года . Получено 2 мая 2015 года .
  46. ^ Google Tech Talks – Ruby 1.9 на YouTube
  47. ^ abc Билл Веннерс. «Философия Руби». Архивировано из оригинала 5 июля 2019 года . Получено 2 мая 2015 года .
  48. ^ «Добро пожаловать на RUBYWEEKLYNEWS.ORG». 4 июля 2017 г. Архивировано из оригинала 4 июля 2017 г.{{cite web}}: CS1 maint: бот: исходный статус URL неизвестен ( ссылка )
  49. ^ «Часто задаваемые вопросы о языке Ruby: как Ruby соотносится с...?». Архивировано из оригинала 8 мая 2015 г. Получено 2 мая 2015 г.
  50. Брюс Стюарт (29 ноября 2001 г.). «Интервью с создателем Ruby». O'Reilly Media. Архивировано из оригинала 6 мая 2015 г. Получено 2 мая 2015 г.
  51. ^ Билл Веннерс. «Динамическая производительность с Ruby». Архивировано из оригинала 5 сентября 2015 г. Получено 2 мая 2015 г.
  52. ^ "Language Workbenches: The Killer-App for Domain Specific Languages?". martinfowler.com . Архивировано из оригинала 2 мая 2021 г. Получено 2 мая 2015 г.
  53. ^ "Ruby – Add class methods at runtime". Архивировано из оригинала 2007-09-22 . Получено 2007-11-01 .
  54. ^ Билл Веннерс. «Блоки и замыкания в Ruby». Архивировано из оригинала 18 апреля 2015 г. Получено 2 мая 2015 г.
  55. ^ "Методы". Официальный FAQ по Ruby . Архивировано из оригинала 2022-06-28 . Получено 2021-06-20 .
  56. ^ Бритт, Джеймс. "Ruby 2.0.0 Standard Library Documentation". Архивировано из оригинала 2013-11-13 . Получено 2013-12-09 .
  57. ^ "[ruby-talk:01120] Re: Значение while..." Архивировано из оригинала 2011-07-17 . Получено 2008-12-06 . В синтаксисе Ruby оператор — это просто частный случай выражения, которое не может появляться в качестве аргумента (например, множественное присваивание).
  58. ^ "[ruby-talk:02460] Re: Вопрос о приоритете". Архивировано из оригинала 2004-07-22 . Получено 2008-12-06 . оператор [...] не может быть частью выражения, если он не сгруппирован в скобках.
  59. ^ "remove/virtual_module: Создан, чтобы сделать ваш код Ruby более чем в 3 раза быстрее. Надеюсь". GitHub . 21 февраля 2020 г. Архивировано из оригинала 1 марта 2017 г. Получено 29 августа 2016 г.
  60. ^ Питер Купер (2010-05-18). "Почему, что и как выпускают Rubinius 1.0". Архивировано из оригинала 2010-05-24 . Получено 2010-05-23 .
  61. Майя Стодте (февраль 2000 г.). «IBM developerWorks – Ruby: a new language». Архивировано из оригинала 18 августа 2000 г. Получено 3 марта 2014 г.
  62. ^ Юкихиро Мацумото (август 2002 г.). «lang-ruby-general: Re: вопрос о начальной разработке Ruby». Архивировано из оригинала 3 марта 2014 года . Проверено 3 марта 2014 г.
  63. ^ "The Ruby Toolbox". Архивировано из оригинала 2015-04-03 . Получено 2015-04-04 .
  64. ^ "Stats RubyGems.org your community gem host". rubygems.org . Архивировано из оригинала 10 декабря 2021 г. . Получено 10 декабря 2021 г. .
  65. ^ "Мы прекращаем поддержку raa.ruby-lang.org". 2013-08-08. Архивировано из оригинала 2015-12-31 . Получено 2016-01-03 .

Дальнейшее чтение

Внешние ссылки