Программисты говорят о Ruby

advertisement
Некоммерческая организация «Ассоциация московских вузов»
Государственное образовательное учреждение
высшего профессионального образования
Московский государственный индустриальный университет
ГОУ ВПО МГИУ
Научно-образовательный материал
«Программисты говорят о Ruby»
Состав научно-образовательного коллектива:
Курасов Ю.В., ведущий инженер
Виноградова Л.А., ведущий инженер
Москва 2010 г.
Программисты говорят о Ruby
В этом разделе мы изложим собранные из различных источников
высказывания о языке Ruby, отложив на некоторое время рассмотрение
примеров, иллюстрирующих их. Большая часть вопросов, которые будут
затронуты, предполагает наличие определенных знаний у читателя в области
теории языков и объектно-ориентированного программирования. Легче всего
понять
Ruby
тем,
кто
знает
Smalltalk,
Lisp,
C,
C++
и
Perl.
<<Джентльменский>> набор из Perl, Java и C++ тоже является весьма
хорошей стартовой позицией для изучения Ruby.
Тем же, кто не может похвастаться подобными знаниями, весьма приятно
будет узнать, что

<<если для изучения языка Perl Вам нужно потратить, скажем, три
недели, то Python Вы изучите за неделю, а Ruby -- за один день!>>

<<Ruby отличается чрезвычайной предсказуемостью (``Princple of Least
Surprise'') -- ни на одном другом языке невозможно написать
достаточно большую программу и увидеть, что она работает с первой
попытки>>.
Во введении мы уже цитировали Юкихиро Мацумото -- создателя Ruby. Вот
что еще он сам говорит об этом языке. Итак, Ruby

имеет простой синтаксис;

поддерживает обработку исключений;

позволяет переопределять операторы;

является чисто объектно-ориентированным языком (complete, full, pure
object oriented language), в котором, в отличие от Java или Perl, все -объекты;

позволяет работать с целыми числами произвольной величины;

не требует объявления переменных;

использует префиксы (@, $, @@) для задания области видимости (scope)
переменных;

