Язык программирования Ruby
Ruby — динамичный, объектно-ориентированный язык программирования общего назначения. На его фреймворке, Ruby on Rails, созданы веб-приложения таких крупных компаний, как AirBnB, Twitter и Netflix. Руби отличается простым синтаксисом и довольно высокой кроссплатформенностью, а также нестрогой типизацией переменных. За эти и другие особенности его полюбили многие программисты.
История создания
Ruby был представлен публике японским программистом Юкихиро Матцумото в 1995 году, и поначалу распространялся в основном среди японских разработчиков. В конце 90-х появилась первая официальная документация Ruby на английском языке, и так началась его всемирная популярность. Версия языка Ruby 1.8.0 вышла в 2005 году, а при релизе версии 1.9 Матцумото решил провести эксперимент и отошел от обратной совместимости с предыдущими итерациями. Такой шаг был необходим, чтобы исправить главный недостаток языка — низкую производительность. В итоге скорость обработки информации возросла в несколько раз, а с тем возрос и интерес к платформе. В 2018 году вышла еще более производительная версия Ruby 2.6, поддерживающая динамическую компиляцию данных. Сейчас язык и его основной фреймворк Ruby on Rails продолжают развиваться. Вокруг платформы уже сложилось широкое сообщество разработчиков, сформировавших свои принципы и “правила хорошего тона” для написания кода на Руби.
Сферы применения
Ruby, за счет своей мультипарадигмальности, используется в разных целях. На нем пишут биржевое ПО, программы для обеспечения безопасности и прочий коммерческий софт. Интерпретатор языка работает на любых платформах — от Windows и MacOS до Linux и Unix. Фреймворки сделали Руби особенно популярным в веб-среде. На этом языке программисты пишут серверную часть веб-приложений. При этом архитектура приложения в Ruby on Rails строится по принципу MVC. Вся система разбивается на три независимые, но взаимодействующие части — модель (общая логика и алгоритмы), представление (пользовательский интерфейс) и контроллер (средство для ввода данных). “Рельсы” (так часто называют фреймворк в русскоязычной среде) задали своего рода стандарт для других веб-сред. В Laravel или Django тоже есть бесшовная интеграция с базами данных, миграции и MVC. В RnR, кроме прочего, реализовано соглашение по конфигурации. Согласно ему, новые конфигурации применяются только в случаях, не предусмотренных официальной спецификацией.
Особенности языка
- Лаконичный синтаксис.
Ruby унаследовал свой синтаксис от языков Perl и Python. Команды в нем выглядят гораздо проще, чем в С++ и C#, и понятны даже начинающим разработчикам. В целом код на Руби не занимает много места и легко оптимизируется. Сокращается и время работы программиста, что немаловажно для заказчиков. - Мультипарадигмальность.
Ruby сочетает объектно-ориентированный, структурный и функциональный подходы программирования. Но основной упор автор языка все же делал на ООП. В языке используются классы, итераторы, замыкания и прочие атрибуты. - Динамическая типизация.
Программист не присваивает переменной конкретный тип вручную. На основе характерных используемых методов Руби сам определяет, числовая или строчная перед ним переменная. В среде программистов это называется принципом duck typing. Этот принцип предполагает, что если объект крякает и плавает как утка, с наибольшей вероятностью это и есть утка. - Интерпретируемость.
У Ruby нет компилятора, который целиком переводит написанную программу в машинный код для обработки. Вместо него используется интерпретатор, который считывает команды последовательно строка за строкой. Такой подход делает язык гибким и полностью кроссплатформенным. - Блочная система.
Блок — это отдельный кусок кода, который можно напрямую встроить в определенный метод или функцию. Передача контроля блоку осуществляется через специальную команду — yield. Блочный подход делает код более читаемым и предсказуемым. За счет блоков код на Ruby легче поддается доработкам. - Многопоточность.
Руби способен выполнять несколько задач параллельно. Это повышает производительность программы. При этом многопоточность не зависит от операционной системы, так как потоки выполняются интерпретатором.
Преимущества и недостатки
У Руби есть несколько общих плюсов в сравнении с другими языками. Все они исходят из особой философии автора проекта.
- Принцип наименьшего удивления.
Юкихиро Матцумото проектировал свой язык так, чтобы программы на нем максимально отвечали ожиданиями разработчиков и выдавали как можно меньше “сюрпризов”. В идеале код на Руби должен быть приближен к обычной инструкции на английском языке. - Широта применения.
Хоть сейчас Ruby чаще всего используется в веб-среде и настройке серверов, это далеко не все, на что он способен. На нем пишут полноценные десктопные приложения и даже мобильное ПО. Ограничения, конечно, есть, но они незначительны. - Поддержка сообщества.
Руби — платформа с открытым кодом. Сами пользователи делают ее лучше. Один из главных принципов “рубистов” — программа должна быть структурированной и понятной с первого прочтения. При этом опытные программисты охотно идут навстречу новичкам и помогают им освоить все тонкости языка.
Все перечисленные плюсы языка, к сожалению, влекут за собой и очевидные недостатки.
- Невысокая производительность.
Первые версии Ruby отличались низкой скоростью обработки данных. Компилированные языки справлялись с этой задачей гораздо быстрее. В последующих релизах производительность Руби была повышена. Но даже сейчас для разработки RTA приложений, где необходима мгновенная реакция на действия пользователя, язык не применяется. - Нет обратной совместимости версий.
На такой шаг создатели языка пошли осознанно, чтобы платформа могла развиваться независимо от своего прошлого. В итоге проект, созданный на более ранних релизах, сложно перевести на новую версию языка без существенных доработок. Проблему представляет также то, что разные библиотеки языка могут быть несовместимы между собой.
Некоторые фреймворки и библиотеки Ruby могут не работать на определенных платформах, хоть сам язык и считается кроссплатформенным. - Ресурсоемкость.
Интерпретатор Руби затрачивает значительное количество ресурсов системы на обработку данных программы. По этой причине разработка на Ruby для маломощных процессоров фактически не практикуется. - Относительная сложность освоения.
Хоть синтаксис языка довольно понятен, новичкам часто бывает непросто освоить саму логику построения программ. Специалисты рекомендуют поработать с другими ООП языками перед изучением Ruby. После этого писать на новой платформе будет на удивление легко и приятно. - Работа с памятью.
Если говорить упрощенно, Ruby разбивает память на участки. Часто случается так, что некоторые из выделенных участков пустуют, и программа занимает больше места, чем могла бы.
Перспективы Ruby
Мем “Ruby мертв” давно распространен среди программистов. Но это лишь шутка. В реальности Руби пользуется спросом как у стартапов, так и у крупных компаний с именем. Первые выбирают технологию из-за относительно быстрой и дешевой разработки. MVP (минимально жизнеспособный продукт) на Руби можно собрать буквально за несколько месяцев. Большие компании делают сайты и приложения на Ruby из-за его стабильности и легкой доработки программ.
Можно предположить, что авторы языка продолжат совершенствовать производительность платформы, чтобы расширить возможности ее применения.
Примеры кода
Стандартная “первая программа” на Ruby выглядит максимально просто и занимает всего одну строку.
Просто и изящно в Ruby выглядит вывод факториалов чисел от 1 до 10.
n = 1 10.times do |i| n *= i + 1 puts n end
Метод *= означает умножение с присваиванием результата правому множителю. То есть x*=y означает то же самое, что x=x*y. В примере строка n *= i + 1 будет равна n =n*( i + 1).
Из примера также видно, что переменная i объявляется прямо в начале цикла, а не до него.
Рассмотрим ввод данных с клавиатуры в Ruby. Для этого напишем код, вычисляющий площадь треугольника с заданными сторонами.
puts "Введите длину:" l=gets.chomp.to_f puts "Введите ширину:" w=gets.chomp.to_f area=l*w puts "Площадь треугольника равна #"
Метод gets принимает значение с клавиатуры. Метод chomp необязателен, он переводит каретку ввода на новую строку.
Попробуем также написать собственные методы на Ruby. В нашем простом примере метод будет выводить на экран два слова. При этом первый раз аргументы метода мы зададим сразу, а во второй — при его вызове.
def demo(a1 = "Привет", a2 = "Мир") puts " #" puts " #" end demo demo "Hello", "World"
Метод всегда начинается с команды def и заканчивается командой end. Пустой вызов в пятой строке примера выводит заранее заданные аргументы из первой строки. В шестой строке мы сами задаем аргументы.
Заключение
Ruby — это язык, который, согласно высказыванию его создателя, “создан, чтобы сделать программистов счастливее”. Многие разработчики согласны с этим высказыванием. Благодаря легко читаемому синтаксису, динамической типизации и встраиваемым блокам код на Руби получается компактным и эффективным.
Фреймворк Ruby on Rails сделал язык популярным средством для разработки серверной части сайтов и задал общий стандарт для подобного рода фреймворков.
В ближайшее время Руби будет продолжать свое развитие, сокращая влияние недостатков и усиливая достоинства.