Почему ruby
Содержание:
- Библиотеки[править | править код]
- Возможности языка
- Как я пришёл в IT
- Некоторые изменения в релизе
- Особенности языка
- Метапрограммирование в реальной задаче
- Синтаксис
- Миграции и работа с базой данных
- Кеширование гемов Ruby в GitHub Actions с использованием ruby/setup-ruby или actions/cache
- Пошаговый туториал по написанию Telegram бота на Ruby (native)
- Синтаксис и Семантика
- Почему Ruby и Ruby on Rails перспективны
- Культура и стандарты
- Про Open source и сообщество
- Кеширование
- Философия языка
- Системы управления пакетами
- Установщики
Библиотеки[править | править код]
Стандартная библиотекаправить | править код
Основные встроенные классы Руби
| Название | Описание | Версия |
|---|---|---|
| Вершина иерархии классов Руби. | 1.0 | |
| Динамический массив для хранения произвольных объектов, индексируемый с 0. | 1.0 | |
| Объекты сохраняют контекст выполнения некоторого участка кода (значение переменных, методов и т. д.). Может позже использоваться для выполнения вычислений в этом контексте. | 1.2 | |
| Объект сохраняет адрес возврата и контекст выполнения, позволяя выполнить переход в точку создания из любого места программы (т. н. нелокальный переход). | 1.4 | |
| 1.0 | ||
| Директория файловой системы. Предоставляет возможности для просмотра директорий и их атрибутов. | 1.0 | |
| Базовый класс всех исключений (образует вершину иерархии более чем 30 исключений) | 1.0 | |
| Глобальная переменная является единственной переменной этого класса и представляет логическую ложь в булевских выражениях. | 1.0 | |
| Коллекция пар ключ-значение; порядок обхода не зависит от порядка вставки. | 1.0 | |
| Базовые возможности ввода-вывода. | 1.0 | |
| Класс для доступа к файлам. | 1.0 | |
| Результат применения регулярного выражения. Обычно используется не напрямую, а через специальные переменные , , , , и т. д. | 1.0 | |
| Метод, асоциированный с конкретным объектом (не с классом). Может использоваться для вызова этого метода без наличия объекта. | 1.2 | |
| Класс модулей. | 1.0 | |
| Класс классов; классы в Руби являются объектами, а Class является классом этих объектов (метаклассом). | 1.0 | |
| Единственным экземпляром класса является переменная . и представляют ложь в программах. Любой другой обект предсталет собой истинну. | 1.0 | |
| Абстрактный класс чисел. | 1.0 | |
| Абстрактный класс целых чисел. Может трактоваться как бесконечная битовая строка для битовых операций. | 1.0 | |
| Целые числа ограниченные только количеством памяти. Конвертируется в автоматически, если значение может быть размещено в них и наоборот. | 1.0 | |
| Целые числа, которые могут быть размещены в машинном слове (32 бита для большинства машин). Если результат операции выходит за рамки, автоматически преобразуется в Bignum. | 1.0 | |
| Числа с плавающей запятой. | 1.0 | |
| 1.0 | ||
| Интервал: множество значений, заданных с начальным и конечным элементами. | 1.0 | |
| Регулярное выражение. | 1.0 | |
| Строка байт произвольной длины. | 1.0 | |
| Предоставляет простой способ связывания атрибутов вместе без написания кода класса напрямую; генерирует специальные классы, содержащие множество переменных и методов доступа. | 1.0 | |
| Представляет имя и создаётся при использовании синтаксиса . Все объекты с данным именем созданные в программе — ссылки на один объект. | 1.6 | |
| Инкапсулирует информацию о потоке, включая основной поток скрипта Руби. | 1.0 | |
| Предоставляет способ управления группой потоков. Поток может принадлежать только к одной . Добавление потока к новой группе удаляет его из любой предыдущей. | 1.6 | |
| Дата и время. | 1.0 | |
| Глобальная переменная является единственной переменной класса и представляет логическую истину в булевских выражениях. | 1.0 | |
| Метод, не связаный с конкретным объектом. Может привязываться к объекту и вызываться как . | 1.6 |
Возможности языка
- Имеет лаконичный и простой синтаксис, разработанный под частичным влиянием Ада, Eiffel и Python.
- Позволяет обрабатывать исключения.
- Позволяет переопределять операторы, которые на самом деле являются методами.
- Полностью объектно-ориентированный язык программирования. Все данные в Ruby являются объектами. Единственное исключение — управляющие конструкции, которые не являются объектами. Например, число «1» — это экземпляр класса Fixnum. Также поддерживается добавление методов в класс и даже в конкретный экземпляр во время выполнения программы.
- Не поддерживает множественное наследование, но вместо него может использоваться концепция «примесей», основанная в данном языке на механизме модулей.
- Содержит автоматический сборщик мусора. Он работает для всех объектов Ruby, в том числе для внешних библиотек.
- Создавать расширения для Ruby на C очень просто частично из-за сборщика мусора, частично из-за несложного и удобного API.
- Поддерживает замыкания с полной привязкой к переменным.
- Поддерживает блоки кода (код заключается в { … } или do … end). Блоки могут использоваться в методах или преобразовываться в замыкания.
- Целые переменные в Ruby автоматически конвертируются между типами Fixnum (32-разрядные) и Bignum (больше 32 разрядов) в зависимости от их значения, что позволяет производить целочисленные математические расчёты со сколь угодно большой точностью.
- Не требует предварительного объявления переменных, но для интерпретатора желательно, чтобы переменным присваивалось пустое значение nil (тогда интерпретатор знает, что идентификатор обозначает переменную, а не имя метода).
- В Ruby непосредственно в языке реализованы многие шаблоны проектирования, так, например, «одиночка» (singleton) может быть (хотя и не обязан) реализован добавлением необходимых методов к одному конкретному объекту (см. ниже).
- Может динамически загружать расширения, если это позволяет операционная система.
- Имеет независимую от ОС поддержку невытесняющей многопоточности.
- Перенесён на множество платформ. Он разрабатывался на Linux, но работает на многих версиях Unix, DOS, Microsoft Windows (в частности, Win32), Mac OS, BeOS, OS/2 и т. д.
Как я пришёл в IT
Хотел бы начать с простой идеи: у меня нет АК-47 с серебряными пулями — есть только опыт и путь, который я прошёл.
Для многих стоит вопрос, как вообще войти в IT: с чего начать, какие есть плюсы, какие минусы. Лично я вообще начинал со станков — работал на производстве. В прямом смысле: крутил гайки, запускал станки токарно-фрезерные. Программировать начал в 28 лет и думал, что это уже возраст, когда не очень просто сменить профессию.
Начинал с HTML и CSS. Пытался писать на 4-й версии PHP по книгам Котерова, после чего это всё успешно забросил. В аспирантуре, когда уже работал с оборудованием, меня познакомили с Python — я даже пытался писать на нём интерпретатор истории станков, чтобы нашим руководителям можно было отслеживать историю нажатия клавиш.
Некоторые изменения в релизе
С выходом версии Crystal 1.0 в кортежах (tuples) теперь допускается обращение к элементам отличающихся типов по индексу, поскольку компилятор «знает», к какому типу относится каждый из них.
Стандартная библиотека подверглась зачистке от устаревших и не рекомендованных к использованию определений, в частности методов HTTP::Request, HTTP::WebSocket, HTTP::LogHandler; URI#full_path; Time::Span#duration.
Внесены изменения, касающиеся того, как обрабатываются cookie-файлы. Так, метод HTTP::Cookies.from_headers разделен на отдельные серверную и клиентскую версии. Значения и имена cookie больше не кодируются/декодируются по соображениям безопасности.
Некоторые из возможностей Crystal 1.0 реализованы, но официально пока не поддерживаются. В их числе моногопоточность (выполнение в среде с многоядерным процессором; активируется флагом -Dpreview_mt), поддержка Microsoft Windows, а также процессоров архитектуры ARM.
Особенности языка
Crystal, в отличие от Ruby, является языком со статической типизацией, то есть ошибки несоответствия типов переменных выявляются компилятором на стадии переработки кода программы в код машинный, а не в процессе его выполнения интерпретатором.
Инвестиции в столичный финтех резко выросли после многолетнего спада
Инновации и стартапы
Тем не менее, синтаксис языка не требует указания конкретных типов переменных или аргументов метода, поскольку компилятор способен их самостоятельно вывести при помощи соответствующего механизма. Язык решает проблему автоматического управления памятью за счет использования «консервативного» сборщика мусора (garbage collector) Boehm GC. Crystal поддерживает макросы, дженерики, а также перегрузку методов и операторов.
Как и Ruby, Crystal предлагает независимую от операционной системы реализацию многопоточности. Легковесные потоки в Crystal называются «файберами» или «волокнами» (от англ. fiber – волокно; – прим. CNews). Потоки, как и в языках Go и Clojure, взаимодействуют друг с другом при помощи каналов, без необходимости прибегать к использованию общей памяти или блокировкам.
В Crystal реализован интерфейс вызова функций из библиотек на языке C, причем синтаксис взаимодействия с ними достаточно прост, чтобы позволяет без особого труда создавать библиотеки-обертки, а не писать весь код «с нуля».
Метапрограммирование в реальной задаче
Из песочницы
Всем привет! В этой статье хочу рассказать про метапрограммирование на примере реальной часто встречающейся проблемы.
Когда кто то говорит про метапрограммирование у олдскульного кодировщика случается приступ ярости)
И на это есть причины так и на большом проекте может показаться безумием использовать метапрограммирование, так как код становится очень сложным для чтения. А если в проект включится специалист со стороны, то он и подавно ничего не разберет в этом мета-коде.
Но все не так просто, как говорится — нет плохих инструментов. В этой статьей я постараюсь показать на реальном рабочем примере как метапрограммирование поможет сделать ваш код чище, избавит от рутинных повторений. И заставит порадоваться мета-магии.
Синтаксис
На первом месте в Ruby стоит читабельность и простота, поэтому этот язык реально освоить за неделю на базовом уровне.
Из заметных штук — не нужно ставить в конце каждой команды точку с запятой и все вложенности обозначаются пробелами, точно так же как в Python.
Комментарии. Пишем в начале строки знак решётки #, и за ней — комментарий любой длины. Ещё можно написать комментарий в несколько строк:
Присваивание и математические операторы. Тут всё просто: присваивание — это знак равно «=», а математические операторы такие же, как в жизни — +, -, * и т. д.
Типы данных. Так как в Ruby всё объекты, то даже типы данных — это тоже объекты, а значит можно менять их свойства и поведение. По этой причине в Ruby очень мало встроенных типов данных. Если программисту понадобится что-то сложнее, чем встроенные типы, он легко может создать свой тип с нуля или на основе встроенного.
Целые числа: Fixnum (до 2³⁰) и Bignum. Второй тип может хранить в себе целые числа вообще любого размера, если для них хватит места в оперативной памяти.
Дробные числа: Float (число с плавающей запятой), Rational (рациональные числа) и Complex (комплексные числа с мнимой единицей).
Строка: String, последовательность байтов в кодировке UTF-8, могут быть любой длины.
Символ в Ruby — это не один какой-то символ, а просто любая строка, которая остаётся неизменной. Чтобы компьютер понял, что это символ, перед ним ставится двоеточие: symbol = :это_тоже_символ.
Диапазон — за него отвечает класс Range и в нём хранится непрерывная последовательность целых чисел:
d1 = 1..5 # Две точки — от 1 до 5 включительно.
d2 = 1…5 # Три точки — от 1 до 4, а 5 уже не входит в этот диапазон.
Условный оператор. Стандартная форма выглядит привычно:
if x > 0 then
puts «x — положительное число» #puts выводит значение на экран
elsif x < 0 then
puts «x — отрицательное число»
else
puts «x — нуль»
end
Но есть и несколько других вариантов условного оператора, например такой:
# Unless означает «Если условие не выполняется, то…»
unless x > 3 then
puts x.to_s # Выведет значение x, если оно НЕ больше трёх.
else
puts «очень много, не сосчитать»
end
Циклы. В Ruby семь видов циклов, потому что можно менять местами начало цикла и условия выхода из него, добавлять счётчики или оператор принудительной остановки. Вот как выглядят классические циклы со счётчиком, с предусловием и с постусловием:
Классы, объекты и методы. Так как Ruby полностью объектно-ориентированный язык, то в нём работает всё, что только есть в ООП:
- публичные и приватные методы,
- конструкторы,
- наследование (с помощью встроенных примесей),
- переопределение класса,
- и всё остальное, что вам только понадобится сделать с объектами или классами.
Миграции и работа с базой данных
Обыденная проблема многих проектов на PHP — невозможность понятными средствами и инструментами контроллировать структуру базы данных. Изменения в структуру зачастую вносятся вручную и прямо в базу. Из–за этого в проекте появляются многочисленные непонятные поля и таблицы, про которые уже никто ничего не помнит. В Ruby on Rails существуют штатные инструменты работы с базами данных — «миграции». Структура базы данных хранится в коде приложения и конфигурируется из проекта. Ваша структура будет всегда в репозитории, любое изменение структуры будет задокументировано и привязано к определенному коммиту в репозиторий.
Кеширование гемов Ruby в GitHub Actions с использованием ruby/setup-ruby или actions/cache
Перевод
Как, загружая гемы Ruby из кеша в GitHub Actions, ускорить запуск сборки проекта в этой системе непрерывной интеграции (CI)? Если суметь подготовить к работе все зависимости Ruby on Rails (RoR)-проекта в кратчайшие сроки, это позволит сократить время, необходимое на запуск тестов для такого проекта. Тут-то нам и пригодится кеширование. Гемы Ruby, нужные в проекте, можно кешировать средствами GitHub Actions, благодаря чему их, при запуске CI-конвейера, можно будет загрузить гораздо быстрее, чем прежде. Существует два способа кеширования гемов Ruby, применимых при использовании CI GitHub Actions. Один из них предусматривает применение , а второй — .
- actions/cache — это популярное решение для кеширования гемов Ruby.
- ruby/setup-ruby — это решение, направленное на установку конкретной версии Ruby и на кеширование гемов Ruby с помощью бандлера. Фактически, речь идёт о двух возможностях одного «экшена» (того, что в терминологии GitHub Actions называется «action»).
Пошаговый туториал по написанию Telegram бота на Ruby (native)
- Из песочницы
- Tutorial
Приветики-омлетики, как-то недавно у меня появилась идея написать Telegram бота на Ruby на специфическую тематику, в двух словах этот бот должен был поднимать онлайн чатах по средством развлекательных событий которые этим же ботом вбрасывались в чат в рандомное время с рандомным контекстом.
И вот пока я занимался написанием этого бота то познакомился с библиотекой (gem) telegram-bot-ruby, научился её использовать вместе с gem ‘sqlite3-ruby’ и кроме того проникся многими возможностями Telegram ботов чем и хочу поделится с уважаемыми читателями этого форума, внести вклад так сказать.
Много людей хочет писать Telegram боты, ведь это весело и просто.
На момент же написания своего бота я столкнулся с тем что сложно было найти хороший материал на тему Ruby бота для Telegram. Под хорошим я подразумеваю такой, где рассказывается про функционал изящные и красивый, такой, какой он есть в Telegram API.
Сразу кидаю ссылку на свой репозиторий по этому посту: here,Ибо во время тестирования были баги, которые я мог сюда и не перенести, вдруг чего смотреть прямо в репозиторий 🙂
В следствии прочтения этого топика, я надеюсь читатель сможет улучшить своего уже написаного бота, или прямо сейчас скачать Ruby, Telegram и создать что-то новое и прекрасное. Ведь как уже было сказано в «Декларации Киберпространства» :
Синтаксис и Семантика
puts "foo" foo => nil
Вывод – , но при этом значение – .
Печать
- печатает передаваемые аргументы
- печатает передаваемые аргументы с переводом на новую строку в конце
- inspects and prints its arg plus a newline
Продвинутая печать
- «красивая» печать параметров с переводом на новую строку
- еще более «красивая» печать, чем
- предоставляется gem’ом
- если , печатает
- Блоки также могут принимать параметры и возвращать значения
-
к примеру, итератор переносит каждый элемент массива в новый массив
"hello", "world"map { |string| string.upcase } => "HELLO", "WORLD" -
определяет блок
Опциональная пунктуация
-
Точки с запятой, скобки, и являются опциональными
-
Следующие выражения эквивалентны:
def inc(x) return x + 1; end def inc x x + 1 end def inc(x); x + 1; end def inc(x) x + 1; end
x = 1 + 2 x #=> 3 x = 1 + 2 x #=> 1
Решение: всегда оставлять операторы на верхней строке
x = 1 +
2
x #=> 3
Используйте круглые скобки только если они нужны
"Hello".gsub "H", "h"
=> "hello"
"Hello".gsub "H", "h".reverse
=> "hello"
"Hello".gsub("H", "h").reverse
=> "olleh"
Интерполяция строк
"boyz #{1 + 1} men"
=> "boyz 2 men"
- Любой Ruby-код может быть написан внутри фигурных скобок
- Он выполняется и результат записывается в строке
def add a, b a + b end add 2, 2 #=> 4
- Заметьте, ‘return’ не необходим
- также разрешено
class Calculator
def add(a,b)
a + b
end
end
calc = Calculator.new
calc.add(2, 2)
#=> 4
функция внутри класса называется методом
Сообщения и методы
- на объект ссылаются через переменную или литерал
- оператор «точка» () отсылает сообщение объекту
- объект принимает сообщение и вызывает метод
- если точка не написано, то сообщение принимает объект по умолчанию ()
Цепочки методов
- Цепочки методов – удобная и мощная особенность Ruby
- Она зависит от трех возможностей языка:
- У каждого выражения есть значеие
- Каждое значение является объектом
- Итераторы – циклы внутри методов
- Таким образом, методы можно вызывать для всего, в том числе для результата итератора
Пример
Дана строка:
s = "my dog is sick"
Без применения цепочки методов:
words = s.split
words = words.map{ |word| word.capitalize }
s = words.join(" ")
С применением:
s = "my dog has is sick"
s.split.map{ |word| word.capitalize }.join(" ")
Методы с восклицательным и вопросительным знаками
- имена методов могут заканчиваться на или
- значит, что объект вернет boolean-значение
- означает предостережение, метод, скорее всего, изменяет объект, для которого он вызывается
Идентификаторы
- — начинается со строчной буквы или символа нижнего подчеркивания, содержит строчные буквы, цифры, подчеркивания, стиль
- — начинается с
- — начинается с
- — начинается с
- или — должна начинаться с заглавной буквы
- — при помощи стиля
- — как локальная пермененная, но может оканчиваться на или или
- ключевые слова — окола 40 зарезервированных слов типа () или ()
- литералы — для сторк, для массивов, для хэшей и т. д.
Видимость переменных
var # локальная переменная (или вызов метода) @var # instance переменная @@var # переменная класса $var # глобальная переменная VAR # константа
и
- вставляет содержимое запрашиваемого файла в текущий
- делает методы запрашиваемого файла доступными в текущем
- игнорирует уже загруженные файлы
- опускает окончаение
- также может быть использован для расширений, написанных на языке C (, , и т. п.)
Почему Ruby и Ruby on Rails перспективны
Быстрый вход в индустрию. Ruby — один из наиболее простых для изучения языков. Существует множество обучающих ресурсов, а вся нужная информация содержится в open source, поэтому не требует дополнительных трат с вашей стороны — только если понадобится какое-то очень специфичное решение, но это вряд ли случится на начальном этапе.
Качественный вход. На Ruby очень просто изучать объектно-ориентированное программирование. Здесь проще читается код, проще приводятся примеры и проще само понимание кода — для новичка это плюс. В некоторых проектах доходит до того, что вы можете читать без скобок код и понимать, что он выглядит почти как обычный текст, за исключением некоторых уникальных программ, которые пролетают где-то в коде.
Высокая конкурентная мотивация. Я могу судить по Воронежу, где годовалый джуниор-разработчик на Ruby может просить зарплату в районе 90 тыс. руб. в месяц. Это достаточно серьёзные деньги. А на входе можно получать от 30 до 40 тыс. руб.
Если вы будете искать работу, то вы должны понимать, что Ruby on Rails — это комьюнити, где люди привыкли работать в стартапах. В 80% это будут небольшие компании, зарубежные или нет, и в меньшей степени — большие компании. Государственные компании также в последнее время переходят на разработку на Ruby on Rails. Они понимают, что платить джависту или дотнетчику за то, что он будет писать год — это очень дорого. Проще заплатить Ruby-разработчику, который стоит чуть подороже, но напишет решение за 2−3 месяца.
Возможность релокации. Здесь речь идёт о знании английского языка: если знаете английский на разговорном уровне или хотя бы можете переписываться, то ваша цена сразу растёт. Есть компании, которые работают на российский рынок и ограничения у таких русскоязычных компаний где-то в районе 3000 долларов. Если вы выйдете на уровень зарубежных компаний, то зарплата будет варьироваться от 2500 до 5000 долларов в американских компаниях. Поэтому советую как можно скорее начинать учить английский язык.
Читать ещё: «Где лучше всего жить и работать разработчику»
Opensource-головорезы. Open source — это не инхаус-разработка, а разработка на комьюнити: любой человек сможет прийти и оценить ваши наработки, а работодатели и заказчики очень часто требуют показать Github-профиль. Поэтому я советую не только завести аккаунт на Github, но и начать прокачивать его.
Культура и стандарты
Ruby on Rails — это фреймворк. Зачастую фреймворк не позволяет вам самодеятельность. Конечно же, в Ruby on Rails можно «изобрести свой велосипед» и программировать в любых направлениях, не опираясь на стандарты; но зачастую этого не требуется. Стандарты размещения файлов в проекте, стандарты написания кода в проекте, общие правила программирования в Ruby on Rails сильно структурируют любой проект. За счет этого проект становится читаемым. Вхождение в проект новичков происходит очень быстро. Опыт показывает, что любой новичок в проекте в первый же день работы делает свои первые полезные правки. За счет этого не считается большой проблемой, если разработку проекта изначально вела одна команда программистов, а поддержку проекта или доработку — совершенно другая. Проект на RoR априори понятен любому разработчику.
Про Open source и сообщество
Ruby on Rails сам по себе был написан как opensource-проект, где каждый может поучаствовать в разработке этого проекта. Когда входил в Ruby-мир, то работал с тремя ребятами, которые на тот момент находились в core team разработки Ruby on Rails. Сейчас они уехали работать за границу или же работают удалённо на иностранные компании — в этом им как раз очень помог open source.
У меня не было open source-портфолио. Всем молодым разработчикам я всегда говорю: если вас нет Github-аккаунта, то заводите как можно быстрее.
И сейчас вам советую: просто возьмите и зарегистрируйтесь на Github.
Поработав с Python и Pyramid, я понял, что есть более развитые языки, с более развитой инфраструктурой и более отзывчивым сообществом разработчиков. Например, у Ruby сейчас самое развитое комьюнити: его можно сравнить только с JavaScript. Можно сказать, что Ruby-сообщество создало стандарты для тестирования приложений и многие решения мигрировали потом в JavaScript, Python и другие языки.
Фреймворк Ruby on Rails сейчас самый достаточный, самый полный и развитый — так считаю я, да и другие ребята в сообществе. Сейчас уже больше идут наработки по улучшению узких мест и добавлению каких-то специальных фич фреймворка.
Кеширование
Кеширование проектов — один из важнейших этапов разработки крупного интернет–проекта. В PHP имеются различные варианты кеширования данных. Эти варианты и инструменты прикручиваются, пристраиваются, приделываются, прикрепляются сбоку. До сих пор в сообществе PHP нет единого мнения: что лучше использовать, как лучше кешировать данные, какими инструментами пользоваться.
Ruby on Rails в его базовой комплектации имеет штатные средства кеширования данных. На старте предоставляются инструменты, позволяющие реализовать кеширование данных на проекте. Вы можете кешировать целые страницы или же блоки кода. Можете кешировать результаты запросов и ActiveRecord–модели. Кешировать можно как при помощи memcached или redis, так и другими средствами. Для реализации кеширования на Ruby on Rails проекте вам в 95 процентах случаев не потребуется ничего кроме уже готовых и штатных решений.
Философия языка
Юкихиро Мацумото, создателю языка Ruby принадлежат следующие высказывания:
«Человек создан для творчества, и я всегда знал, что люблю творить. Увы, я обделён талантом художника или музыканта. Зато умею писать программы.»
«Я хочу, чтобы компьютер был моим слугой, а не господином, поэтому я должен уметь быстро и эффективно объяснить ему, что делать.»
Мацумото, фанат объектно-ориентированного программирования, мечтал о языке более мощном, чем Perl, и более объектно-ориентированном, чем Python. Основное назначение Ruby — создание простых и в то же время понятных программ, где важна не скорость работы программы, а малое время разработки, понятность и простота синтаксиса.
Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Однако в контексте Ruby это означает наименьшее удивление не при знакомстве с языком, а при его основательном изучении. Сам Мацумото утверждает, что целью разработки была минимизация неожиданностей при программировании для него, но после распространения языка он с удивлением узнал, что мышление программистов похоже, и для многих из них принцип «наименьшей неожиданности» совпал с его принципом.
Системы управления пакетами
Если вы не можете скомпилировать ваш собственный Ruby и не хотите
использовать сторонний инструмент для установки – вы можете
воспользоваться пакетным менеджером вашей операционной системы.
Некоторые участники сообщества Ruby убеждены, что никогда не стоит
пользоваться пакетными менеджерами для установки Ruby. Вместо этого
лучше воспользоваться другими инструментами.
Оставим все плюсы и минусы данного подхода за
границами данного текста, отметим лишь, что основной причиной данной
убежденности является то, что в пакетных менеджерах зачастую содержится
информация об устаревших версиях Ruby. Если вы хотите использовать
новейшую версию Ruby, убедитесь, что вы используете верное имя пакета
или воспользуйтесь инструментами описанными ниже вместо этого.
apt (Debian или Ubuntu)
Debian GNU/Linux и Ubuntu используют систему управления пакетами .
Вы можете использовать ее следующим образом:
Пакет установит Ruby версии 2.3.1, которая является последним
стабильным релизом.
yum (CentOS, Fedora, или RHEL)
CentOS, Fedora, и RHEL используют систему управления пакетами .
Вы можете использовать ее следующим образом:
Устанавливаемая версия обычно является последней версией Ruby, доступной
на момент выхода конкретной версии дистрибутива.
portage (Gentoo)
Gentoo использует систему управления пакетами .
По умолчанию, будут установлены версии 1.9 и 2.0, но доступны и другие версии.
Для установки конкретной версии, заполните в вашем .
Подробнее смотрите на сайте проекта Gentoo Ruby.
pacman (Arch Linux)
Arch Linux использует систему управления пакетами . Чтобы получить
Ruby, просто напишите следующее:
Это должно установить последнюю стабильную версию Ruby.
Homebrew (macOS)
На OS X El Capitan, Yosemite и Mavericks, Ruby 2.0 уже включены.
OS X Mountain Lion, Lion и Snow Leopard поставляются с версией Ruby 1.8.7.
Многие люди на macOS используют Homebrew как пакетный менеджер.
И это действительно просто – установить Ruby:
Это установит последнюю версию Ruby.
Ruby на Solaris и OpenIndiana
Ruby 1.8.7 доступен для Solaris 8-10 на Sunfreeware и
Blastwave. Ruby 1.9.2p0 также доступен на Sunfreeware,
но это все уже устарело.
Чтобы установить Ruby на OpenIndiana, пожалуйста, используйте
клиент Image Packaging System, или IPS. Это установит
последние бинарники Ruby и RubyGems прямо из сетевого репозитория
OpenSolaris для Ruby 1.9. Это просто:
Однако, сторонние инструменты могут быть хорошим способом получить
последнюю версию Ruby.
Другие дистрибутивы
На других системах, вы можете поискать репозиторий пакета Ruby
для пакетного менеджера вашего Linux дистрибутива, или же
сторонние инструменты могут стать хорошим выбором для вас.
Установщики
Если версия Ruby, предоставляемая вашей операционной системой
или пакетным менеджером, не актуальна, то вы можете установить новую версию
при помощи сторонних установщиков. Некоторые из них также позволяют установить
несколько версий Ruby в вашей системе и переключаться между ними. Если вы
планируете использовать как менеджер версий — то вам не нужен
отдельный установщик, он идет со своим.
ruby-build
— это плагин для , который позволяет
вам скомпилировать и установить разные версии Ruby в произвольные каталоги.
ruby-build может использоваться как отдельная программа без rbenv.
Он доступен для macOS, Linux и других UNIX-подобных операционных систем.
ruby-install
позволяет вам скомпилировать и установить
различные версии Ruby в произвольные каталоги. Существует также родственник
, который управляет переключением между версиями Ruby.
Он доступен для macOS, Linux и других UNIX-подобных операционных систем.
RubyInstaller
Для пользователей Windows существует отличный проект, помогающий
установить Ruby: RubyInstaller. Он предоставляет вам все,
что нужно для настройки полноценного окружения Ruby на Windows.
Просто скачайте его, запустите и все готово!
Ruby Stack
Если вы устанавливаете Ruby для того, чтобы воспользоваться Ruby on Rails,
вы можете использовать следующий установщик:
Bitnami Ruby Stack,
которые предоставляет полное окружение для разработки на Rails.
Поддерживает macOS, Linux, Windows, виртуальные машины и облачные сервисы.




