Руби (язык программирования)
Начальный раздел этой статьи может быть слишком техническим для понимания большинства читателей . ( июнь 2022 г. ) |
Парадигма | Мультипарадигмальность : функциональная , императивная , объектно-ориентированная , рефлексивная. |
---|---|
Разработано | Юкихиро Мацумото |
Разработчик | Юкихиро Мацумото и др. |
Впервые появился | 1995 год |
Стабильная версия | 3.3.4 [1] / 9 июля 2024 г |
Дисциплина набора текста | Утка , динамичная , сильная |
Объем | Лексический, иногда динамический |
Язык реализации | С |
ТЫ | Кросс-платформенный |
Лицензия | Рубиновая лицензия |
Расширения имен файлов | .рб, .ru |
Веб-сайт | ruby-lang.org |
Основные реализации | |
Ruby MRI , TruffleRuby , YARV , Rubinius , JRuby , RubyMotion , mruby | |
Под влиянием | |
Есть , [2] Базовый , [3] С++ , [2] КЛУ , [4] Дилан , [4] Эйфель , [2] Лисп , [4] Луа , Перл , [4] Питон , [4] Смолток [4] | |
Под влиянием | |
Clojure , CoffeeScript , Crystal , D , Elixir , Groovy , Julia , [5] Дешево , Нет , [6] Кольцо , [7] Ржавчина , [8] Быстрый [9] | |
|
Ruby это интерпретируемый — уровня язык программирования высокого общего назначения . Он был разработан с упором на производительность и простоту программирования. В Ruby все является объектом , включая примитивные типы данных . Он был разработан в середине 1990-х годов Юкихиро «Мац» Мацумото в Японии .
Ruby является динамически типизированным и использует сбор мусора и своевременную компиляцию . Он поддерживает несколько парадигм программирования, включая процедурное , объектно-ориентированное и функциональное программирование . По словам создателя, на Ruby повлияли Perl , Smalltalk , Eiffel , Ada , BASIC , Java и Lisp . [10] [3]
История
[ редактировать ]Ранняя концепция
[ редактировать ]Мацумото сказал, что Ruby был задуман в 1993 году. В сообщении 1999 года в списке рассылки Ruby Talk он описывает некоторые из своих ранних идей о языке:
Я говорил со своим коллегой о возможности объектно-ориентированного языка сценариев. Я знал Perl (Perl4, а не Perl5), но он мне не очень нравился, потому что от него пахло игрушечным языком (он до сих пор есть). Объектно-ориентированный язык казался очень многообещающим. Тогда я знал Python . Но мне это не понравилось, потому что я не думал, что это настоящий объектно-ориентированный язык — объектно-ориентированные возможности оказались дополнением к языку. Будучи языковым маньяком и фанатом объектно-ориентированного программирования в течение 15 лет, я действительно хотел настоящий объектно-ориентированный, простой в использовании язык сценариев. Я искал, но не нашел. Поэтому я решил сделать это.
Мацумото описывает дизайн Ruby как простой язык Lisp по своей сути, с объектной системой, такой как Smalltalk, блоками, вдохновленными функциями высшего порядка , и практической полезностью, такой как Perl. [11] Он похвалил язык за его изобретательность и креативность за решение для составления интервалов.
Название «Рубин» возникло во время онлайн-чата между Мацумото и Кейдзю Исицукой 24 февраля 1993 года, еще до того, как для языка был написан какой-либо код. [12] Первоначально предлагалось два названия: « Коралл » и « Рубин ». Мацумото выбрал последнее в более позднем электронном письме Исицуке. [13] Позже Мацумото отметил фактор, повлиявший на выбор имени «Рубин»: это был камень, родной для одного из его коллег. [14] [15]
Ранние выпуски
[ редактировать ]О первом публичном выпуске Ruby 0.95 было объявлено в новостных группах Японии 21 декабря 1995 года. [16] [17] Впоследствии за два дня были выпущены еще три версии Ruby. [12] Релиз совпал с запуском на японском языке списка рассылки Ruby-list , который стал первым списком рассылки для нового языка.
Уже на этом этапе разработки присутствовали многие функции, знакомые по более поздним выпускам Ruby, включая объектно-ориентированный дизайн, классы с наследованием, примеси , итераторы , замыкания , обработку исключений и сборку мусора . [18]
После выпуска Ruby 0.95 в 1995 году в эти годы было выпущено несколько стабильных версий Ruby:
- Руби 1.0: 25 декабря 1996 г. [12]
- Руби 1.2: декабрь 1998 г.
- Руби 1.4: август 1999 г.
- Руби 1.6: сентябрь 2000 г.
В 1997 году в сети была опубликована первая статья о Ruby. В том же году Мацумото был нанят netlab.jp для работы над Ruby в качестве штатного разработчика. [12]
В 1998 году Мацумото запустил Архив приложений Ruby вместе с простой домашней страницей Ruby на английском языке. [12]
В 1999 году появился первый список рассылки Ruby-talk на английском языке , что сигнализировало о растущем интересе к языку за пределами Японии. [19] В том же году Мацумото и Кейдзю Исицука написали первую книгу по Ruby, « Объектно -ориентированный язык сценариев Ruby», которая была опубликована в Японии в октябре 1999 года. В начале 2000-х годов за ней последовало около 20 книг по Ruby, опубликованных на японском языке. . [12]
К 2000 году Ruby был популярнее Python в Японии. [20] В сентябре 2000 года была напечатана первая книга на английском языке «Программирование Ruby» , которая позже была бесплатно выпущена для широкой публики, что еще больше расширило распространение Ruby среди англоговорящих людей. В начале 2002 года англоязычный список рассылки Ruby-talk получал больше сообщений, чем японоязычный список рассылки Ruby , демонстрируя растущую популярность 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]
Примерно в 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, которые потребовали переписывания . Ruby 1.9 вносит множество существенных изменений по сравнению с серией 1.8. Примеры включают в себя: [28]
- блокировать локальные переменные (переменные, которые являются локальными для блока , в котором они объявлены)
- дополнительный синтаксис лямбда :
f = ->(a,b) { puts a + b }
- дополнительный синтаксис литерала Hash с использованием двоеточий для ключей символов:
{symbol_key: "value"} == {:symbol_key => "value"}
- построчные кодировки символов поддерживаются
- новый API сокетов [ IPv6 ] поддержка
require_relative
безопасность импорта
Рубин 2
[ редактировать ]Ruby 2.0 должен был быть полностью обратно совместим с Ruby 1.9.3. На момент официального выпуска версии 2.0.0 от 24 февраля 2013 г. было только пять известных (незначительных) несовместимостей. [29] В Ruby 2.0 добавлено несколько новых функций, в том числе:
- метода Аргументы ключевого слова
- Новый метод,
Module#prepend
, чтобы расширить класс - Новый литерал для создания массива символов.
- Новый API для ленивой оценки Enumerables
- Новое соглашение об использовании #to_h для преобразования объектов в хеши. [30]
Начиная с версии 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] Другие заметные изменения включают в себя:
- Возможность помечать все строковые литералы как замороженные по умолчанию, что приводит к значительному увеличению производительности строковых операций. [38]
- Сравнение хэшей, позволяющее напрямую проверять пары ключ/значение, а не только ключи.
- Новый оператор безопасной навигации
&.
это может облегчить обработку нуля (например, вместоif obj && obj.foo && obj.foo.bar
, мы можем использоватьif obj&.foo&.bar
). - Гем Did_you_mean теперь включен по умолчанию и требуется при запуске, чтобы автоматически предлагать похожие совпадения имен при NameError или NoMethodError .
- Hash#dig и Array#dig для легкого извлечения глубоко вложенных значений (например, заданных
profile = { social: { wikipedia: { name: 'Foo Baz' } } }
, значение Foo Baz теперь можно получить с помощьюprofile.dig(:social, :wikipedia, :name)
). .grep_v(regexp)
который будет соответствовать всем отрицательным примерам данного регулярного выражения в дополнение к другим новым функциям.
Ruby 2.4.0 включает улучшения производительности хеш-таблицы, Array#max, Array#min и доступа к переменным экземпляра. [39] Другие заметные изменения включают в себя:
- Binding#irb: запуск сеанса REPL, аналогичного Biding.pry.
- Объедините Fixnum и Bignum в Integer . класс
- String поддерживает сопоставление регистров Unicode, а не только ASCII.
- Новый метод Regexp#match?, который является более быстрой логической версией Regexp#match.
- Обнаружение взаимоблокировки потоков теперь показывает потоки с их обратной трассировкой и зависимостями.
Несколько заметных изменений в Ruby 2.5.0 включают в себя операторы спасения и обеспечения, автоматически использующие окружающий блок do-end (меньше необходимости в дополнительных начальных блоках), цепочку методов с помощью yield_self , поддержку покрытия ветвей и измерения покрытия метода, а также упрощение Хэш-преобразования с помощью Hash#slice и Hash#transform_keys. Кроме того, происходит множество улучшений производительности, таких как более быстрая передача блоков (в 3 раза быстрее), более быстрые мьютексы, более быстрые шаблоны ERB и улучшения некоторых методов конкатенации.
Несколько заметных изменений в Ruby 2.6.0 включают экспериментальный JIT- компилятор и RubyVM::AbstractSyntaxTree (экспериментальный).
Несколько заметных изменений в Ruby 2.7.0 включают сопоставление с образцом (экспериментальное), улучшения REPL, сборщик мусора для сжатия и разделение позиционных и ключевых аргументов.
Рубин 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 — улучшить параллелизм , и еще две утилиты Fiber 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, Rust компилятор на основе JIT- , теперь поддерживает больше архитектур в Linux.
Ruby 3.3 был выпущен 25 декабря 2023 года. [1] Ruby 3.3 вносит в язык значительные улучшения и повышает производительность. Ключевые особенности включают в себя появление парсера Prism для портативного и удобного синтаксического анализа, добавление JIT-компилятора чистого Ruby RJIT и значительное повышение производительности компилятора YJIT. Кроме того, улучшения в использовании памяти, введение планировщика потоков M:N и обновления стандартной библиотеки способствуют более эффективной и удобной для разработчиков экосистеме Ruby.
Семантика и философия
[ редактировать ]Мацумото сказал, что Ruby создан для продуктивной работы и развлечения программистов, следуя принципам хорошего дизайна пользовательского интерфейса . [45] На конференции Google Tech Talk в 2008 году он сказал: «Я надеюсь, что Ruby поможет каждому программисту в мире быть продуктивным, получать удовольствие от программирования и быть счастливым. Это основная цель языка Ruby». [46] Он подчеркивает, что при проектировании систем необходимо уделять особое внимание потребностям человека, а не компьютера: [47]
Часто люди, особенно инженеры-компьютерщики, сосредотачивают свое внимание на машинах. Они думают: «Сделав это, машина будет работать быстрее. Сделав это, машина будет работать более эффективно. Сделав это, машина сделает что-то что-то». Они сосредоточены на машинах. Но на самом деле нам нужно сосредоточиться на людях, на том, как люди заботятся о программировании или использовании машин. Мы мастера. Они рабы.
Мацумото сказал, что его основной целью при разработке было создание языка, который ему самому нравилось бы использовать, сводя к минимуму работу программиста и возможную путаницу. Он сказал, что не применил принцип наименьшего удивления (POLA) к дизайну Ruby; [47] в дискуссии в группе новостей comp.lang.ruby в мае 2005 года Мацумото попытался дистанцировать Руби от POLA, объяснив, что, поскольку любой выбор дизайна будет для кого-то неожиданным, он использует личный стандарт при оценке неожиданности. Если этот личный стандарт останется неизменным, для тех, кто знаком с ним, сюрпризов будет немного. [48]
Мацумото определил это так в интервью: [47]
У каждого индивидуальный бэкграунд. Кто-то может прийти из Python, кто-то из Perl, и они могут быть удивлены различными аспектами языка. Потом ко мне подходят и говорят: «Меня удивила эта особенность языка, значит, Ruby нарушает принцип наименьшего удивления». Ждать. Ждать. Принцип наименьшего удивления касается не только вас. Принцип наименьшего удивления означает принцип наименьшего моего удивления. И это означает принцип наименьшего удивления после того, как вы хорошо изучите Ruby. Например, до того, как я начал разрабатывать Ruby, я был программистом на C++. Я программировал исключительно на C++ два или три года. И после двух лет программирования на C++ это меня все еще удивляет.
Ruby объектно-ориентирован : каждое значение является объектом, включая классы и экземпляры типов, которые во многих других языках обозначаются как примитивы (например, целые числа , логические значения и « ноль »). Поскольку все в Ruby является объектом, все в Ruby имеет определенные встроенные возможности, называемые методами. Каждая функция является методом , и методы всегда вызываются для объекта. Методы, определенные в области видимости верхнего уровня, становятся методами класса Object. Поскольку этот класс является предком любого другого класса, такие методы можно вызывать для любого объекта. Они также видны во всех областях и фактически служат «глобальными» процедурами. Ruby поддерживает наследование с динамической диспетчеризацией , миксинами и одноэлементными методами (принадлежащими и определенными для одного экземпляра , а не определяемыми в классе). Хотя Ruby не поддерживает множественное наследование , классы могут импортировать модули как примеси.
Ruby описывается как многопарадигмальный язык программирования : он позволяет процедурное программирование (определение функций/переменных вне классов делает их частью корня, «собственного» объекта), с объектной ориентацией (все является объектом) или функциональное программирование (все является объектом). имеет анонимные функции , замыкания и продолжения ; все операторы имеют значения, а функции возвращают последнюю оценку). Он поддерживает самоанализ , рефлексивное программирование , метапрограммирование на основе интерпретатора и потоки . Ruby поддерживает динамическую типизацию и параметрический полиморфизм .
Согласно FAQ по Ruby, синтаксис аналогичен Perl , а семантика аналогична Smalltalk , но философия дизайна сильно отличается от Python . [49]
Функции
[ редактировать ]- Тщательно объектно-ориентированный с наследованием , миксинами и метаклассами. [50]
- Динамическая типизация и утиная печать
- Все является выражением (даже операторами ) и все выполняется императивно (даже объявлениями ).
- Краткий и гибкий синтаксис [51] который сводит к минимуму синтаксический шум и служит основой для предметно-ориентированных языков. [52]
- Динамическое отражение и изменение объектов для облегчения метапрограммирования. [53]
- Лексические замыкания , итераторы и генераторы с блочным синтаксисом [54]
- Литеральная запись массивов , хэшей , регулярных выражений и символов.
- Встраивание кода в строки ( интерполяция )
- Аргументы по умолчанию
- Четыре уровня области видимости переменных ( глобальный , класс , экземпляр и локальный ), обозначаемые сигилами или их отсутствием.
- Сбор мусора
- Первоклассные продолжения
- Строгие правила логического приведения (все верно, кроме
false
иnil
) - Обработка исключений
- Перегрузка оператора [55]
- Встроенная поддержка рациональных чисел , комплексных чисел и арифметики произвольной точности.
- Пользовательское поведение отправки (через
method_missing
иconst_missing
) - Собственные нити и кооперативные волокна (волокна являются функцией версии 1.9/ YARV )
- Поддержка Unicode и нескольких кодировок символов .
- Собственный API плагина на C
- Interactive Ruby Shell, интерактивный интерпретатор командной строки, который можно использовать для быстрого тестирования кода ( REPL ).
- Централизованное управление пакетами через RubyGems.
- Реализовано на всех основных платформах
- Большая стандартная библиотека, включая модули для YAML , JSON , XML , CGI , OpenSSL , HTTP , FTP , RSS , Curses , zlib и Tk. [56]
- Компиляция точно в срок
Синтаксис
[ редактировать ]Синтаксис Ruby во многом аналогичен синтаксису Perl и Python . Определения классов и методов обозначаются ключевыми словами, тогда как блоки кода могут определяться либо ключевыми словами, либо фигурными скобками. В отличие от Perl, переменные не обязательно имеют префикс сигилы . При использовании символ меняет семантику области действия переменной. Для практических целей нет различия между выражениями и утверждениями . [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 часто называют Ruby Interpreter Матца или MRI. Эта реализация написана на C и использует собственную виртуальную машину , специфичную для Ruby .
Стандартизированная и устаревшая реализация Ruby 1.8 была написана на C как однопроходном интерпретируемом языке . [21]
Начиная с Ruby 1.9 и продолжая Ruby 2.x и выше, официальным интерпретатором Ruby был YARV («Еще одна виртуальная машина Ruby»), и эта реализация заменила более медленную виртуальную машину, использовавшуюся в предыдущих выпусках MRI.
Альтернативные реализации
[ редактировать ]По состоянию на 2018 год [update]существует ряд альтернативных реализаций Ruby, включая JRuby , Rubinius и mruby . Каждый из них использует свой подход: JRuby и Rubinius обеспечивают компиляцию «точно в срок» , а mruby также обеспечивает компиляцию с опережением времени .
Ruby имеет три основные альтернативные реализации:
- JRuby — смешанная реализация Java и Ruby, работающая на виртуальной машине Java . JRuby в настоящее время нацелен на Ruby 3.1.x.
- TruffleRuby , реализация Java, использующая структуру реализации языка Truffle с GraalVM.
- Rubinius — виртуальная машина с байт-кодом C++ , использующая LLVM для компиляции в машинный код во время выполнения. Компилятор байт-кода и большинство основных классов написаны на чистом Ruby. Rubinius в настоящее время нацелен на Ruby 2.3.1.
Другие реализации Ruby включают:
- MagLev , реализация Smalltalk , работающая на GemTalk Systems GemStone /S. виртуальной машине
- mruby — реализация, предназначенная для встраивания в код C аналогично Lua . В настоящее время его разрабатывают Юкихиро Мацумото и другие.
- RGSS , или Ruby Game Scripting System, запатентованная реализация, которая используется серией программного обеспечения RPG Maker для разработки игр и модификации движка RPG Maker.
- julializer — транспилятор (частичный) из Ruby в Julia . Его можно использовать для значительного ускорения, например, по сравнению с реализациями Ruby или JRuby (может быть полезно только для числового кода). [59]
- Topaz — реализация Ruby, написанная на Python.
- Opal , веб-интерпретатор, который компилирует Ruby в JavaScript.
Другими ныне несуществующими реализациями Ruby были:
- MacRuby — реализация Mac OS X в среде выполнения Objective-C . Его аналог для iOS называется RubyMotion.
- IronRuby — реализация на .NET Framework.
- Cardinal, реализация виртуальной машины Parrot.
- Ruby Enterprise Edition , часто сокращается до ree , реализация, оптимизированная для работы с крупномасштабными Ruby on Rails . проектами
- HotRuby — на JavaScript и ActionScript. реализация языка программирования Ruby
Зрелость реализаций Ruby обычно измеряется их способностью запускать среду Ruby on Rails (Rails), поскольку ее сложно реализовать и она использует множество специфичных для Ruby функций. Момент, когда конкретная реализация достигает этой цели, называется «сингулярностью Rails». Эталонная реализация, JRuby и Rubinius [60] все могут запускать Rails без изменений в производственной среде.
Поддержка платформы
[ редактировать ]Первоначально Мацумото разработал Ruby для 4.3BSD 3.x на базе Sony NEWS-OS , но позже перенес свою работу на SunOS 4.x и, наконец, на Linux . [61] [62] К 1999 году было известно, что Ruby работает во многих различных операционных системах . Современные версии и реализации Ruby доступны во всех основных настольных, мобильных и серверных операционных системах. Ruby также поддерживается на ряде платформ облачного хостинга, таких как Jelastic , Heroku , Google Cloud Platform и других.
Такие инструменты, как RVM и RBEnv , облегчают установку и разбиение на разделы нескольких версий Ruby и нескольких «гемсетов» на одной машине.
Репозитории и библиотеки
[ редактировать ]RubyGems — менеджер пакетов Ruby. Пакет Ruby называется «gem» и может быть установлен через командную строку. Большинство драгоценных камней представляют собой библиотеки, хотя существуют некоторые из них, которые представляют собой приложения, например IDE . [63] размещено более 100 000 драгоценных камней Ruby На RubyGems.org . [64]
Многие новые и существующие библиотеки Ruby размещены на GitHub — сервисе, который предлагает контроля версий размещение репозитория для Git .
Архив приложений Ruby, в котором размещались приложения, документация и библиотеки для программирования Ruby, сохранялся до 2013 года, когда его функции были переданы RubyGems. [65]
См. также
[ редактировать ]- Сравнение языков программирования
- Метасплоит
- Почему (острое) Руководство по Ruby
- Кристалл (язык программирования)
- Рубин на рельсах
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Выпущен Ruby 3.3.0» . Архивировано из оригинала 25 декабря 2023 г. Проверено 25 декабря 2023 г.
- ^ Перейти обратно: а б с Купер, Питер (2009). Начало Ruby: от новичка до профессионала . От новичка к профессионалу (2-е изд.). Беркли: APress. п. 101. ИСБН 978-1-4302-2363-4 .
В меньшей степени на Ruby также повлияли Python, LISP, Eiffel, Ada и C++.
- ^ Перейти обратно: а б «Причины Руби» . Рубиновая конференция 2008 . Телевидение «Конфрикс». Архивировано из оригинала 15 января 2020 г. Проверено 25 июня 2019 г.
- ^ Перейти обратно: а б с д и ж Бини, Ола (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.
- ^ «Документация Джулии 1.0: Введение» . Архивировано из оригинала 16 августа 2018 года . Проверено 6 октября 2018 г.
- ^ Беркс, Тим. «О Ню™» . Программирование Nu™ . Neon Design Technology, Inc. Архивировано из оригинала 25 декабря 2018 г. Проверено 21 июля 2011 г.
- ^ Команда Ринг (3 декабря 2017 г.). «Кольцо и другие языки» . Ring-lang.net . язык звонка . Архивировано из оригинала 25 декабря 2018 года . Проверено 3 декабря 2017 г.
- ^ «Влияния — Справочник по ржавчине» . Справочник по ржавчине . Архивировано из оригинала 26 января 2019 г. Проверено 18 апреля 2023 г.
- ^ Латтнер, Крис (3 июня 2014 г.). «Домашняя страница Криса Лэттнера» . Крис Лэттнер. Архивировано из оригинала 25 декабря 2018 г. Проверено 3 июня 2014 г.
Язык Swift — это продукт неустанных усилий команды языковых экспертов, гуру документации, ниндзя по оптимизации компиляторов и невероятно важной внутренней экспериментальной группы, которая предоставляла отзывы, помогающие совершенствовать и проверять идеи. Конечно, он также получил большую пользу от опыта, с трудом полученного многими другими языками в этой области, черпая идеи из Objective-C, Rust, Haskell, Ruby, Python, C#, CLU и многих других, чтобы их перечислять.
- ^ «О Рубине» . Архивировано из оригинала 9 октября 2014 года . Проверено 15 февраля 2020 г.
- ^ Мацумото, Юкихиро (13 февраля 2006 г.). «Re: Возможности Ruby lisp» . Архивировано из оригинала 27 октября 2018 г. Проверено 15 февраля 2020 г.
- ^ Перейти обратно: а б с д и ж «История Рубина» . Архивировано из оригинала 14 июля 2011 г. Проверено 14 августа 2008 г.
- ^ «[К вашему сведению: исторический] Решающий момент названия языка Ruby. (Re: [ANN] Ruby 1.8.1)» (электронное письмо от Хироши Сугихары на Ruby-talk). Архивировано из оригинала 17 июля 2011 г. Проверено 14 августа 2008 г.
- ^ «1.3 Почему такое название «Рубин»?» . Часто задаваемые вопросы по языку Ruby . Руби-Док.org. Архивировано из оригинала 28 мая 2012 года . Проверено 10 апреля 2012 г.
- ^ Юкихиро Мацумото (11 июня 1999 г.). «Re: имя Руби?» . Ruby-Talk (список рассылки). Архивировано из оригинала 25 декабря 2018 года . Проверено 10 апреля 2012 г.
- ^ «Больше археолингвистики: раскопки прото-Рубина» . Архивировано из оригинала 6 ноября 2015 года . Проверено 2 мая 2015 г.
- ^ "[ruby-talk:00382] Re: история рубина" . Архивировано из оригинала 16 июля 2011 года . Проверено 2 мая 2015 г.
- ^ "[ruby-list:124] РУКОВОДСТВО — возможности Ruby" . Архивировано из оригинала 24 мая 2003 года . Проверено 2 мая 2015 г.
- ^ «Интервью с создателем Ruby» . Архивировано из оригинала 8 февраля 2008 г. Проверено 11 июля 2007 г.
- ^ Юкихиро Мацумото (октябрь 2000 г.). «Программирование Ruby: вперед» . Архивировано из оригинала 25 декабря 2018 года . Проверено 5 марта 2014 г.
- ^ Перейти обратно: а б «Мы прекращаем поддержку Ruby 1.8.7» . Архивировано из оригинала 6 июня 2015 года . Проверено 2 мая 2015 г.
- ^ «IPA, Агентство по продвижению информационных технологий: Сообщение для прессы о создании стандарта JIS (JIS X 3017) для языка программирования Ruby» Архивировано из оригинала 2 февраля 2015 года . Проверено 2 мая 2015 года .
- ^ «IPA (Агентство по продвижению информационных технологий): Пресс-объявление Язык программирования Ruby утвержден в качестве международного стандарта» . Архивировано из оригинала 1 февраля 2015 года. Проверено 2 мая 2015 года .
- ^ «ИСО/МЭК 30170:2012» . Архивировано из оригинала 12 марта 2017 г. Проверено 10 марта 2017 г.
- ^ Веб-разработка: Ruby on Rails. Архивировано 24 февраля 2009 г. в Wayback Machine . Devarticles.com (22 марта 2007 г.). Проверено 17 июля 2013 г.
- ^ «Выпущен Ruby 1.9.3 p0» . руби-lang.org. 31 октября 2011. Архивировано из оригинала 14 января 2013 года . Проверено 20 февраля 2013 г.
- ^ "v1_9_3_0/НОВОСТИ" . Ruby Subversion Репозиторий исходного кода . руби-lang.org. 17 сентября 2011 года. Архивировано из оригинала 6 ноября 2015 года . Проверено 20 февраля 2013 г.
- ^ Ruby 1.9: чего ожидать. Архивировано 4 марта 2016 г. в Wayback Machine . Slideshow.rubyforge.org. Проверено 17 июля 2013 г.
- ^ Эндо, Юске. (24 февраля 2013 г.) Выпущен Ruby 2.0.0-p0. Архивировано 27 февраля 2013 г. на Wayback Machine . Ruby-lang.org. Проверено 17 июля 2013 г.
- ^ Эндо, Юске. (24 февраля 2013 г.) Выпущен Ruby 2.0.0-p0. Архивировано 17 января 2016 г. на Wayback Machine . Ruby-lang.org. Проверено 17 июля 2013 г.
- ^ «Семантическое управление версиями, начиная с Ruby 2.1.0» . 21 декабря 2013. Архивировано из оригинала 13 февраля 2014 года . Проверено 27 декабря 2013 г.
- ^ Густаво Фредерико Темпл Педроса, Витор де Лима, Леонардо Бьянкони (2015). «Выпущен Ruby 2.2.1» . Архивировано из оригинала 16 мая 2016 года . Проверено 12 июля 2016 г.
{{cite web}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Густаво Фредерико Темпл Педроса, Витор де Лима, Леонардо Бьянкони (2015). «Журнал изменений v2.2.1» . Архивировано из оригинала 26 февраля 2017 года . Проверено 12 июля 2016 г.
{{cite web}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Густаво Фредерико Темпл Педроса, Витор де Лима, Леонардо Бьянкони (2014). «Указание энергонезависимых регистров для повышения производительности в ppc64» . Архивировано из оригинала 17 сентября 2016 года . Проверено 12 июля 2016 г.
{{cite web}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Густаво Фредерико Темпл Педроса, Витор де Лима, Леонардо Бьянкони (2014). «Указание МАКРОСА для повышения производительности в ppc64» . Архивировано из оригинала 17 сентября 2016 года . Проверено 12 июля 2016 г.
{{cite web}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ «ruby/NEWS at v2_2_0 · Ruby/Ruby · GitHub» . Гитхаб . Архивировано из оригинала 1 января 2015 года . Проверено 2 мая 2015 г.
- ^ «Рубин/НОВОСТИ в версии 2_3_0 - рубин/рубин» . Гитхаб . Архивировано из оригинала 1 марта 2017 года . Проверено 25 декабря 2015 г.
- ^ «Изменения и возможности Ruby 2.3.0» . Бег с Руби . dev.mensfeld.pl. 14 ноября 2015 года. Архивировано из оригинала 5 января 2016 года . Проверено 27 декабря 2015 г.
- ^ «Выпущен Ruby 2.4.0» . www.ruby-lang.org . Архивировано из оригинала 17 февраля 2017 г. Проверено 30 декабря 2016 г.
- ^ Перейти обратно: а б с д «Выпущен Ruby 3.0.0» . Язык программирования Ruby . 2020-12-25. Архивировано из оригинала 25 декабря 2020 г. Проверено 25 декабря 2020 г.
- ^ Шеффлер, Джонан (10 ноября 2016 г.). «Ruby 3x3: Мац, Коичи и Тендерлав о будущем Ruby Performance» . Руби . Архивировано из оригинала 10 мая 2019 года . Проверено 18 мая 2019 г.
- ^ «Выпущен Ruby 3.1.0» . Ruby-lang.org . Архивировано из оригинала 25 декабря 2021 года . Проверено 25 декабря 2021 г.
- ^ «Выпущен Ruby 3.1.0» . Архивировано из оригинала 26 декабря 2021 г. Проверено 26 декабря 2021 г.
- ^ «Выпущен Ruby 3.2.0» . Архивировано из оригинала 25 декабря 2022 г. Проверено 25 декабря 2022 г.
- ^ «Язык программирования Ruby» . Архивировано из оригинала 18 января 2020 года . Проверено 2 мая 2015 г.
- ^ Google Tech Talks - Ruby 1.9 на YouTube
- ^ Перейти обратно: а б с Билл Веннерс. «Философия Рубина» . Архивировано из оригинала 5 июля 2019 года . Проверено 2 мая 2015 г.
- ^ «Добро пожаловать на RUBYWEEKLYNEWS.ORG» . 4 июля 2017 г. Архивировано из оригинала 4 июля 2017 г.
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка ) - ^ «Часто задаваемые вопросы по языку Ruby: как Ruby противостоит…?» . Архивировано из оригинала 8 мая 2015 года . Проверено 2 мая 2015 г.
- ^ Брюс Стюарт (29 ноября 2001 г.). «Интервью с создателем Ruby» . О'Рейли Медиа. Архивировано из оригинала 6 мая 2015 года . Проверено 2 мая 2015 г.
- ^ Билл Веннерс. «Динамическая продуктивность с Ruby» . Архивировано из оригинала 5 сентября 2015 года . Проверено 2 мая 2015 г.
- ^ «Языковые инструменты: приложение-убийца для языков, специфичных для предметной области?» . martinfowler.com . Архивировано из оригинала 2 мая 2021 года . Проверено 2 мая 2015 г.
- ^ «Ruby — добавление методов класса во время выполнения» . Архивировано из оригинала 22 сентября 2007 г. Проверено 1 ноября 2007 г.
- ^ Билл Веннерс. «Блоки и замыкания в Ruby» . Архивировано из оригинала 18 апреля 2015 года . Проверено 2 мая 2015 г.
- ^ «Методы» . Официальный FAQ по Ruby . Архивировано из оригинала 28 июня 2022 г. Проверено 20 июня 2021 г.
- ^ Бритт, Джеймс. «Документация стандартной библиотеки Ruby 2.0.0» . Архивировано из оригинала 13 ноября 2013 г. Проверено 9 декабря 2013 г.
- ^ «[ruby-talk:01120] Re: Значение while...» Архивировано из оригинала 17 июля 2011 г. Проверено 6 декабря 2008 г.
В синтаксисе Ruby оператор — это всего лишь частный случай выражения, которое не может выступать в качестве аргумента (например, множественное присваивание).
- ^ "[ruby-talk:02460] Re: Вопрос о приоритете" . Архивировано из оригинала 22 июля 2004 г. Проверено 6 декабря 2008 г.
утверждение [...] не может быть частью выражения, если оно не сгруппировано в круглых скобках.
- ^ «remove/virtual_module: Создан для того, чтобы сделать ваш Ruby-код более чем в 3 раза быстрее. Надеюсь» . Гитхаб . 21 февраля 2020 года. Архивировано из оригинала 1 марта 2017 года . Проверено 29 августа 2016 г.
- ^ Питер Купер (18 мая 2010 г.). «Почему, что и как был выпущен Rubinius 1.0» . Архивировано из оригинала 24 мая 2010 г. Проверено 23 мая 2010 г.
- ^ Майя Стодте (февраль 2000 г.). «IBM DeveloperWorks – Ruby: новый язык» . Архивировано из оригинала 18 августа 2000 года . Проверено 3 марта 2014 г.
- ^ Юкихиро Мацумото (август 2002 г.). "lang-ruby-general: Re: вопрос о начальной разработке Ruby" . Архивировано из оригинала 3 марта 2014 года . Проверено 3 марта 2014 г.
- ^ «Набор инструментов Ruby» . Архивировано из оригинала 3 апреля 2015 г. Проверено 4 апреля 2015 г.
- ^ «Статистика RubyGems.org — ваш хостинг драгоценных камней сообщества» . Rubygems.org . Архивировано из оригинала 10 декабря 2021 года . Проверено 10 декабря 2021 г.
- ^ «Мы удаляем raa.ruby-lang.org» . 08.08.2013. Архивировано из оригинала 31 декабря 2015 г. Проверено 03 января 2016 г.
Дальнейшее чтение
[ редактировать ]- Блэк, Дэвид; Лео, Джозеф (15 марта 2019 г.), The Well-Grounded Rubyist (Третье изд.), Manning Publications , стр. 584, ISBN 978-1617295218
- Мец, Сэнди (22 августа 2018 г.), Практическое объектно-ориентированное проектирование: руководство по гибкому использованию Ruby (второе изд.), Addison-Wesley Professional , стр. 288, ISBN 978-0-13-445647-8 , заархивировано из оригинала 13 февраля 2020 г. , получено 13 февраля 2020 г.
- Купер, Питер (12 июля 2016 г.), Начало Ruby: от новичка до профессионала (Третье изд.), Apress , стр. 492, ISBN 978-1484212790
- Карлсон, Лукас; Ричардсон, Леонард (3 апреля 2015 г.), Поваренная книга Ruby: рецепты объектно-ориентированного написания сценариев (второе изд.), O'Reilly Media , стр. 963, ISBN 978-1449373719
- Фултон, Хэл; Арко, Андре (2 марта 2015 г.), Ruby Way: решения и методы программирования на Ruby (Третье изд.), Addison-Wesley Professional , стр. 816, ISBN 978-0-321-71463-3 , заархивировано из оригинала 13 февраля 2020 г. , получено 13 февраля 2020 г.
- Томас, Дэйв; Фаулер, Чад; Хант, Энди (7 июля 2013 г.), Программирование на Ruby 1.9 и 2.0: Руководство для прагматичных программистов (Четвертое изд.), Pragmatic Bookshelf , стр. 888, ISBN 978-1937785499
- Макэналли, Джереми; Аркин, Ассаф (28 марта 2009 г.), Ruby на практике (первое издание), Manning Publications , стр. 360, ISBN 978-1933988474
- Фланаган, Дэвид; Мацумото, Юкихиро (25 января 2008 г.), Язык программирования Ruby (первое издание), O'Reilly Media , стр. 446 , ISBN 978-0-596-51617-8
- Бэрд, Кевин (8 июня 2007 г.), Ruby на примере: концепции и код (первое издание), No Starch Press , стр. 326, ISBN 978-1593271480 , заархивировано из оригинала 13 января 2020 г. , получено 13 февраля 2020 г.
- Фицджеральд, Майкл (14 мая 2007 г.), Learning Ruby (первое издание), O'Reilly Media , стр. 255 , ISBN 978-0-596-52986-4
Внешние ссылки
[ редактировать ]- Руби (язык программирования)
- Языки программирования на основе классов
- Динамические языки программирования
- Функциональные языки
- Динамически типизированные языки программирования
- Бесплатное программное обеспечение, написанное на C.
- стандарты ИСО
- Японские изобретения
- Мультипарадигмальные языки программирования
- Объектно-ориентированные языки программирования
- Языки программирования, созданные в 1995 году.
- Языки программирования со стандартом ISO
- Языки сценариев
- Программное обеспечение, использующее лицензию BSD
- Текстоориентированные языки программирования
- Бесплатные компиляторы и интерпретаторы