Docsity
Docsity

Подготовься к экзаменам
Подготовься к экзаменам

Учись благодаря многочисленным ресурсам, которые есть на Docsity


Получи баллы для скачивания
Получи баллы для скачивания

Заработай баллы, помогая другим студентам, или приобретай их по тарифом Премиум


Руководства и советы
Руководства и советы

Особенности Python реферат по программированию и компьютерам , Сочинения из Программирование

Особенности Python реферат по программированию и компьютерам

Вид: Сочинения

2016/2017
Специальное предложение
30 Баллы
Discount

Предложение без ограничения по времени


Загружен 11.04.2017

refbank18806
refbank18806 🇷🇺

4

(6)

12 документы

1 / 29

Toggle sidebar
Discount

Специальное предложение

Сопутствующие документы


Частичный предварительный просмотр текста

Скачай Особенности Python реферат по программированию и компьютерам и еще Сочинения в формате PDF Программирование только на Docsity! Оглавление Введение………………………………………………………………….…….3 История……………………………………………………………...………….3 Влияние других языков на Python…………………………………………....4 Портируемость………………………………………………………………...5 Типы и структуры данных…………………………………………………….5 Синтаксис и семантика………………………………………………………..6 Операторы……………………………………………………………………...6 Выражения……………………………………………………………………..7 Имена…………………………………………………………………………...8 Строки документации…………………………………………………………9 Директивы……………………………………………………………………...9 Интерактивный режим………………………………………………………...9 Объектно-ориентированное программирование…….……………………..10 Функциональное программирование……………………………………….11 Модули и пакеты……………………………………………………………..11 Интроспекция………………………………………………………………...11 Обработка исключений………………………………………………………12 Итераторы…………………………………………………………………… 13 Генераторы………………………………………………………………….. 13 Управление контекстом выполнения……………………………………… 13 Декораторы………………………………………………………………….. 14 Другие возможности………………………………………………………... 14 Библиотеки…………………………………………………………………... 15 Модули расширения и программные интерфейсы……………………….. 15 Графические библиотеки…………………………………………………… 17 Профилирование и оптимизация кода…………………………………….. 17 Сравнение с другими языками……………………………………………... 19 Достоинства языка…………………………………………………………. 20 Недостатки…………………………………………………………………... 21 Отсутствие статической типизации………………………………………... 22 Невозможность модификации встроенных классов……………………… 22 Глобальная блокировка интерпретатора (GIL)…………………………… 23 Реализации…………………………………………………………………... 24 Python 3.0……………………………………………………………………. 24 Специализированные подмножества/расширения Python………………. 25 Применение………………………………………………………………….. 25 Краткая история Ruby………………………………………………………. 26 Программисты говорят о Ruby…………………………………………….. 27 Сравнение Ruby с другими языками………………………………………. 30 Список литературы…………………………………………………………. 32 Введение Python ( 0 30 1 0 3 0 1пайтон, питон) — мультипарадигменный язык программирования высокого уровня с динамической типизацией, автоматическим управлением памятью и удобными высокоуровневыми структурами данных, такими как словари (хеш-таблицы), списки, кортежи. Большая часть реализаций, в том числе и референсная CPython, — интерпретаторы. Поддерживает классы, модули (которые могут быть объединены в пакеты), обработку исключений, а также многопоточные вычисления. Питон обладает простым и выразительным синтаксисом. Язык поддерживает несколько парадигм программирования: структурное, объектно-ориентированное, функциональное и аспектно- ориентированное. CPython существует для большинства активно используемых платформ. Он распространяется свободно под очень либеральной лицензией, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные . Текущая версия 2.5.1 вышла 18 апреля 2007 года. Есть реализации интерпретаторов для JVM, MSIL (в том числе с возможностью компиляции), LLVM и других. Python — активно развивающийся язык программирования, новые версии (с добавлением/изменением языковых свойств) выходят примерно раз в два с половиной года. Вследствие этого и некоторых других причин на Python отсутствуют ANSI, ISO или другие официальные стандарты, их роль выполняет CPython. История Питон создал в начале 1990-х гг. сотрудник голландского института CWI Гвидо ван Россум (Guido van Rossum). Для распределенной ОС Amoeba требовался расширяемый скриптовый язык, и Гвидо начал писать Питон на досуге, заимствовав некоторые наработки для языка ABC (Гвидо участвовал в разработке этого языка, ориентированного на обучение программированию). Затем язык начал свободно распространяться через Интернет и понравился другим программистам. С самого начала Питон проектировался как объектно- ориентированный язык. Все объекты делятся на ссылочные и атомарные. К атомарным относятся int, long, complex и некоторые другие. При присваивании атомарных объектов копируется их значение, в то время как для ссылочных копируется только указатель на объект, таким образом обе переменные после присваивания используют одно и то же значение. Ссылочные объекты бывают изменяемые и неизменяемые. Например, строки и кортежи являются неизменяемыми, а списки, словари и многие другие объекты — изменяемыми. Кортеж в Питоне является, по сути, неизменяемым списком. Синтаксис и семантика Язык обладает чётким и последовательным синтаксисом, продуманной модульностью и масштабируемостью, благодаря чему исходный код написанных на Питоне программ легко читаем. Операторы Набор операторов достаточно традиционен. Вот некоторые из них: • условный оператор if (если). Альтернативный блок после else (иначе). Если условий и альтернатив несколько, можно использовать elif (сокр. от else if). • оператор цикла while (пока). • оператор цикла for (для). Внутри цикла возможно применение break и continue для прерывания цикла и перехода сразу к следующей итерации соответственно. • оператор определения класса class. • оператор определения функции, метода или генератора def. Внутри возможно применение return (возврат), а в случае генератора — yield (давать). • оператор обработки исключений try — except — else или try — finally (Начиная с версии 2.5 можно использовать finally, except и else в одном блоке). • оператор pass ничего не делает. Используется для пустых блоков кода. Одной из интересных синтаксических особенностей языка является выделение блоков кода с помощью отступов (пробелов или табуляций), поэтому в Питоне отсутствуют операторные скобки begin/end как в языке Паскаль или фигурные скобки, как в Си. Этот «трюк» позволяет заметно сократить количество строк и символов в программе: Программа на C Эквивалентная программа на Python int factorial(int x) { if (x == 0) { return 1; } else { return x * factorial(x-1); } } def factorial(x): if x == 0: return 1 else: return x * factorial(x-1) Таким образом, поведение и даже корректность программы может зависеть от начальных пробелов в тексте. Некоторые критики языка считают такое поведение контринтуитивным. Выражения Выражение является полноправным оператором в Питон. Состав, синтаксис, ассоциативность и приоритет операций достаточно привычны для языков программирования и призваны минимизировать употребление скобок. Отдельно стоит упомянуть операцию форматирования для строк (работает по аналогии со sprintf() из Си), которая использует тот же символ, что и взятие остатка от деления: >>> print ("Здравствуй, %s!" % "Мир") Здравствуй, Мир! Питон имеет удобные цепочечные сравнения. Такие условия в программах — не редкость: 1 <= a < 10 and 1 <= b < 20 Кроме того, логические операции (or и and) являются «ленивыми»: если для вычисления истинностного значения достаточно первого операнда, этот операнд и является результатом (в противном случае вычисляется второй операнд). Этот факт широко использовался до версии 2.5 вместо условной конструкции: (a < b) and "меньше" or "больше" Встроенные типы данных, как правило, имеют особый синтаксис для своих литералов (записанных в исходном коде констант): "строка" + 'строка' """тоже строка""" u"Юникод-строка" True or False # булевские литералы 3.14 # число с плавающей запятой 012 + 0xA # числа в восьмиричной и шестнадцатеричной системах счисления 1 + 2j # целое число и мнимое число [1, 2, "a"] # список (1, 2, "a") # кортеж {'a': 1, 'b': 'B'} # словарь lambda x: x**2 # неименованная функция Для списков (и других последовательностей) Питон предлагает набор операций над срезами. Особенностью является индексация, которая может показаться новичку странной, но раскрывает свою согласованность по мере использования. Индексы элементов списка начинаются с нуля. Запись среза s[N:M] означает, что в срез попадают все элементы от N включительно до M исключительно. Имена Имя (идентификатор) может начинаться с латинской буквы любого регистра или подчёркивания, после чего в имени можно использовать и цифры. В качестве имени нельзя использовать ключевые слова (их список можно узнать по import keyword; print keyword.kwlist) и нежелательно переопределять встроенные имена. Имена, начинающиеся на подчёркивание, имеют специальное значение. В каждой точке программы интерпретатор имеет доступ к трем пространствам имён: локальному, глобальному и встроенному. (Пространство имён — это отображение имён в объекты.) Области видимости имён могут быть вложенными друг в друга (внутри определяемой функции видны имена из окружающего блока кода). На практике с областями видимости и связыванием имён связано несколько правил «хорошего тона», о которых можно подробнее узнать из документации. Строки документации Питон предлагает механизм документирования кода pydoc. Каждый модуль, класс, функцию или метод желательно снабжать строкой документации частичное применение функции возможность реализации других средств на самом языке (например, карринг) Модули и пакеты Программное обеспечение (приложение или библиотека) на Питоне оформляется в виде модулей, которые в свою очередь могут быть собраны в пакеты. Модули могут быть двух типов по своему происхождению: модули, написанные на «чистом» Питоне, и модули расширения (extension modules), написанные на других языках программирования. Например, в стандартной библиотеке есть «чистый» модуль pickle и его аналог на Си: cPickle. Модуль оформляется в виде отдельного файла, а пакет — в виде отдельного каталога. Подключение модуля к программе осуществляется оператором import. После импорта модуль представлен отдельным объектом, дающим доступ к пространству имён модуля. В ходе выполнения программы модуль можно перезагрузить функцией reload(). Интроспекция Python поддерживает полную интроспекцию времени исполнения. Это означает, что для любого объекта можно получить всю информацию о его внутренней структуре. Применение интроспекции является важной частью того, что называют pythonic style, и широко применяется в библиотеках Питона, таких как: PyRO, PLY, Cherry, Django и др., значительно экономя время использующего их программиста. Обработка исключений Обработка исключений поддерживается в Python посредством операторов try, except, else, finally, raise, образующих блок обработки исключения. В общем случае блок выглядит следующим образом: try: #здесь код, который может вызвать исключение raise ExceptionType("message") except (Тип_исключения1,Тип исключения2,…),Переменная: #Код в блоке выполняется, если тип исключения совпадает с одним из типов #(Тип_исключения1,Тип исключения2,...) или является наследником одного #из этих типов. #Полученное исключение доступно в необязательной Переменной. except (Тип_исключения3,Тип исключения4,…),Переменная: #количество блоков except не ограниченно raise #Сгенерировать исключение "поверх" полученного except: #Будет выполнено при любом исключении, не обработанном типизированными блоками except else: #Код блока выполняется, если не было поймано исключений. finally: #будет исполненно в любом случае, возможно после соответствующего #блока except или else Совместное использование else, except и finally стало возможно только начиная в Python 2.5. Информация о текущем исключении всегда доступна через sys.exc_info (). Кроме значения исключения Python также сохраняет состояние стека вплоть до точки возбуждения исключения — так называемый traceback. В отличие от компилируемых языков программирования, в Python использование исключения не приводит к значительным накладным расходам (а зачастую даже позволяют ускорить исполнение программ) и очень широко используется. Исключения согласуются с философией Python (10-й пункт «Дзена» Python — «Ошибки никогда не должны умалчиваться») и являются одним из средств поддержки «утиной типизации». Иногда вместо явной обработки исключений удобнее использовать блок with (доступен, начиная с Python 2.5). Итераторы В программах на Питоне широко используются итераторы. Цикл for может работать как с последовательностью, так и с итератором. Все коллекции, как правило, предоставляют итератор. Объекты определённого пользователем класса тоже могут быть итераторами. Подробнее об итераторах можно узнать в разделе о функциональном программировании. Модуль itertools стандартной библиотеки содержит много полезных функций для работы с итераторами. Генераторы Одной из интересных возможностей языка являются генераторы — функции, сохраняющие внутреннее состояние: значения локальных переменных и текущую инструкцию. Генераторы могут использоваться как итераторы для структур данных и для ленивых вычислений. При вызове генератора функция немедленно возвращает объект-итератор, который хранит текущую точку исполнения и состояние локальных переменных функции. При запросе следующего значения (посредством метода next(), неявно вызываемого в for цикле) генератор продолжает исполнение функции от предыдущей точки останова до следующего оператора yield или return. В Python 2.4 появились генераторные выражения — выражения, дающие в результате генератор. Генераторные выражения позволяют сэкономить память там, где иначе требовалось бы использовать список с промежуточными результатами: >>> sum(i for i in range(1, 100) if i % 2 != 0) 2500 В этом примере суммируются все нечетные числа от 1 до 99. Начиная с версии 2.5, Python поддерживает полноценные сопроцедуры: теперь в генератор можно передавать значения с помощью метода send() и возбуждать в его контексте исключения с помощью метода throw(). Управление контекстом выполнения В Python 2.5 появились средства для управления контекстом выполнения блока кода — оператор with и модуль contextlib. Оператор может применяться в тех случаях, когда до и после некоторых действий должны обязательно выполняться некоторые другие действия, независимо от возбуждённых в блоке исключений или операторов return: файлы должны быть закрыты, ресурсы освобождены, перенаправление стандартного ввода вывода закончено и т. п. Оператор улучшает читаемость кода, а значит, помогает предотвращать ошибки. Декораторы Начиная с версии 2.4 Python позволяет использовать т. н. декораторы ( PEP318) (не следует путать с одноименным шаблоном проектирования) для поддержки существующей практики преобразования функций и методов в месте определения (декораторов может быть несколько). После долгих дебатов для декораторов стал использоваться символ @ в строках, предшествующих определению функции или метода. Следующий пример содержит описание статического метода без применения декоратора: def myWonderfulMethod(): return "Некоторый метод" myWonderfulMethod = staticmethod(myWonderfulMethod) и с помощью декоратора: на С/C++ прямо в исходные файлы Python, создавая расширения «на лету» (pyinline, weave). Другой подход состоит во встраивании интерпретатора Питон в приложения. Питон легко встраивается в программы на Java, C/C++, Ocaml. Взаимодействие Python-приложений с другими системами возможно также с помощью CORBA, xml-rpc, SOAP, COM. С помощью Pyrex возможна компиляция Python-подобного (добавлена возможность типизации) языка кода в эквивалентный С код и связывание с внешними модулями. Экспериментальный проект shed skin предполагает создание компилятора для трансформации неявно типизированных Python программ в оптимизированный С ++ код. Начиная с версии 0.22 shed skin позволяет компилировать отдельные функции в модули расширений. Полная компиляция (по состоянию на 1 июля 2007 года) далека от завершения. Питон и подавляющее большинство библиотек к нему бесплатны и поставляются в исходных кодах. Более того, в отличие от многих открытых систем, лицензия никак не ограничивает использование Питон в коммерческих разработках и не налагает никаких обязательств кроме указания авторских прав. Графические библиотеки С Питоном поставляется библиотека tkinter на основе Tcl/Tk для создания кроссплатформенных программ с графическим интерфейсом. Однако в силу разных причин всё больше людей при написании GUI программ отдают предпочтение библиотеке wxPython (wxPython), основанной на библиотеке wxWidgets. Также часто используются библиотеки PyGTK и PyQT (PyQt). PyQt так же предоставляет широкие возможности по работе с базами данных, графикой и сетями при помощи возможностей библиотеки Qt. Для создания игр и различных приложений, требующих нестандартного интерфейса, удобно применять библиотеку Pygame . Стоит заметить, что pygame предоставляет обширные средства работы с мультимедиа: с её помощью можно управлять звуком и изображениями, воспроизводить видео. Предоставляемое pygame аппаратное ускорение графики OpenGL имеет более высокоуровневый интерфейс по сравнению с PyOpenGL, копирующей семантику С-библиотеки для OpenGL. Есть также PyOgre, обеспечивающая привязку к Ogre — высокоуровневой объектно-ориентированной библиотеке 3D-графики. Профилирование и оптимизация кода В стандартной библиотеке Питон имеется профайлер (модуль profile), который можно использовать для сбора статистики о времени работы отдельных функций. Для решения вопроса о том, какой вариант кода работает быстрее, можно использовать модуль timeit. Производимые в следующей программе измерения позволяют выяснить, какой из вариантов конкатенации строк более эффективен: from timeit import Timer def case1(): # А. инкрементальные конкатенации в цикле s = "" for i in range(10000): s += str(i) def case2(): # Б. через промежуточный список и метод join s = [] for i in range(10000): s.append(str(i)) s = "".join(s) def case3(): # В. списковое выражение и метод join return "".join([str(i) for i in range(10000)]) def case4(): # Г. генераторное выражение и метод join return "".join(str(i) for i in range(10000)) for v in range(1,5): print (Timer("func()","from __main__ import case%s as func" % v).timeit(200)) Как и в любом языке программирования, в Питоне имеются свои приемы оптимизации кода. Оптимизировать код можно исходя из различных (часто конкурирующих друг с другом) критериев (увеличение быстродействия, уменьшение объёма требуемой оперативной памяти, компактность исходного кода и т. д.). Чаще всего программы оптимизируют по времени исполнения. Здесь есть несколько очевидных правил: • Не нужно оптимизировать программу, если скорость её выполнения достаточна • Используемый алгоритм имеет определённую временную сложность, поэтому перед оптимизацией кода программы стоит сначала пересмотреть алгоритм • Стоит использовать готовые и отлаженные функции и модули, даже если для этого нужно немного обработать данные. Например, в Питоне есть встроенная функция sort(). • Профилирование поможет выяснить узкие места. Оптимизацию нужно начинать с них Питон имеет следующие особенности и связанные с ними правила оптимизации: • Вызов функций является достаточно дорогостоящей операцией, поэтому внутри вложенных циклов нужно стараться избегать вызова функций или, например, переносить цикл в функции. Функция, обрабатывающая последовательность, эффективнее, чем обработка той же последовательности в цикле вызовом функции • Старайтесь вынести из глубоко вложенного цикла все, что можно вычислить во внешних циклах. Доступ к локальным переменным более быстрый, чем к глобальным, или чем доступ к полям. • Оптимизатор psyco может помочь ускорить работу модуля программы при условии, что модуль не использует динамических свойств языка Питон • В случае, если модуль проводит массированную обработку данных и оптимизация алгоритма и кода не помогает, можно переписать критические участки, скажем, на языке Си или Pyrex Инструмент под названием Pychecker поможет проанализировать исходный код на Питоне и выдать рекомендации по найденным проблемам (например, неиспользуемые имена, изменение сигнатуры метода при его перегрузке и т.п). В ходе такого статического анализа исходного кода могут быть выявлены и ошибки. Pylint призван решать близкие задачи но имеет уклон в сторону проверки стиля кода. Сравнение с другими языками Наиболее часто Питон сравнивают с Perl и Ruby. Эти языки также являются интерпретируемыми и обладают примерно одинаковой скоростью выполнения программ. Как и Perl, Питон может успешно применяться для написания скриптов (сценариев). Как и Ruby, Питон является хорошо продуманной системой для ООП . Средства функционального программирования частично позаимствованы из Отсутствие статической типизации Отсутствие статической типизации является не столько недостатком интерпретатора, сколько выбором дизайнера языка. Дело в том, что в Python принята так называемая «Утиная типизация». В силу этого типы передаваемых значений недоступны на этапе компиляции и ошибки вроде AttributeError могут возникать во время исполнения. Отсутствие статической типизации также одна из основных причин низкого быстродействия. Существуют модули, которые позволяют контролировать типы параметров функций на этапе исполнения, например typecheck. Добавление необязательной статической типизации параметров функции запланированно для Python3000, см. PEP-3107 и PEP-3100. При этом однако непосредственно интерпретатор не будет проверять типы, а только добавлять соответствующую информацию к метаданным функции, для её (информации) последующего использования модулями расширений. Отсутствие статической типизации и некоторые другие причины не позволяют реализовать в Python механизм перегрузки функций на этапе компиляции. Возможности Python позволяют реализовать динамическую перегрузку на этапе исполнения, что, конечно, замедляет вызов, так как разрешение производится при каждом обращении и является, в общем случае, довольно сложной процедурой. Отсутствие перегрузки в Python стараются компенсировать использованием виртуальных функций. len = lambda x : x.__len__() # это только пример Планы по поддержке перегрузки в Python3000 PEP-3124, PEP-3107 Невозможность модификации встроенных классов По сравнению с Ruby и некоторыми другими языками в Python отсутствует возможность модифицировать встроенные классы, такие как int, str, float, list и другие, что однако позволяет Python потреблять меньше оперативной памяти и быстрее работать. Еще одной причиной введения такого ограничения является необходимость согласования с модулями расширения. Многие модули (в целях оптимизации быстродействия) преобразуют Python-объекты элементарных типов к соответствующим C типам вместо манипуляций с ними посредством C API. Глобальная блокировка интерпретатора (GIL) GIL (Global Interpreter Lock) - проблема присущая CPython, Stackless и PyPy, но отсутствующая в Jython и IronPython. При своей работе основной интерпретатор Python постоянно использует большое количество потоково- небезопасных данных. В основном это словари, в которых хранятся атрибуты объектов. Для избежания разрушения этих данных при совместной модификации из разных потоков перед началом исполнения нескольких инструкций (по умолчанию 100) поток интерпретатора захватывает GIL, а по окончанию освобождает. Вследствие этой особенности в каждый момент времени может исполнятся только один поток Python кода, даже если в компьютере имеется несколько процессоров или процессорных ядер (GIL также освобождается на время выполнения блокирующих операций, таких как ввод-вывод, изменения/ проверка состояния синхронизирующих примитивов и других, таким образом если один поток блокируется, другие могут исполняться). Была предпринята попытка перехода к более гранулярным синхронизациям, однако из-за частых захватов/освобождений блокировок эта реализация оказалась слишком медленной. В ближайшем будущем переход от GIL к другим техникам не предполагается. Следует отметить что эта проблема существует в большинстве других распространенных интерпретируемых языков, что позволяет предположить отсутствие эффективного решения. Если необходимо параллельное исполнение нескольких потоков Python кода, то можно воспользоваться процессами, например модулем processing, который имитирует семантику стандартного модуля threading, но использует процессы вместо потоков. Есть множество модулей, упрощающих написание параллельных и/или распределенных приложений на Python, таких как parallelpython, Pypar, pympi и других. GIL освобождается при исполнении кода большинства расширений, например numpy/scipy, позволяя на время расчетов исполняться другому Python потоку. Другим решением может быть использование IronPython или Jython, лишенных данного недостатка. Реализации CPython является основной, но не единственной реализацией языка программирования Python. Существуют также следующие реализации: Jython — реализация Python, использующая JVM в качестве среды исполнения. Позволяет прозрачно использовать Java библиотеки. Домашняя страница. IronPython — Python для Microsoft .NET и Mono. Компилирует Python программы в MSIL, таким образом предоставляя полную интеграцию с .NET системой. Домашняя страница. Stackless — также написанная на С реализация Python. Это не полноценная реализация, а патчи к CPython. Предоставляет расширенные возможности многопоточного программирования и значительно большую глубину рекурсии. Python for .NET — ещё одна реализация Python для .NET . В отличии от IronPython эта реализация не компилирует Python код в MSIL, а только предоставляет интерпретатор, написанный на C#. Позволяет использовать .NET сборки из Python кода. PyPy — Реализация Python, написанная на Python. Позволяет легко проверять новые возможности. В PyPy кроме стандартного CPython включены возможности Stackless, Psyco, модификация AST «на лету» и многое другое. В проект интегрированы возможности анализа Python кода и трансляция в другие языки и байтокоды виртуальных машин (C, LLVM, Javascript, .NET(с версии 0.9.9)). Начиная с 0.9.0, возможна полностью автоматическая трансляция интерпретатора на C, в результате чего достигается скорость, приемлемая для использования (в 2 —3 раза медленее чем CPython при отключенном JIT для версии 0.9.9). JIT активен, начиная с версии 1.0, вышедшей 28.03.2007. Python 3.0 Новая версия языка находится на ранней стадии разработки. Информацию о наиболее видимых изменениях можно получить на сайте разработчиков. Новая версия исправляет некоторые дефекты дизайна языка, поэтому код для предыдущих версий Python требует небольших изменений. В частности, вместо оператора print нужно использовать одноименную функцию или запись на стандартный вывод sys.stdout.write(). Все строки стали Unicode-строками и более не требуют указания u"", однако, весь код, который использовал кодировки или двоичные данные в строках, потребует изменений, так как для двоичных данных предусмотрен отдельный тип bytes. Методы словаря (.keys(), .items(), .values()) вместо списка будут возвращать специальный объект-представление (англ. view), который можно преобразовать в список с помощью list(). Специализированные подмножества/расширения Python программ, и пользователи найдут, что программирование на нем эффективно и даже забавно. В Японии Ruby стал популярным с момента появления первой общедоступной версии в 1995 году, однако наличие документации только на японском языке сдерживало его дальнейшее распространение. Лишь в 1997 году появилось описание Ruby на английском языке, а в 1998 году открылся форум ruby-talk. С этого момента Ruby начал свое шествие по всему миру. За последний год появились три англоязычные книги, посвященные ему, хотя на русский язык, к сожалению, ни одна из них еще не переведена. Сейчас Ruby входит в большинство дистрибутивов ОС Linux, доступен он и пользователям других операционных систем. Программисты говорят о Ruby Этот язык, несомненно, является одним из лучших в качестве первого языка программирования. Быстрый цикл разработки (редактирование -- запуск -- редактирование), использование интерпретатора, изначальная объектно- ориентированность, нетипизированные переменные, которые не требуют объявления, -- все это позволяет учащимся сконцентрировать свое внимание на общих принципах программирования. Большая часть вопросов, которые будут затронуты, предполагает наличие определенных знаний у читателя в области теории языков и объектно- ориентированного программирования. Легче всего понять Ruby тем, кто знает Smalltalk, Lisp, C, C++ и Perl. <<Джентльменский>> набор из Perl, Java и C++ тоже является весьма хорошей стартовой позицией для изучения Ruby. Тем же, кто не может похвастаться подобными знаниями, весьма приятно будет узнать, что * <<если для изучения языка Perl Вам нужно потратить, скажем, три недели, то Python Вы изучите за неделю, а Ruby -- за один день!>> * <<Ruby отличается чрезвычайной предсказуемостью (``Princple of Least Surprise'') -- ни на одном другом языке невозможно написать достаточно большую программу и увидеть, что она работает с первой попытки>>. Вот что говорит Юкихиро Мацумото об этом языке. Итак, 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 и
Docsity logo