1 / 56

Обзор скриптовых языков

Обзор скриптовых языков. Доклад на семинаре по специальности студентка группы 4057/2 Исакова Светлана 21 октября 2008 г. План доклада. Понятие скриптового языка История Примеры языков: Perl Python Ruby PHP Lua Groovy «Общение» с другими языками Заключение.

rance
Download Presentation

Обзор скриптовых языков

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Обзор скриптовых языков Доклад на семинаре по специальности студентка группы 4057/2 Исакова Светлана 21 октября 2008 г.

  2. План доклада • Понятие скриптового языка • История • Примеры языков: • Perl • Python • Ruby • PHP • Lua • Groovy • «Общение» с другими языками • Заключение С. Исакова. Обзор скриптовых языков

  3. I. Понятие скриптового языка

  4. Понятие скрипта (сценария) «A script is what you give the actors. A program is what you give the audience.» Larry Wall • Скрипт - запись последовательности действий • Действия: • пользователя; • не исполняемые обычным браузером или сервером; • позволяющие персонажам игры действовать «разумно» С. Исакова. Обзор скриптовых языков

  5. Программа единожды компилируется в машинный код, а потом много раз запускается Скрипт транслируется программой каждый раз, когда используется Программа VS Скрипт Все программы интерпретируются, вопрос в том, на каком уровне С. Исакова. Обзор скриптовых языков

  6. Программа единожды компилируется в машинный код, а потом много раз запускается Скрипт транслируется программой каждый раз, когда используется Программа VS Скрипт Все программы интерпретируются, вопрос в том, на каком уровне Скрипты обычно интерпретируются, а не компилируются С. Исакова. Обзор скриптовых языков

  7. Интерпретируемый, Динамический • Интерпретируемый язык: • запускается в интерпретирующей оболочке без выделения этапа компиляции • Динамический язык: • язык, ожидающий момента, когда среда выполнения определит тип переменной или поведение объекта • переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной • Некоторым языкам программирования общего назначения подходят оба термина С. Исакова. Обзор скриптовых языков

  8. Скриптовые языки • Универсальные • PHP • Perl • Python • Ruby • Встроенные • Max Script • VBA • Командные оболочки • Bash • Cshell • Встраиваемые • JavaScript • Lua С. Исакова. Обзор скриптовых языков

  9. II. История

  10. Вначале были мамонты… • Начало 1960-х, два ранних динамических языка: • APL (предшественник Matlab) • SNOBOL (язык написания компиляторов + “все есть строка”) • 1969 г: • sh (оригинальный Bourne shell) - командный интерпретатор, используемый в ОС семейства UNIX • 1970-e, Bell Laboratories: • Sed - язык программирования, применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных • AWK - интерпретируемый скриптовый C-подобный язык построчного разбора и обработки входного потока С. Исакова. Обзор скриптовых языков

  11. Perl • Ларри Уолл (Америка) • “Practical Extraction and Report Language“ • Практический язык для извлечения данных и составления отчётов 1987 Perl С. Исакова. Обзор скриптовых языков

  12. Python • Гвидо ван Россум (Голландия) • Изначально скриптовый язык для распределённой ОС Amoeba 1987 1991 Perl Python С. Исакова. Обзор скриптовых языков

  13. PHP • Расмус Лердорф (Дания) • Изначально надстройка над Perl для облегчения разработки веб-страниц 1987 1991 1994 PHP Perl Python С. Исакова. Обзор скриптовых языков

  14. Ruby • Юкихиро Мацумото (Япония) • Лучше чем Perl, лучше чем Python (для Мацумото ) 1987 1991 1994 1995 PHP Perl Python Ruby С. Исакова. Обзор скриптовых языков

  15. III. Perl

  16. Perl • There's morethanonewaytodoit • Язык может считаться законченным только тогда, когда в его синтаксисе используются все клавиши на клавиатуре • Perl изучается легко и долго :-) • CPAN «Comprehensive Perl Archive Network» - содержит исходный код, документацию, скрипты и многие модули и расширения от сторонних разработчиков С. Исакова. Обзор скриптовых языков

  17. Типы данных в Perl • $foo; # скаляр или указатель • @foo; # массив • %foo; # хеш-таблица • &foo; # функция • FOO; # дескриптор ввода-вывода или константа С. Исакова. Обзор скриптовых языков

  18. Регулярные выражения в Perl • Способ определения символьной маски для последующего сравнения с ней строки символов или для обработки строк • В Perl встроена мощная поддержка регулярных выражений • Пример. Проверка соответствия строки маске: • if ($string =~ /pattern/) { … } С. Исакова. Обзор скриптовых языков

  19. Регулярные выражения. Примеры • Есть ли в строке $str подстрока “perl”: • if ($string =~ /perl/) { … } • Начинается ли строка с цифры: • if ($string =~ /^\d/) { … } • Изменение регистра букв в строке: • $string =~tr/a-z/A-Z/; С. Исакова. Обзор скриптовых языков

  20. Регулярные выражения. Примеры (2) • Замена всех пробелов на ‘*’: • $string =~ s/ /*/g; • Является ли строка gmail адресом: • if ($mail =~ /\w+\@gmail.com/){ … } • Является ли строка e-mail адресом: • if ($string =~ /\w+\@\w+\.\w+/) { … } С. Исакова. Обзор скриптовых языков

  21. IV. Python

  22. Python • Высокоуровневый язык программирования общего назначения с акцентом на производительность разработчика и читаемость кода • Синтаксис ядра Питона минималистичен • Питон имеет множество библиотек • Стандартная библиотека включает большой объём полезных функций С. Исакова. Обзор скриптовых языков

  23. 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 С. Исакова. Обзор скриптовых языков

  24. Особенности языка • Он не содержит операторных скобок (begin...end или {..}) • Блоки выделяются отступами: пробелами или табуляцией • swap(var1, var2) – встроено в язык: • var1, var2 = var2, var1 • Условия могут комбинироваться: 1 < i < 3 С. Исакова. Обзор скриптовых языков

  25. Типы данныхв Python • атомарные • числа • строки • структурные (или ссылочные) • списки • кортежи (tuples) • словари • функции • классы • экземпляры классов С. Исакова. Обзор скриптовых языков

  26. Работа со списками • Большие возможности для работы со списками: • 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 С. Исакова. Обзор скриптовых языков

  27. ООП в Python • Все есть объект (в том числе функции, методы, модули, классы) • Концепция Duck Typing: • «Если ЭТО ходит, как утка, и крякает, как утка - значит, это утка» • любая функция может принимать объекты любого типа • def f(x):#подходит любой x, у которого • return x.get_value() #есть этот метод • если она пытается использовать свойства, которых у данного объекта нет, возникнет исключение С. Исакова. Обзор скриптовых языков

  28. Программы на Python • Разработка программ занимает мало времени • В среднем программа написанная на Питоне в 2—4 раза меньше чем её Си++ или Java аналог • Основные библиотеки Python написаны на C++ С. Исакова. Обзор скриптовых языков

  29. 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);} С. Исакова. Обзор скриптовых языков

  30. V. Ruby

  31. Ruby • Мацумотомечтал о языке, более мощном, чем Перл, и более объектно-ориентированном, чем Python: • “Python мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой над языком” • Принцип «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист • Достижения одного и того же результата несколькими различными способами С. Исакова. Обзор скриптовых языков

  32. Ruby • ООП в Ruby: • Все данные являются объектами • Каждая функция — метод • Используются префиксы (@, $, @@) для задания области видимости переменных • Утверждается, что Ruby интуитивно понятен. Что напечатает программа? • print ["q", "t", "a", "x"].collect { |x| x.succ } С. Исакова. Обзор скриптовых языков

  33. Модули и Mixin-ы • Модуль – пространство имен • Mixin (примесь) – «подмешивание» модуля в класс • class MyClass • import MyModule • … • Mixin-ы заменяют множественное наследование • Mixin-ычем-то похожи на интерфейсы в Java и C#, с тем отличием, что mixin-ы предоставляют реализации • При подмешивании нескольких модулей среди них задан строгий порядок обхода методов С. Исакова. Обзор скриптовых языков

  34. Удобство примесей • Модуль Comparable позволяет в результате подмешивания в класс определить в классе методы (<, >, <=, >=, ==, between?) • Для этого достаточно определить метод <=> С. Исакова. Обзор скриптовых языков

  35. Пример использования 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 С. Исакова. Обзор скриптовых языков

  36. Удобство примесей • Модуль Comparable позволяет в результате подмешивания в класс определить в классе методы (<, >, <=, >=, ==, between?) • Для этого достаточно определить метод <=> • Модуль Enumerable позволяет расширить класс методами, присущими коллекциям (max, min, find, find_all, map и пр.) • Для этого подмешивающий класс должен предоставить метод each, который последовательно перебирает все элементы коллекции С. Исакова. Обзор скриптовых языков

  37. VI. PHP

  38. PHP • PHP: Hypertext Preprocessor • “PHP - это Web-ориентированный Perl” • Создан для генерации HTML-страниц на веб-сервере и работы с базами данных • Входит в LAMP – «стандартный» набор для создания веб-сайтов (Linux, Apache, MySQL, PHP (Python или Perl)) • Может внедряться в HTML-код • Более пятой доли доменов Интернета используют PHP С. Исакова. Обзор скриптовых языков

  39. PHP и JavaScript • PHP предназначен для работы серверной части сайта • JavaScript работает на клиентской стороне С. Исакова. Обзор скриптовых языков

  40. Критика • Несогласованный синтаксис функций • Отсутствие обратной совместимости между версиями языка • Отсутствие многопоточности С. Исакова. Обзор скриптовых языков

  41. VII. Lua

  42. Lua • 1993 г, Computer Graphics Technology Group, TeCGraf, Pontifical Catholic University, PUC-Rio • Используется во многих играх в качестве «скриптового движка» • между игровым «движком» и данными • сценарий поведения/взаимодействия объектов • Удобно хранить табличные данные С. Исакова. Обзор скриптовых языков

  43. Типы данных в Lua • Основные типы данных: • nil • Boolean • number • string • function • userdata • thread • table • Таблицы являются фундаментом для пользовательских типов данных: • структуры, массивы, списки, множества • Таблица — набор пар (Ключ, Значение) С. Исакова. Обзор скриптовых языков

  44. Lua • Реализация Lua имеет • компилятор с исходного языка в исполняемый байт-код • виртуальную машину для исполнения сгенерированного байт-кода • В язык встроены возможности рефлексии (для сериализации или автоматической генерации интерфейса редактирования данных) С. Исакова. Обзор скриптовых языков

  45. IX. Groovy

  46. Groovy • 2004 г. • Разработан для платформы Java как альтернатива языку Java с возможностями Python, Руби и Smalltalk • Использует Java-подобный синтаксис с динамической компиляцией в JVM байт-код • Напрямую работает с другим Java кодом и библиотеками • Может использоваться в любом Java проекте или как скриптовый язык С. Исакова. Обзор скриптовых языков

  47. Отличия от Java • Статическая и динамическая типизация • Встроенный синтаксис для списков, ассоциативных массивов, массивов и регулярных выражений • Замыкания • Перегрузка операторов С. Исакова. Обзор скриптовых языков

  48. VIII. «Общение»с другими языками

  49. Обращение к внешним скриптам из приложения • Написание бизнес-логики на более простом языке • Построение архитектуры на базе плагинов, позволяющей пользователям настраивать приложение на лету • Произведение внешней оперативной конфигурации поведения приложения с помощью полноценного языка программирования вместо настроечного файла • Добавление в приложение языка, специфичный для данной предметной области • Написание на скриптовом языке тестирующего кода для приложения С. Исакова. Обзор скриптовых языков

  50. Java Scription API • Пакет javax.script облегчаетпроцессинтеграциидинамическихязыков в Java-приложение • Обеспечивает двухстороннюю видимость между Java-приложениями и внешними скриптами • вызов внешних скриптов из Java-кода • предоставление таким скриптам доступ к избранным Java-объектам • Поддерживает более 20 языков С. Исакова. Обзор скриптовых языков

More Related