Ruby за 20 минут: Введение

6 Сен
2011

Доброго времени суток!

Введение


Однажды, я сидел за своим ноутбуком и верстал. Должен сразу сказать, что я ориентированный web-программист. Пишу сайты и веб-приложения на замечательном языке — Ruby. И да, я когда-то тоже быдлокодил писал на PHP.
И вдруг я вспомнил о существовании учебника, по которому я, собственно начал изучать Ruby. Всё-таки она существует — любовь с первой строчки первого взгляда. И во всём виноват он — Ruby in Twenty Minutes. Хотя, назвать его учебником, у меня не повернётся язык. Чтобы не вводить новичков, которые собираются писать на Ruby, в заблуждение, я скажу, что это всего-лишь отправная точка. Тем не менее, советую почитать.
Данный топик является вольным переводом этого недоучебника, а также некоторым дополнением к нему.
Внимание!
Этот топик был написан в целях обучения тех, кому это действительно нужно, а не тем, кто знает данный материал.
Итак, поехали.
Для начала неплохо было бы почитать о Ruby в Wikipedia, но чтобы вам не ходить туда-сюда, выделю самое главное.

Что же такое Ruby


image
Ruby — динамический, рефлективный, интерпретируемый высокоуровневый язык программирования для быстрого и удобного объектно-ориентированного программирования. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Ruby близок по особенностям синтаксиса к языкам Perl и Eiffel, по объектно-ориентированному подходу — к Smalltalk. Также некоторые черты языка взяты из Python, Лисп, Dylan и CLU.

История его создания


Создателем Ruby является Юкихиро Мацумото (Matz), который интересовался языками программирования ещё будучи студентом, но идея о разработке нового языка появилась позже. Ruby начал разрабатываться 24 февраля 1993 года и вышел в свет в 1995 году.
Название навеяно языком Perl, многие особенности синтаксиса и семантики из которого заимствованы в Ruby (от англ. pearl — «жемчужина», ruby — «рубин»).
Целью разработки было создание «настоящего объектно-ориентированного», лёгкого в разработке, интерпретируемого языка программирования.
Из письма автора:
    Ruby родился 23 февраля 1993 года. В тот день я беседовал со своим коллегой о возможности существования объектно-ориентированного сценарного языка. Я знал Perl (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть). А объектно-ориентированный интерпретируемый язык казался многообещающим. В то время я знал Python. Но он мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой над языком. Мне, как языковому маньяку и фанату объектно-ориентированного программирования с пятнадцатилетним стажем, хотелось, чтобы был истинно объектно-ориентированный, простой в использовании язык. Я пытался найти такой язык, но его не было.
    Тогда я решил его создать. Прошло несколько месяцев, прежде чем интерпретатор заработал. Я добавил в мой язык то, что мне хотелось — итераторы, обработку исключений, автоматическую сборку мусора. Затем я переорганизовал свойства Perl и реализовал их как библиотеку классов. В декабре 1995 года я опубликовал Ruby 0.95 в японских новостных группах. С тех пор появились сайты, списки рассылок. В списках рассылок идут жаркие обсуждения. Самый старый список сейчас содержит 14 789 писем.

В Японии Ruby стал популярным с момента появления первой общедоступной версии в 1995 году, однако наличие документации только на японском языке сдерживало его дальнейшее распространение. Лишь в 1997 году появилось описание Ruby на английском языке, а в 1998 году открылся форум «ruby-talk». Это положило начало росту известности языка в остальном мире. Издано несколько книг на различных языках, в том числе на русском. Сейчас Ruby входит в большинство дистрибутивов ОС Linux, а также доступен для скачивания пользователям других операционных систем.

Его философия


Matz, фанат объектно-ориентированного программирования, мечтал о языке, более мощном, чем Perl, и более объектно-ориентированном, чем Python. Основное назначение Ruby — создание простых и в то же время понятных программ, где важна не скорость работы программы, а малое время разработки, понятность и простота синтаксиса.
Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Однако в контексте Ruby это означает наименьшее удивление не при знакомстве с языком, а при его основательном изучении. Сам Matz утверждает, что целью разработки была минимизация неожиданностей при программировании для него, но после распространения языка он с удивлением узнал, что мышление программистов похоже и для многих их принцип «наименьшей неожиданности» совпал с его принципом.
Ruby также унаследовал идеологию языка программирования Perl в части предоставления программисту возможностей достижения одного и того же результата несколькими различными способами. Люди различны, и им для свободы необходима возможность выбирать. «Я предпочитаю обеспечить много путей, если это возможно, но поощрять или вести пользователей, чтобы выбрать лучший путь, если это возможно». Впрочем, данный подход приводит к тому, что человек, анализирующий чужой код, должен знать все «пути». Вряд ли он согласится, что выполняется «принцип наименьшей неожиданности», когда один и тот же метод реализован тремя разными способами.
Одной из основных целей разработки было освобождение программистов от рутинной работы, которую компьютер может выполнять быстрее и качественнее. Особое внимание, в частности, уделялось будничным рутинным занятиям (обработка текстов, администрирование), и для них язык настроен особенно хорошо.
В противовес машинно-ориентированным языкам, работающим быстрее, целью этой разработки был язык, наиболее близкий к человеку. Любая работа с компьютером выполняется людьми и для людей, и необходимо заботиться в первую очередь о затрачиваемых усилиях людей. Язык позволяет максимально быстро и просто для человека выполнить задачу, хотя, возможно, это и потребует дополнительного времени работы компьютера.
Принципы программирования и дизайна языка иногда выделяются в термин «Путь Руби» (от англ. Ruby Way). Хэл Фултон выделяет такие принципы, как «просто, но не слишком просто», «принцип наименьшего удивления», вторичность скорости работы программы, динамичность, простые строгие правила, выполнение которых не доходит до педантизма, потребность создавать полезные и красивые программы как причина программирования. В целом они не имеют точной формулировки и иногда этот термин используется для критики.

