581 likes | 1.01k Views
Обзор скриптовых языков. Доклад на семинаре по специальности студентка группы 4057/2 Исакова Светлана 21 октября 2008 г. План доклада. Понятие скриптового языка История Примеры языков: Perl Python Ruby PHP Lua Groovy «Общение» с другими языками Заключение.
E N D
Обзор скриптовых языков Доклад на семинаре по специальности студентка группы 4057/2 Исакова Светлана 21 октября 2008 г.
План доклада • Понятие скриптового языка • История • Примеры языков: • Perl • Python • Ruby • PHP • Lua • Groovy • «Общение» с другими языками • Заключение С. Исакова. Обзор скриптовых языков
Понятие скрипта (сценария) «A script is what you give the actors. A program is what you give the audience.» Larry Wall • Скрипт - запись последовательности действий • Действия: • пользователя; • не исполняемые обычным браузером или сервером; • позволяющие персонажам игры действовать «разумно» С. Исакова. Обзор скриптовых языков
Программа единожды компилируется в машинный код, а потом много раз запускается Скрипт транслируется программой каждый раз, когда используется Программа VS Скрипт Все программы интерпретируются, вопрос в том, на каком уровне С. Исакова. Обзор скриптовых языков
Программа единожды компилируется в машинный код, а потом много раз запускается Скрипт транслируется программой каждый раз, когда используется Программа VS Скрипт Все программы интерпретируются, вопрос в том, на каком уровне Скрипты обычно интерпретируются, а не компилируются С. Исакова. Обзор скриптовых языков
Интерпретируемый, Динамический • Интерпретируемый язык: • запускается в интерпретирующей оболочке без выделения этапа компиляции • Динамический язык: • язык, ожидающий момента, когда среда выполнения определит тип переменной или поведение объекта • переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной • Некоторым языкам программирования общего назначения подходят оба термина С. Исакова. Обзор скриптовых языков
Скриптовые языки • Универсальные • PHP • Perl • Python • Ruby • Встроенные • Max Script • VBA • Командные оболочки • Bash • Cshell • Встраиваемые • JavaScript • Lua С. Исакова. Обзор скриптовых языков
Вначале были мамонты… • Начало 1960-х, два ранних динамических языка: • APL (предшественник Matlab) • SNOBOL (язык написания компиляторов + “все есть строка”) • 1969 г: • sh (оригинальный Bourne shell) - командный интерпретатор, используемый в ОС семейства UNIX • 1970-e, Bell Laboratories: • Sed - язык программирования, применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных • AWK - интерпретируемый скриптовый C-подобный язык построчного разбора и обработки входного потока С. Исакова. Обзор скриптовых языков
Perl • Ларри Уолл (Америка) • “Practical Extraction and Report Language“ • Практический язык для извлечения данных и составления отчётов 1987 Perl С. Исакова. Обзор скриптовых языков
Python • Гвидо ван Россум (Голландия) • Изначально скриптовый язык для распределённой ОС Amoeba 1987 1991 Perl Python С. Исакова. Обзор скриптовых языков
PHP • Расмус Лердорф (Дания) • Изначально надстройка над Perl для облегчения разработки веб-страниц 1987 1991 1994 PHP Perl Python С. Исакова. Обзор скриптовых языков
Ruby • Юкихиро Мацумото (Япония) • Лучше чем Perl, лучше чем Python (для Мацумото ) 1987 1991 1994 1995 PHP Perl Python Ruby С. Исакова. Обзор скриптовых языков
Perl • There's morethanonewaytodoit • Язык может считаться законченным только тогда, когда в его синтаксисе используются все клавиши на клавиатуре • Perl изучается легко и долго :-) • CPAN «Comprehensive Perl Archive Network» - содержит исходный код, документацию, скрипты и многие модули и расширения от сторонних разработчиков С. Исакова. Обзор скриптовых языков
Типы данных в Perl • $foo; # скаляр или указатель • @foo; # массив • %foo; # хеш-таблица • &foo; # функция • FOO; # дескриптор ввода-вывода или константа С. Исакова. Обзор скриптовых языков
Регулярные выражения в Perl • Способ определения символьной маски для последующего сравнения с ней строки символов или для обработки строк • В Perl встроена мощная поддержка регулярных выражений • Пример. Проверка соответствия строки маске: • if ($string =~ /pattern/) { … } С. Исакова. Обзор скриптовых языков
Регулярные выражения. Примеры • Есть ли в строке $str подстрока “perl”: • if ($string =~ /perl/) { … } • Начинается ли строка с цифры: • if ($string =~ /^\d/) { … } • Изменение регистра букв в строке: • $string =~tr/a-z/A-Z/; С. Исакова. Обзор скриптовых языков
Регулярные выражения. Примеры (2) • Замена всех пробелов на ‘*’: • $string =~ s/ /*/g; • Является ли строка gmail адресом: • if ($mail =~ /\w+\@gmail.com/){ … } • Является ли строка e-mail адресом: • if ($string =~ /\w+\@\w+\.\w+/) { … } С. Исакова. Обзор скриптовых языков
Python • Высокоуровневый язык программирования общего назначения с акцентом на производительность разработчика и читаемость кода • Синтаксис ядра Питона минималистичен • Питон имеет множество библиотек • Стандартная библиотека включает большой объём полезных функций С. Исакова. Обзор скриптовых языков
The Zen of Python • Beautiful is better than ugly • Explicit is better than implicit • Simple is better than complex • Complex is better than complicated • Flat is better than nested • Sparse is better than dense • Readability counts . . . Tim Peters С. Исакова. Обзор скриптовых языков
Особенности языка • Он не содержит операторных скобок (begin...end или {..}) • Блоки выделяются отступами: пробелами или табуляцией • swap(var1, var2) – встроено в язык: • var1, var2 = var2, var1 • Условия могут комбинироваться: 1 < i < 3 С. Исакова. Обзор скриптовых языков
Типы данныхв Python • атомарные • числа • строки • структурные (или ссылочные) • списки • кортежи (tuples) • словари • функции • классы • экземпляры классов С. Исакова. Обзор скриптовых языков
Работа со списками • Большие возможности для работы со списками: • list1 = [1, 2, 3] • print [x for x in list1 if x < 3] • [1, 2] • list2 = [3, 4, 5] • print [x * y for x in list1 for y in list2] • [3, 4, 5, 6, 8, 10, 9, 12, 15] • print sum(1 for i in [3, 3, 4, 4, 3] if i == 3) • 3 С. Исакова. Обзор скриптовых языков
ООП в Python • Все есть объект (в том числе функции, методы, модули, классы) • Концепция Duck Typing: • «Если ЭТО ходит, как утка, и крякает, как утка - значит, это утка» • любая функция может принимать объекты любого типа • def f(x):#подходит любой x, у которого • return x.get_value() #есть этот метод • если она пытается использовать свойства, которых у данного объекта нет, возникнет исключение С. Исакова. Обзор скриптовых языков
Программы на Python • Разработка программ занимает мало времени • В среднем программа написанная на Питоне в 2—4 раза меньше чем её Си++ или Java аналог • Основные библиотеки Python написаны на C++ С. Исакова. Обзор скриптовых языков
Python VS Perl Даны два списка чисел, вернуть попарно сумму этих списков: • # Python version • def pairwiseSum(list1, list2): result = [] for i in range(len(list1)): result.append(list1[i] + list2[i]) return result • # Perl version • sub pairwiseSum { my($arg1, $arg2) = @_; @list1 = @$arg1; @list2 = @$arg2; for($i=0; $i < length(@list1); $i++) { push(@result, $list1[$i] + $list2[$i]); } return(\@result);} С. Исакова. Обзор скриптовых языков
Ruby • Мацумотомечтал о языке, более мощном, чем Перл, и более объектно-ориентированном, чем Python: • “Python мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой над языком” • Принцип «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист • Достижения одного и того же результата несколькими различными способами С. Исакова. Обзор скриптовых языков
Ruby • ООП в Ruby: • Все данные являются объектами • Каждая функция — метод • Используются префиксы (@, $, @@) для задания области видимости переменных • Утверждается, что Ruby интуитивно понятен. Что напечатает программа? • print ["q", "t", "a", "x"].collect { |x| x.succ } С. Исакова. Обзор скриптовых языков
Модули и Mixin-ы • Модуль – пространство имен • Mixin (примесь) – «подмешивание» модуля в класс • class MyClass • import MyModule • … • Mixin-ы заменяют множественное наследование • Mixin-ычем-то похожи на интерфейсы в Java и C#, с тем отличием, что mixin-ы предоставляют реализации • При подмешивании нескольких модулей среди них задан строгий порядок обхода методов С. Исакова. Обзор скриптовых языков
Удобство примесей • Модуль Comparable позволяет в результате подмешивания в класс определить в классе методы (<, >, <=, >=, ==, between?) • Для этого достаточно определить метод <=> С. Исакова. Обзор скриптовых языков
Пример использования Comparable • class Area • include Comparable • attr_reader :x, :y • def initialize(x, y) • @x, @y = x, y • end • def square • @x * @y • end • def <=>(other) • s1, s2 = square, other.square • if s1 < s2 then • -1; • elsif s1 > s2 then • 1 • else • 0 • end • end С. Исакова. Обзор скриптовых языков
Удобство примесей • Модуль Comparable позволяет в результате подмешивания в класс определить в классе методы (<, >, <=, >=, ==, between?) • Для этого достаточно определить метод <=> • Модуль Enumerable позволяет расширить класс методами, присущими коллекциям (max, min, find, find_all, map и пр.) • Для этого подмешивающий класс должен предоставить метод each, который последовательно перебирает все элементы коллекции С. Исакова. Обзор скриптовых языков
PHP • PHP: Hypertext Preprocessor • “PHP - это Web-ориентированный Perl” • Создан для генерации HTML-страниц на веб-сервере и работы с базами данных • Входит в LAMP – «стандартный» набор для создания веб-сайтов (Linux, Apache, MySQL, PHP (Python или Perl)) • Может внедряться в HTML-код • Более пятой доли доменов Интернета используют PHP С. Исакова. Обзор скриптовых языков
PHP и JavaScript • PHP предназначен для работы серверной части сайта • JavaScript работает на клиентской стороне С. Исакова. Обзор скриптовых языков
Критика • Несогласованный синтаксис функций • Отсутствие обратной совместимости между версиями языка • Отсутствие многопоточности С. Исакова. Обзор скриптовых языков
Lua • 1993 г, Computer Graphics Technology Group, TeCGraf, Pontifical Catholic University, PUC-Rio • Используется во многих играх в качестве «скриптового движка» • между игровым «движком» и данными • сценарий поведения/взаимодействия объектов • Удобно хранить табличные данные С. Исакова. Обзор скриптовых языков
Типы данных в Lua • Основные типы данных: • nil • Boolean • number • string • function • userdata • thread • table • Таблицы являются фундаментом для пользовательских типов данных: • структуры, массивы, списки, множества • Таблица — набор пар (Ключ, Значение) С. Исакова. Обзор скриптовых языков
Lua • Реализация Lua имеет • компилятор с исходного языка в исполняемый байт-код • виртуальную машину для исполнения сгенерированного байт-кода • В язык встроены возможности рефлексии (для сериализации или автоматической генерации интерфейса редактирования данных) С. Исакова. Обзор скриптовых языков
Groovy • 2004 г. • Разработан для платформы Java как альтернатива языку Java с возможностями Python, Руби и Smalltalk • Использует Java-подобный синтаксис с динамической компиляцией в JVM байт-код • Напрямую работает с другим Java кодом и библиотеками • Может использоваться в любом Java проекте или как скриптовый язык С. Исакова. Обзор скриптовых языков
Отличия от Java • Статическая и динамическая типизация • Встроенный синтаксис для списков, ассоциативных массивов, массивов и регулярных выражений • Замыкания • Перегрузка операторов С. Исакова. Обзор скриптовых языков
Обращение к внешним скриптам из приложения • Написание бизнес-логики на более простом языке • Построение архитектуры на базе плагинов, позволяющей пользователям настраивать приложение на лету • Произведение внешней оперативной конфигурации поведения приложения с помощью полноценного языка программирования вместо настроечного файла • Добавление в приложение языка, специфичный для данной предметной области • Написание на скриптовом языке тестирующего кода для приложения С. Исакова. Обзор скриптовых языков
Java Scription API • Пакет javax.script облегчаетпроцессинтеграциидинамическихязыков в Java-приложение • Обеспечивает двухстороннюю видимость между Java-приложениями и внешними скриптами • вызов внешних скриптов из Java-кода • предоставление таким скриптам доступ к избранным Java-объектам • Поддерживает более 20 языков С. Исакова. Обзор скриптовых языков