поддерживает многопоточное программирование.
Одной из первых работ, привлекших внимание к Ruby, была уже несколько
устаревшая статья Хала Фултона (Hal Fulton) <<Тридцать семь причин, по
которым мне нравится Ruby>>. Вот некоторые из них.
Ruby является динамическим языком. В отличие от статических языков,
подобных C++ или Java, методы и переменные в Ruby могут быть добавлены
или переопределены во время выполнения программы. Это позволяет,
например,
обойтись
без
директив
условной
компиляции
#ifdef,
необходимых для языка C. Здесь проявляется сходство Ruby с такими
языками, как Lisp и Smalltalk.
Ruby -- интерпретируемый язык. Так как это свойство отрицательно
сказывается на производительности, то хочется дать некоторые комментарии.
Во-первых (и это самое главное), быстрый цикл разработки является
важнейшим
достоинством,
недостатки. Во-вторых, хотя
которое
Ruby и
<<перевешивает>>
некоторые
не является катастрофически
медленным, в тех случаях, когда скорость абсолютно необходима, можно
написать часть кода на языке C. Наконец, в-третьих, никто не сказал, что
когда-нибудь не будет написан компилятор с языка Ruby.
В Ruby имеется возможность работы с регулярными выражениями. Когдато они использовались только в некоторых утилитах UNIX-систем (grep, sed,
vi). Затем, благодаря языку Perl, значительное число людей признало их
мощь при обработке текстов. Ruby дает возможность использовать эту силу с
еще большей легкостью.
Помните известную фразу Исаака Ньютона <<Если я видел дальше, чем
другие, то только потому, что стоял на плачах гигантов>>? Ruby, безусловно,
<<стоит на плечах гигантов>>, среди которых Smalltalk, CLU, Lisp, C, C++,
Perl, Kornshell и другие языки. В Ruby собрано все лучшее, что накоплено
человечеством в области языков программирования. При этом соблюдены
следующие три принципа: не изобретать колесо, не чинить не сломанное,
использовать имеющиеся у программистов знания и опыт. В Ruby
пригодятся и знания о файлах и потоках из ОС UNIX, и спецификации
функции printf из стандартной библиотеки ввода/вывода языка C, и
умение работать с регулярными выражениями в Perl.
Ruby -- язык написания сценариев (scripting language). Не следует считать,
что это характеризует язык, как <<игрушечный>> или недостаточно
мощный. Подобный язык должен быть интерпретируемым и способным
заменить командные файлы, взаимодействующие с операционной системой и
управляющие поведением других программ.
Ruby -- универсальный и гибкий язык. С его помощью можно одинаково
изящно реализовать как то, что традиционно делается с помощью
интерпретатора Kornshell, так и то, что пишется обычно на C.
По простоте и богатству возможностей работы со строками и массивами
языку Ruby нет конкурентов. Массивы являются динамическими, с ними
можно оперировать как с множествами, стеками и очередями. Есть и
ассоциативные массивы, работа с которыми также чрезвычайно проста и
удобна.
Для языка Ruby уже написано большое число библиотек. Потоки, сокеты,
объекты, сохраняемые между запусками программ, CGI-программы, базы
данных, GUI -- все это можно использовать, программируя на Ruby.
Дэйв Томас (Dave Thomas) и Энди Хант (Andy Hunt), соавторы первой книги
по Ruby, вышедшей на английском языке, в интервью журналу ``Dr. Dobb's
Journal''
(январь
2001)
говорят:
<<Возьмите
чисто
объектно-
ориентированный язык Smalltalk и избавьтесь от его причудливого
синтаксиса. Добавьте комфорт и мощь языка Perl, но без всяких специальных
случаев и магических преобразований. Заверните получившееся в ясный
синтаксис, основанный частично на языке Eiffel, и добавьте понемногу от
Scheme, CLU, Sather и Common Lisp. У вас получится Ruby.>> Фактически
это означает, что Ruby -- естественный и практически неизбежный результат
эволюции современных языков программирования. Авторы данной статьи
согласны с такой точкой зрения.
Хочется подчеркнуть, что Ruby не является панацеей для решения всех
проблем программистов. Не следует отказываться от использования языков
Java и C++ там, где их применение оправдано. С другой стороны, не разумно
недооценивать возможности практического применения Ruby в реальных
проектах.
Послушаем теперь высказывания лучших представителей программистского
сообщества, которые сравнивают Ruby с другими языками.
Начнем с языка Java:

Ruby -- интерпретируемый язык;

в Ruby все является объектом (в Java есть типы int и Integer, что
создает определенные неудобства);

переменные в Ruby не являются статически типизированными и не
требуют объявления;

модули (modules) в Ruby позволяют с помощью <<миксинов>> (mixins)
конструировать подобие интерфейсов (interfaces) языка Java, допуская
при этом в них реализацию методов.
Теперь сравним с языком Perl:

Ruby значительно легче освоить, на нем легче программировать, а
написанные программы проще сопровождать;

в Ruby префиксы (@, $, @@) описывают область видимости (scope), а не
тип переменной;

Ruby позаимствовал из языка Perl регулярные выражения, переменную
$_ и многое другое.
Завершим сопоставление Ruby с другими языками рассмотрением одного из
ближайших <<конкурентов>> -- языка Python. Это сравнение особенно
интересно потому, что именно Python рассматривается сейчас многими, как
хороший кандидат на роль первого языка программирования. Итак, сравним
Ruby с языком Python:

управляющие конструкции и методы в языке Ruby завершаются
ключевым словом end, в то время как Python использует так
называемый <<двумерный>> синтаксис, когда признаком завершения
является изменение количества лидирующих пробелов в очередной
строке программы;

вместо self в Ruby для обозначения переменных экземпляра
используется префикс @;

в Ruby, в отличие от языка Python, понятия типа и класса являются
синонимами;

Python не поддерживает наследования и не позволяет добавлять
методы к существующим типам;

используемый в Ruby алгоритм сборки мусора позволяет проще писать
реализации методов на языке C;

расширения для Ruby, написанные на C/C++ позволяют определять
новые классы;

зачастую Ruby быстрее, чем Python.
И вновь дадим слово создателю языка. Его высказывание о планах
дальнейшей работы над Ruby, выраженное в виде одной из управляющих
конструкций языка, позволит нам плавно перейти к рассмотрению примеров
реальных программ.
loop do
read and reply mails
write code
write document/article/book
write code
end
Download