Что же насчёт семантики


Ruby — полностью объектно-ориентированный язык. В нём все данные являются объектами, в отличие от многих других языков, где существуют примитивные типы. Каждая функция — метод.
Переменные Ruby передаются по ссылке. Для программиста, привычного к распространённым гибридным языкам программирования, некоторые эффекты такого решения могут показаться неожиданными.
Пример:
a = "Blogoblog"
b = a
puts b             #=> "Blogoblog"
a[5] = 'a'
puts b             #=> "Blogablog"

При изменении значения переменной a, неявно изменилось и значение b, так как они содержат ссылку на один объект. То есть механизм присваивания действует одинаково для всех объектов, в отличие от языков типа C, Object Pascal, где присваивание может означать как копирование значения, так и копирование ссылки на значение.
Ruby не поддерживает множественное наследование, но вместо него есть мощный механизм примесей. Все классы (напрямую или через другие классы) выведены из класса Object, следовательно, любой объект может использовать определённые в нём методы (например, class, to_s, nil?). Процедурный стиль также поддерживается, но все глобальные процедуры неявно являются закрытыми методами класса Object.
Ruby является мультипарадигменным языком: он поддерживает процедурный стиль (определение функций и переменных вне классов), объектно-ориентированный (всё — объект), функциональный (анонимные функции, замыкания, возврат значения всеми инструкциями, возврат функцией последнего вычисленного значения). Он поддерживает отражение, метапрограммирование, информацию о типах переменных на стадии выполнения.

Возможности Ruby, которые не безграничны


  • Имеет лаконичный и простой синтаксис, частично разработанный под влиянием Ада, Eiffel и Python.
  • Позволяет обрабатывать исключения в стиле Java и Python.
  • Позволяет переопределять операторы, которые на самом деле являются методами.
  • Поддерживается добавление методов в класс и даже в конкретный экземпляр во время выполнения программы.
  • Не поддерживает множественное наследование, но вместо него может использоваться концепция «примесей», основанная в данном языке на механизме модулей.
  • Содержит автоматический сборщик мусора. Он работает для всех объектов Ruby, в том числе для внешних библиотек.
  • Создавать расширения для Ruby на Си очень просто частично из-за сборщика мусора, частично из-за несложного и удобного API.
  • Поддерживает замыкания с полной привязкой к переменным.
  • Поддерживает блоки кода (код заключается в { … } или do … end). Блоки могут использоваться в методах или преобразовываться в замыкания.
  • Целые переменные в Ruby автоматически конвертируются между типами Fixnum (32-разрядные) и Bignum (больше 32 разрядов) в зависимости от их значения, что позволяет производить целочисленные математические расчёты со сколь угодно большой точностью.
  • Не требует предварительного объявления переменных, но для интерпретатора желательно, чтобы переменным присваивалось пустое значение nil (тогда интерпретатор знает, что идентификатор обозначает переменную, а не имя метода). Язык использует простые соглашения для обозначения области видимости. Пример: просто var — локальная переменная, @var — переменная экземпляра (член или поле объекта класса), @@var — переменная класса, $var — глобальная переменная.
  • В Ruby непосредственно в языке реализованы многие шаблоны проектирования, так, например, «одиночка» (singleton) может быть (хотя и не обязан) реализован добавлением необходимых методов к одному конкретному объекту.
  • Может динамически загружать расширения, если это позволяет операционная система.
  • Имеет независимую от ОС поддержку невытесняющей многопоточности.
  • Перенесён на множество платформ. Он разрабатывался на Linux, но работает на многих версиях Unix, DOS, Microsoft Windows (в частности, Win32), Mac OS, BeOS, OS/2 и т.д.

Реализации


Для Ruby существуют несколько реализаций: официальный интерпретатор, написанный на Си, JRuby — реализация для Java, интерпретатор для платформы .NET — IronRuby, Rubinius — написанная в основном на Ruby и базирующаяся на идеях Smalltalk-80 VM, MagLev — другая базирующаяся на Smalltalk разработка от компании Gemstone, Blue Ruby — реализация Ruby для виртуальной машины ABAP, MacRuby — реализация для Mac OS с фокусом на максимальную интеграцию с возможностями операционной системы.
Официальный интерпретатор портирован под большинство платформ, включая Unix, Microsoft Windows (в том числе Windows CE), DOS, Mac OS X, OS/2, Amiga, BeOS, Syllable, Acorn RISC OS, а также многие другие ОС.
Для Windows существует RubyInstaller for Windows. И для тех, кто брезгует не любит пользоваться Windows, но пришлось, найдётся вариант — есть возможность запуска под Cygwin для большей совместимости с Unix.
P.S. Изначально я планировал уложить учебник в статью, но, как оказалось, зря. Мною было принято решение о разделении учебника на части: можно более удобно подать материал, со всеми необходимыми объяснениями и комментариями — так что, «Продолжение следует…».
P.P.S. C просьбой что-либо объяснить или прислать учебник, вы можете обратиться на мой e-mail: rubyappup@gmail.com.
До скорых встреч!
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх