Почему ruby

Библиотеки[править | править код]

Стандартная библиотекаправить | править код

Основные встроенные классы Руби  

Название Описание Версия
Вершина иерархии классов Руби. 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, виртуальные машины и облачные сервисы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *