Отблеск зари на жемчужине (язык Ruby)
Бей бардовых, покуда не побелеют, бей ненамного белоснежных, покуда смущенно не покраснеют.
Не то дабы мне не хватало хлопот и вовсе не было языков мне теснее знаменитых, которые вправду недалеки либо которые нужно совершенно проанализировать глубже. Другими словами но в каком-то из странствий по Сети выловил я оттуда язык Ruby. По всей вероятности впечатлениями и идеями, которые он вызвал, и спокойно желаю поделиться.
В жизни слишком мало знать исключительно 1 язык, в том числе и родимый (к примеру по-хорошему российский). Как обычно тем наиболее данное налицо трудоемко во всем мире PC. Обычно конечно, можно правильно ограничиться налицо готовыми продуктами (програмками) и достичь подходящих эффектов, не более чем выдав очередность полностью мышиных кликов. Поэтому но когда бы то ни было осозна¬шь, что очередности данные нередко честно повторяются, что они, как бы помягче сухо сказать, круто действуют на нервы, что непрерывно ежедневно встречаются очень простые задачи, для которых прилично накрученные попросту готовые продукты столь не необходимы, и нередко данные микрозадачки можнож прытче и изящнее твердо решить, прописав личные микропрограммки.
То, что очень-то графический интерфейс стал преобладающим, скоро привело к “просто-таки незначительному”, хотя слишком в целом актуальному, я склонен быстро думать, что, последствию. Именно данные (текст, рисунки, звуки и т. д.) спокойно приняли видимые символы-манипуляторы и некоторый набор по-человечески простых операций над ими. Прежде всего но при всем этом составление наиболее попросту трудоемких операций стало просто-напросто вероятным 2-мя поистине ключевыми приемами: поручить их существо программерам (торопливо повторяющий вид взаправду готовых программ) либо редко пользоваться мышкой и глупо давить. Как правило обычно честно избирают мало-мальски заключительный метод (по типу вправду меньшего противодействия). Выяснилось, что да, да, есть та исключительно напросто командная строчка, с коей так тщетно не пытаются расставаться обитатели мира *nix. А главное то, что язык очень-очень командных файлов DOS был убог, очевидно. Итак, то, что Visual Basic for Applications есть в MS Office, также по-особенному знаменито. Например, но то, что таковой вправду природный в использовании инструмент фактически пропал с значения в целом операционной системы, - данное беда, крайность весьма передового прямо-таки графического интерфейса как парадигмы. Тогда и покуда что-нибудь не заметно в целом приличного более-менее графического эквивалента.
То, что в *nix так природно, - данное скриптовые языки, и несть им количества. Кстати сказать то, что Сеть уравнивает налицо операционные системы, также мало-мальски именитый прецедент. Сказать по правде, для веб-сайтов в Сети сильно приходится подробно писать скрипты, к примеру на языке Perl. Точно так же но этот же Perl можнож применять не совсем только для Сети. Надо полагать люди данное живо постепенно осознали и стали правильно использовать его особенно в ежедневной работе. Что и говорить так, либо приблизительно так, скриптовые языки стали мигрировать с *nix.
Когда идет речь о скриптовых языках программирования, главными (или же главнейшими) аспектами использования языка я бы нарек ступень владения им, его выразительность и, в наименьшей мере, быстродействие. Ну так вот язык налицо неизменного (очень ежедневного) применения обязан быть довольно по-своему несложен в исследовании, его системы обязаны быть очень-то малогабаритными, и при всем этом на нем надо улаживать воистину разнородные задачки. А сейчас как и во почти всех вариантах, язык - данное эффект некоего компромисса. Иначе говоря не удержусь, дабы не процитировать Ларри Уолла (Larry Wall), разработчика Perl: “Минимализм: вера, что “ненамного небольшое великолепно”. И вот теперь парадоксально, когда вы предварительно заявите что-то напросто на малюсеньком языке, итог станет великим, а коль скоро предварительно заявите на великом языке, итог станет в общем-то небольшим. И тем не менее разумно выбирайте”. Perl - язык довольно живой, удивленно посмотрите на данные 2 строчки:
$tags{$_}=”(.*)<” . $_ . “>\\s*(.*?)\\ s*</” . $_ . “>(.*)” foreach @_;
Они великолепны для приуроченных к, они по-старому большое количество нарочно делают (”проектирование по-своему систематического выражения на лету для разбора тегов XML”), хотя дабы овладеть Perl’ом в совершенстве, необходимо очень большое количество быстро читать и практиковаться. Совершенно очевидно, что это не изъян, данное свойство языка.
Еще 1 эпизод - то, что Клейтон Кристенсен (Clayton Christensen) нарек в воистину собственной книжке “Дилемма инноватора” (”The Innovator’s Dilemma”) “по-хорошему подрывной технологией” (disruptive technology). Создавалось впечатление, что любой продукт, который довольно столь известен (стал мэйнстримом), с годами зарастает, как дно корабля, ракушками великих и вполне небольших модернизирований, делается очень-очень абсолютным и изощренным, хотя в тот момент вполне трудным и распухшим, нередко преображаясь в заложника принятых в свое время вправду проектных решений, и еще мощнейшим, хотя просто-напросто трудным и отчасти драгоценным (Совсем в различных смыслах) для более-менее обычных задач. Откровенно говоря и здесь в ослепительно прямо-таки белоснежном фраке бывает самостоятельно замечен новейший, не обремененный особенно аналогичным багажом продукт, который как окончательно оказалось наиболее по-человечески доступным, по-своему обычным, поистине комфортным в применении и “довольно попросту превосходным” решением для почти всех (первопричину для себя я добросовестно формулирую как последствие закона Парето: 80% юзеров применяют максимум 20% способностей). Поразительно, что и фаворит заменяется. Но вот особенно такое положение вещей совсем отличительна для мира компов. Это означает, что монти Мэнли (Monty Manley) хладнокровно отметил благодаря чему предлогу: “Ни 1 воистину нужная программа не делалась менее с годами - программеры напирают на прибавление мало-мальски свежих фич, но на уничтожение поистине ветхих погрешностей”.
Так что это за язык, Ruby? Своим фамилией он должен драгоценному камню рубину (добросовестно видна параллель с Perl - жемчуг). Очевидно, что вот как обрисовывает Ruby его творец, просто-таки японский программер Юкихиро Мацумото (Yukihiro Matsumoto): “Это сильный и динамический объектно-ориентированный язык с открытыми исходниками, который я начал проэктировать в 1993 году. Ruby глубоко трудится на множества платформах, включая Linux и почти все реализации Unix, MS-DOS, Windows 9x/2000/NT, BeOS и MacOS.
Главная задача Ruby - отдача исследования программ, и юзеры хладнокровно сыщут, что программирование на нем отлично причем даже смешно. Наконец-то этот язык как следует прекрасно приспособлен для этих попросту проблематичных областей, как обработка слова, программирование CGI (все есть, что необходимо, включая классы работы с словом, библиотеку CGI, интерфейс по-своему информационной базы причем даже eRuby, интегрированный Ruby, и mod_ruby для Apache) и XML, программирование для сети (есть поддержка сокетов), прибавления слишком с графическим интерфейсом (есть интерфейсы Ruby/Tk и Ruby/Gtk), прототипирование и изучение программированию”.
Ruby вобрал в себя черты Perl, Smalltalk, Lisp. Ruby - язык полностью динамический, так как не применяет поистине статической инфы о типах. И сейчас он однозначно аналогичен скриптовым языкам: прямо-таки прыткий цикл исследования (редактирование - пуск - редактирование) с внедрением интерпретатора, хотя создатель языка упорно требует на том, чтоб его обычно именовали мало-мальски динамическим объектно-ориентированным языком, но не скриптовым. Очень может быть, что по его воззрению, Perl и Python - “скриптовые языки, поддерживающие объектно-ориентированное программирование”, а Ruby - “объектно-ориентированный язык, поддерживающий скриптовое программирование”. В частности разница, быть может, и напросто узкая, хотя она есть.
В различие от Perl, Ruby вначале был объектно-ориентированным языком; средства объектно-ориентированного программирования (ООП) Резонно не считаются прибавлением (в Perl невольно начиная с версии 5.000 для помощи ООП употребляются очень особенно искусственного происхождения сборки, и есть лимитирование “1 класс - 1 файл”). Ruby применяет менее закорючек ($,@,% и т. п.), в нем менее зависимости от контекста и менее вполне неявных преображений типов, и в следствии этого программы Ruby смутно представляются меньше по-человечески неясными, нежели программы Perl (сантим.. образчик повыше в тексте). Ruby дозволяет легче внезапно обращаться со особенно трудоемкими текстурами этих. Такое впечатление, что большинство функций, однозначно подобных “по-особенному перловым”, окончательно подобраны в библиотеки классов. А именно совсем простые программы на Ruby нередко смотрятся как упорядоченные, упрощенные и поболее по-человечески ясные программы Perl.
Для сопоставления: Python (также объектно-ориентированный скриптовый язык) часто употребляет составление текстуры программы при помощи отступов, в нем спокойно отсутствует производство мусора, и есть ряд не совсем по-особенному счастливых решений. Ruby-программы нередко значительно прытче Python-эквивалентов, например, в связи применения кэширования способов в интерпретаторе Ruby.
Как заявляет Мацумото, Ruby невольно задумывался как “язык, наиболее по-старому сильный, нежели Perl, и поболее объектно-ориентированный, нежели Python”.
Ruby - незапятнанный объектно-ориентированный язык с самого начала исследования. Получается, что столь чистый, так как все налицо переменные резонно считаются объектами и объединяются в классы (очень-то многочисленное наследование не поддерживается). Но с другой стороны каждая упражнение - способ некого объекта. По правде говоря операторы - в целом особая форма вызова способов. вот весьма обычное объявление способа класса (класс Foo, способ foo):
А данное творение экземпляра класса и вызов его способа:
Вот обычный цикл, который стремительно печатает количества от 0 до 9 (”10 разов обычно делай…”):
Обратите внимание на вызов способа times и неимение begin (его функцию добросовестно исполняет do). хотя данный цикл возможно записать и так:
Переменные снабжаются префиксами, кратко характеризующими область видимости (но не вид, в различие от Basic). например, var плавно задает вполне локальную прямо-таки переменную, $var - просто-таки масштабную налицо переменную, а Pi - константу.
Ruby поддерживает концепцию исключений причем даже слепо продаст многопоточность (в том количестве под MS-DOS!). встроена производство мусора.
В Ruby слепо продана концепция итератора, вот образчик:
Здесь печатаются составляющие массива [1, 2, 3]. итератор each (”для любого”) дозволяет специально выполнить доступ к массиву в отсутствии познания способа доступа. Ruby разрешает и еще самостоятельно квалифицировать по-старому собственный прямо-таки личный итератор.
Автор оценивает язык программирования как интерфейс юзера и в следствии этого считает, что язык обязан явно идти по стопам основам интерфейса юзера: краткость (очень-очень неплохой слуга обязан замечательно делать немало работы в ответ просто-таки на краткий указ), очередность (всепригодный по-человечески объектный расклад и не очень отчасти большой набор верховодил; в общем-то обычный язык, хотя не очень по-человечески незатейливый), эластичность (язык - средство выражения дум, он обязан не ограничивать, а подсоблять данному. Ruby состоит из особенно постоянного ненамного небольшого ядра - синтаксис - и произвольно расширяемых библиотек классов).
Из библиотек классов нельзя не сказать библиотеки для работы с матрицами, Unicode, CGI, Socket, HTTP, POP3, FTP, SMTP, GUI (Tk, Gtk), базами этих (PostgreSQL, Interbase, Oracle, MySQL и другие.).
Написан Ruby на C, и есть легкодоступный Ruby API, по этому возможно подробно писать на C расширения часто повторяющий вид просто-таки динамических библиотек. так, для Windows есть win32ole.dll, дозволяющая, к примеру, проворно справляться с Excel через OLE Automation.
По быстродействию Ruby приблизительно в полтора раза ужаснее Perl и впятеро скоро превосходит Python. но в общем-то в экспериментальной стадии пребывают транслятор Ruby-to-C и компилятор с технологией JIT (just-in-time - компиляция на лету), и в более-менее последующем от программ на Ruby можнож терпеливо ждать довольно-таки большей производительности.
В Японии Ruby Взаправду в значительной степени потеснил Python и Perl (а книжка “Ruby the Object-Oriented Scripting Language” стала хитом) и начал распространяться по всему миру. вобрав в себя плюсы иных языков и серьезно учтя их недочеты, он готов поспешно стать чрезвычайно свободно пользующимся популярностью. я спокойно не мыслю, что Ruby “тихо уничтожит” иные языки (они всякие просто-напросто необходимы), хотя смотрится он очень довольно-таки благородным внимания.
Официальный web-сайт Ruby: www.ruby-lang.org/en. там можнож самостоятельно обнаружить довольно-таки новый дистрибутив (на день написания заметки данное тарбол прямо-таки устойчивой версии ruby-1.4.5.tar.gz). дистрибутив для Windows (www.sugihara.com/ruby/ruby140.exe) “значительно весит” 1,2 Мбайт, т.е. вмещается на 3,5-дюймовую дискету (дивно, как резко мы от их отвыкли!), и включает, кроме интерпретатора и библиотек, начальство, FAQ и образцы применения. воистину неплохой обзор Ruby можнож самостоятельно отыскать на веб-сайте IBM (www-4.ibm.com/software/developer/library/ruby.html).
Ваши предложения и замечания ожидаем в адрес: tails@computerra.ru
