• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Scripting languages
 

Scripting languages

on

  • 739 views

 

Statistics

Views

Total Views
739
Views on SlideShare
738
Embed Views
1

Actions

Likes
0
Downloads
5
Comments
0

1 Embed 1

http://www.hanrss.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Примеры интеграции с blender или gimp
  • Диаграмма характеризует не только скриптовые языки, но и множество обычных языков программирования. Это информационный шум, т.е. мусор в случае вашей темы доклада.Где сравнение языков большой тройки?
  • Длинных предложений (в 4 строки) следует избегать. Презентация – это краткий конспект, а не запись речи.
  • Не мало ли единственного источника, к тому же 10-летней давности, для такой объемной темы?

Scripting languages Scripting languages Presentation Transcript

  • Санкт-Петербургский Государственный Политехнический Университет Спиртовые напитки Скриптовые языки. Часть1 Доклад на семинаре по специальности Студент гр. 4057/2 Лев Панов 26.10.2012
  • Содержание1. Определение скриптового языка2. Сравнение компилируемых и скриптовых языков3. Разновидности скриптов по области применения4. Обзор отдельных представителей скриптовых языков 1. Unix shell – встроенный язык командного интерпретатора 2. AppleScript, PowerShell – управление ОС Mac OS X и Windows 3. Perl – язык извлечения данных и составления отчётов 4. Python – быстрая разработка и читаемость кода 5. Ruby – «настоящий объектно-ориентированный язык» 6. QML – быстрая разработка мобильных приложений5. Заключение: в чем секрет популярности скриптовых языков Скриптовые языки. Часть1 2
  • Определение скриптового языкаСкриптовый язык - «высокоуровневый язык программирования для написания сценариев» (Wikipedia)Скрипт (от англ. script – сценарий) — запись последовательности действий — программа или часть программы, исходный код которой может быть легко получен, в том числе пользователем, и изменён в процессе использования, разработки и отладки«A script is what you give the actors. A program is what you give the audience.» (Larry Wall) Скриптовые языки. Часть1 3
  • Что можно считать скриптовым языком?Для скриптового языка типично:1. Быть интерпретируемым (возможно, с помощью байткода)2. Высокоуровневые типы данных (списки, ассоциативные массивы и т.д.)3. Сборщик мусора4. Среда выполнения может быть интегрирована со скриптовой программой5. Можно использовать модули, написанные на более низкоуровневых языках Скриптовые языки. Часть1 4
  • Сравнение компилируемых и скриптовых языков Компилируемый код Скрипт• Единожды компилируется в • [Транслируется в байт-код и] машинный код, а потом много раз выполняется интерпретатором запускается• Оптимизация специфичных • Циклы и вызовы процедур не участков кода (циклов, условий) ; оптимизируются [не всегда так] под конкретную архитектуру CPU• Ошибки на этапе компиляции • Исполняется даже если есть ошибки• Для многоплатформенности есть • Многоплатформенность есть и так множество фреймворков Скриптовые языки. Часть1 5
  • Разновидности скриптов Web Scripting(по области применения) • Склеивающая прослойка для программных компонентовКомандный скрипт - • Автоматизация мелких прикладных задач “клей” • Системное администрирование • Расширение функциональности отдельных приложений • Игры: управление персонажами и игровой логикой Встраиваемые и • Написание плагинов встроенные • Макросы диалоговых программ • Дизайн пользовательского интерфейса • Полностью скриптовое приложение Самостоятельные • Обработка текста • Прикладные программы и игры Скриптовые языки. Часть1 6
  • Обзор отдельныхпредставителей скриптовыхязыков Скриптовые языки. Часть1 7
  • Unix shell• Командная оболочка, доступная в абсолютно любой UNIX- совместимой системе • Язык для автоматизации простых массовых задач • Команды — сторонние программы • Перенаправление ввода/вывода команд — построение цепочек обработки данных • Конструкции языка — простейшие условные и циклические операторы • Чистая интерпретация всегда • Переменные окружения Скриптовые языки. Часть1 8
  • Unix shell. История• 1971 Ken Thompson: Thompson shell, sh — простой интерпретатор без возможностей программирования• 1977 Stephen Bourne: Bourne Shell, sh — скриптовый язык с возможностью работы в качестве командного интерпретатора• 1978 Bill Joy: C Shell, csh — командный интерпретатор и скриптовый язык с синтаксисом похожим на C• 1980 David Korn: Korn Shell, ksh — объединение лучших сторон C Shell и Bourne Shell, с синтаксисом второго• 1989 Brian Fox: Bourne-again shell, bash — свободная, модернизированная вариация Bourne Shell• 1990 Paul Falstad: Z Shell, zsh — расширенный Bourne Shell с некоторыми возможностями из bash, ksh и csh Скриптовые языки. Часть1 9
  • Unix shell. Примеры кода Конвертация всех jpg в png с перенумерацией#!/bin/bashnum = 0for img in ‘find - name ’*. jpg ’ | sort ‘; do num = ‘expr $num + 1‘ if convert $ {img} ‘printf "page-%02d.png" $num‘; then rm img else echo error: failed to convert "$img" >&2 exit 1 fidoneecho all conversions successfulexit 0 Скриптовые языки. Часть1 10
  • Послать заданный сигнал каждому процессу из списка#!/bin/bashpids=""signal=""find_pid() { while test $# -gt 0; do name=$1 shift; ps -A -o pid,comm | grep -F " ${name}" | awk {print $1;} done} $ killall.sh vlc python firefox -KILL -- -login | bashwhile test $# -gt 0; do arg=$1 shift; case ${arg} in --) pids="${pids} $(find_pid "$@")"; break;; -*) signal="${arg}";; *) pids="${pids} $(find_pid "$arg")";; esacdoneecho kill ${signal} ${pids} Скриптовые языки. Часть1 11
  • Повседневные полезности# Проверить все хосты на уязвимостиfor host in $ { hosts }; do echo " >>> $ { host } " ; ssh $ { host } glsa - check -t all ;done & > security_check . log# Убить все процессы пользователя mikekill -9 ‘ ps aux | grep " ^ $mike " ‘# Рекурсивно распаковать rar архивы в сожержащий их каталогfind . -name *.rar -execdir unrar e {} ;# Вывести количество файлов в поддиректориях до уровня вложенности 5find -maxdepth 5 -type d | while read -r dir; do printf "%s:t" "$dir"; find "$dir" | wc -l; done# Очистить системный кэш от файлов старее неделиfind /var/cache -not -mtime -7 | xargs rm# Забыли выполнять последнюю команду с правами root’аsudo !!# BC-встроенный язык для численных расчетовresult=$(echo "scale=2; 5 * 7 / 3;" | bc) #11.66result=$((5 * 7 /3)) #11echo scale=1000; 4*a(1) | bc –l #π до 1000 знака Скриптовые языки. Часть1 12
  • > Unix shell. Критика Обширные возможности при крайней простоте и малом размере Наличие на любой POSIX-совместимой системе Интерактивная отладка $ bash -x script-name Низкая скорость работы; каждая команда - новый процесс Плохая переносимость и масштабируемость «It is easier to port a shell than a shell script.» (Larry Wall) Оружие разрушения rm -rf */ rm -rf * / echo "some line" >> file echo "some line" > file Не подходит для больших и сложных задач; для обработки данных Скриптовые языки. Часть1 13
  • PowerShell• Появился в: 2006• Разработчик: Microsoft Corporation• Расширяемое средство автоматизации: командная оболочка + скриптовый язык• Построен на базе Microsoft .NET Framework и интегрирован с ним• Командлеты: специализированные классы .NET • Можно комбинировать их в скриптах • Выполняют отдельные административные задачи• Можно обращаться к обычным классам .NET, объектам Windows Management Instrumentation или COM• Механизм встраивания • Приложения предоставляют свои командлеты • Графический интерфейс управления поверх PowerShell Скриптовые языки. Часть1 14
  • PowerShell. Примеры кода# Убить процессы, начинающиеся на ‘p’Get-Process p* | Stop-Process ps p* | kill# Убить процессы, использующие слишком много памятиGet-Process | Where-Object WS -gt 1000MB | Stop-Process# Посчитать число байтов в файлах текущего каталогаGet-Childitem | Measure-Object -Property Length –Sum# Скачать RSS-канал и показать заголовки восьми последних записей$rssUrl = http://blogs.msdn.com/powershell/rss.aspx‘$blog = [xml](new-object System.Net.WebClient).DownloadString($rssUrl)$blog.rss.channel.item | select title -first 8# Вызвать статический метод .NET объекта[System.Math]::Sqrt(16) #4# Исполнить внешнюю команду с параметрами[Array]$arguments = -h, 15, www.Wikipedia.com‘tracert $arguments# Получить серийный номер удаленного компьютера из WMIGet-WmiObject -ComputerName MyServer -Class Win32_BIOS | Select-Object SerialNumbergwmi -co MyServer Win32_BIOS | select SerialNumber# Командлет с помощьюGet-Help Скриптовые языки. Часть1 15
  • AppleScriptПоявился в: 1993Разработчик: Apple Inc.Классы языка: объектно-ориентированный, натуральныйТипизация данных: динамическая, слабая• Является компонентой Mac OS начиная с System 7• Интегрируется в Cocoa приложения• Можно посылать команды объектам во многих приложениях, включая непосредственно Mac OS X• Script Editor – стандартное средство разработки• Поддержка Unicode с AppleScript 2.0 [Mac OS X Leopard] Скриптовые языки. Часть1 16
  • AppleScript. Примеры кодаsay "This is a spoken sentence." using "Zarvox"tell application "Finder" empty the trash open the startup diskend telltell application "Microsoft Word" to quittell application "QuarkXPress" tell document 1 tell page 2 tell text box 1 set word 5 to "Apple" end tell end tell end tellend tellpixel 7 of row 3 of TIFF image "my bitmap" Скриптовые языки. Часть1 17
  • set theLength to the length of "I am― -- 4set nonsensical to "fifteen" – 3 -- 12set coercedToNumber to "15" as number -- 15set coercedToString to 12 as string – “12”set myList to {"a", "b", "c", "d", "e", "f", "g", "h"}set shortList to items 2 through 5 of myList -- {"b", "c", “d", "e"}set x to some item of {"hearts", "clubs", "spades", "diamonds"}set cardType to "hearts"set stringAsList to cardType as list -- {"hearts"}set itemized to every character of "Hi there." -- {"h","i"," ", ...} Скриптовые языки. Часть1 18
  • try -- commands to be tested set x to 1 / 0 say "You will never hear this!" on error -- error handling commands display dialog "Some error occured" end try say "The error does not stop this sentence being spoken"repeat 2 times on circleArea(radius) say ―AppleScript rulz" set area to pi * (radius ^ 2)end repeat end circleArea set areaCalculated to circleArea(3)repeat -- commands to be repeatedend repeat on circleCalculations(radius) set area to pi * (radius ^ 2)set total to 0 set circumference to 2 * pi * radiusrepeat with x in {1, 2, 3, 4, 5} return {area, circumference} set total to total + x set testVar to 3end repeat end circleCalculations Скриптовые языки. Часть1 19 set circleProperties to circleCalculations(10)
  • PerlПоявился в: 1987Автор: Ларри УоллКлассы языка: мультипарадигменный: императивный, объектно-ориентированный, функциональныйТипизация данных: динамическая Скриптовые языки. Часть1 20
  • Practical extraction and report language — “язык извлечения данных и составления отчётов”Девизы Perl 5• Есть больше одного способа это сделать• Простые вещи должны оставаться простыми, а сложные — стать выполнимымиОсобенности• Встроенные в язык регулярные выражения• Множество специальных синтаксических “трюков”• Гибкость структур данных и парадигмы программированияТипы данных в perl: $foo; # скаляр или указатель @foo; # массив %foo; # хеш-таблица &foo; # функция FOO; # дескриптор ввода-вывода или константа Скриптовые языки. Часть1 21
  • Perl. Примеры кода$x = 10; # число$y = $x + 1; # используем $x как число…$z = $x . string; # … а теперь — как строку$ref = $x; # $ref является указателем на $x$$ref = 10; # $x теперь содержит значение 10@array = (1,2,3,4); # записали в массив @array четыре элементаprint $array[2]; # напечатать третий элементprint @array[2,3]; # напечатать третий и четвертый элемент.# Здесь используется @, так как результат операции среза массива тоже является массивом. perl -e print "P1n256 256n", map {$_&($_>>8)?1:0} (0..0xffff) | display%hash = ( cat => kitten, # здесь => - это так называемая "длинная запятая", в этом примере dog => puppy, # по функции полностью аналогичная обыкновенной "," за исключением cow => calf # того, что литералы слева неявно заключаются в кавычки );print $hash{cat}; #Напечатает kittenprint join("-", keys %hash) ; # Вывод всех ключей. Напечатает cat-dog-cowprint join("-", values %hash) ; # Вывод всех значений. Напечатает kitten-puppy-calfprint join("-", %hash) ; # Напечатает cat-kitten-cow-calf-dog-puppy, так как в списковом контекстехэш автоматически разворачивается в список (ключ, значение). Так как ключи в хэше не сортируются,пары каждый раз будут выводиться в произвольном порядке. Скриптовые языки. Часть1 22
  • Perl. КритикаПлюсы• Простота, надежность и гибкость• CPAN (англ. Comprehensive Perl Archive Network —“всеобъемлющая сеть архивов Perl») — решения большинства задач • 114,447 модулей • в 25,970 пакетах • 10,119 авторов• Непревзойденная эффективность обработки текстовых данныхМинусы• Perl — один раз написал, через месяц ничего не понял и переписал• Высокий порог вхождения (подходит только для высококвалифицированных программистов)$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see Скриптовые языки. Часть1 23
  • PythonПоявился в: 1990Автор: Гвидо ван РоссумКлассы языка: мультипарадигменный: объектно-ориентированный, императивный, функциональный, аспектно-ориентированныйТипизация данных: строгая, динамическая (утиная) Скриптовые языки. Часть1 24
  • Назван в честь комедийного телешоу 1970-х «Летающий цирк Монти Пайтона»Философия Python [import this]1. Красивое лучше, чем уродливое.2. Читаемость имеет значение.3. Особые случаи не настолько особые, чтобы нарушать правила.4. Ошибки никогда не должны замалчиваться.5. Встретив двусмысленность, отбрось искушение угадать.6. Должен существовать один — и, желательно, только один — очевидный способ сделать это.7. Хотя он поначалу может быть и не очевиден, если вы не голландец.Особенности• Акцент на производительность разработчика и читаемость кода• Минималистичность ядра• Расширяемость стандартными библиотеками• Много разных интерпретаторов Скриптовые языки. Часть1 25
  • Python. Особенности языкаСтиль кодирования жестко регламентированdef distance(arg1, arg2): def distance(arg1, arg2):return abs(arg1 - arg2) return abs(arg1 - arg2)print distance(-2, 3)) print distance(-2, 3) File "python", line 2 5 return abs(arg1 - arg2) ==> Thats correct! ^IndentationError: expected an indented block Скриптовые языки. Часть1 26
  • Python. Особенности языкаТипы данных• bool, int[C long], float[C double], long[точность не ограничена], complex• Стандартная библиотека: Fraction[дробь], decimal[float с заданной точностью]• Строка [неизменяема] str( Wikipedia‘ )• Список list( [4.0, string, True] )• Кортеж [неизменяем] tuple( (4.0, string, True) )• Словарь dict( {key1: 1.0, 3: False} )• Множество[без дубликатов] set( [4.0, string, True] )Дополнительно• Все значения являются объектами, в том числе функции, методы, модули• Можно описывать классы ИЛИ типы в модулях расширения [на C]• Система классов: одиночное и множественное наследование, метапрограммирование, полная интроспекция• Объекты • Атомарные: при присваивании копируется значение • Ссылочные: копируется указатель на объект Скриптовые языки. Часть1 27
  • # Множественное (tuple) присваиваниеparents, babies = (1, 0)while babies < 100: print This generation has {0} babies.format(babies) parents, babies = (babies, parents + babies)# Работа с регулярными выражениямиimport refor test_string in [555-1212, ILL-EGAL]: if re.match(r^d{3}-d{4}$, test_string): print test_string, is a valid US local phone number else: print test_string, rejected‘# Словари, выражения-генераторыprices = {apple: 0.40, banana: 0.50}my_purchase = { apple: 1, banana: 6}grocery_bill = sum(prices[fruit] * my_purchase[fruit] for fruit in my_purchase)print I owe the grocer $%.2f % grocery_bill Скриптовые языки. Часть1 28
  • RubyПоявился в: 1995Автор: Юкихиро МацумотоКлассы языка: мультипарадигменный: объектно-ориентированный, императивный, функциональныйТипизация данных: строгая, динамическая (утиная) Скриптовые языки. Часть1 29
  • Мотивация:• Perl — устаревший язык с гибкой парадигмой• Python — недостаточно ООП“Python мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой надязыком” (Юкихиро Мацумото)Особенности• Стабильность возможностей• Минимизация работы программиста• Полностью ОО • объект = данные • метод = функция• Переменная = ссылка на объект Скриптовые языки. Часть1 30
  • Ruby. Пример кодаclass HexNum < Numeric # Create a new instance from an int or String. def initialize(val) case val when String @i = parse_string(val) @s = val.frozen? ? val : val.dup.freeze when Numeric @i = val.to_i else raise ArgumentError, Cannot convert %p % val end endenda = HexNum.new(0xFFFF)==> #<Context::HexNum:0x000000014e8328 @i=65535> Скриптовые языки. Часть1 31
  • Ruby. КритикаПлюсы• Гибкость структур• Поддержка множества современных технологий• Встроенная поддержка YAML [формат сериализации данных]• Perl-подобная обработка данных• RubyGems — поиск и проверка нужных расширенийМинусы• Идеология ООП превыше здравого разума• Плохая совместимость между версиями пакетов• Высокие требования к ресурсамОбласти применения• Массовое системное администрирование: системы Puppet, Chef• Web: Ruby On Rails Скриптовые языки. Часть1 32
  • Perl• Гибкость структур и многообразие возведенные в основу• Синтаксис изобилующий специализированными “трюками”Python• Читаемость кода, высокая скорость прототипирования• Потеря гибкости ради единообразия подходов• Стабильность при активном развитии• “Встроенные” системы документирования и тестирования• Простой механизм интеграции не-скриптовых частейRuby• Минимум специального синтаксиса• Гибкость структур данных и подходов• Жесткость структуры ООП Скриптовые языки. Часть1 33
  • Будущее языков “большой тройки”Текущее состояниеPerl Язык обработки данных и сложного администрированияPython Язык внутренней логики и язык самостоятельных приложенийRuby Язык массового администрирования и Web-приложенийПрогнозPerl Останется популярным среди “хакеров”Python Дальнейшая экспансия в внутреннюю логику и приложенияRuby Развитие в текущих областях применения Скриптовые языки. Часть1 34
  • QMLПоявился в: 2009Разработчик: NokiaКлассы языка: декларативныйТипизация данных: динамическая, строгая• Основан на JavaScript• Часть Qt Quick - высокоуровневой технологии для создания приложений• Мобильные приложения, работающие и на настольных компьютерах • Идея Look & Feel• Интеграция с C++ кодом на Qt• Вызов JavaScript функций• WYSIWYG редактор • Нет необходимости быть опытным разработчиком Скриптовые языки. Часть1 35
  • Популярностьскриптовыхязыков Индекс популярности языков TIOBE Programming Community за октябрь 2012 Скриптовые языки. Часть1 36
  • Заключение: в чем секретпопулярности СЯПростота разработки• Высокая скорость “компиляции”• Высокоуровневость• Эффективность отладкиУдобство использования• Расширяемость и гибкость• Возможность интеграции скрипта разными языками• Возможность интеграции разных языков в скрипты Скриптовые языки. Часть1 37
  • Использованные источники1. Alexander Kanavin An overview of scripting languages, 2002 ww.sensi.org/~ak/impit/studies/report.pdf2. http://www.applescript.ru3. http://www.perl.org4. http://python.org5. http://www.python.ru/files/book-ods.pdf6. http://diveinto.python.ru7. http://www.ruby-lang.org Скриптовые языки. Часть1 39