Scripting languages

  • 688 views
Uploaded on

 

More in: News & Politics
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
688
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
8
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Примеры интеграции с blender или gimp
  • Диаграмма характеризует не только скриптовые языки, но и множество обычных языков программирования. Это информационный шум, т.е. мусор в случае вашей темы доклада.Где сравнение языков большой тройки?
  • Длинных предложений (в 4 строки) следует избегать. Презентация – это краткий конспект, а не запись речи.
  • Не мало ли единственного источника, к тому же 10-летней давности, для такой объемной темы?

Transcript

  • 1. Санкт-Петербургский Государственный Политехнический Университет Спиртовые напитки Скриптовые языки. Часть1 Доклад на семинаре по специальности Студент гр. 4057/2 Лев Панов 26.10.2012
  • 2. Содержание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
  • 3. Определение скриптового языкаСкриптовый язык - «высокоуровневый язык программирования для написания сценариев» (Wikipedia)Скрипт (от англ. script – сценарий) — запись последовательности действий — программа или часть программы, исходный код которой может быть легко получен, в том числе пользователем, и изменён в процессе использования, разработки и отладки«A script is what you give the actors. A program is what you give the audience.» (Larry Wall) Скриптовые языки. Часть1 3
  • 4. Что можно считать скриптовым языком?Для скриптового языка типично:1. Быть интерпретируемым (возможно, с помощью байткода)2. Высокоуровневые типы данных (списки, ассоциативные массивы и т.д.)3. Сборщик мусора4. Среда выполнения может быть интегрирована со скриптовой программой5. Можно использовать модули, написанные на более низкоуровневых языках Скриптовые языки. Часть1 4
  • 5. Сравнение компилируемых и скриптовых языков Компилируемый код Скрипт• Единожды компилируется в • [Транслируется в байт-код и] машинный код, а потом много раз выполняется интерпретатором запускается• Оптимизация специфичных • Циклы и вызовы процедур не участков кода (циклов, условий) ; оптимизируются [не всегда так] под конкретную архитектуру CPU• Ошибки на этапе компиляции • Исполняется даже если есть ошибки• Для многоплатформенности есть • Многоплатформенность есть и так множество фреймворков Скриптовые языки. Часть1 5
  • 6. Разновидности скриптов Web Scripting(по области применения) • Склеивающая прослойка для программных компонентовКомандный скрипт - • Автоматизация мелких прикладных задач “клей” • Системное администрирование • Расширение функциональности отдельных приложений • Игры: управление персонажами и игровой логикой Встраиваемые и • Написание плагинов встроенные • Макросы диалоговых программ • Дизайн пользовательского интерфейса • Полностью скриптовое приложение Самостоятельные • Обработка текста • Прикладные программы и игры Скриптовые языки. Часть1 6
  • 7. Обзор отдельныхпредставителей скриптовыхязыков Скриптовые языки. Часть1 7
  • 8. Unix shell• Командная оболочка, доступная в абсолютно любой UNIX- совместимой системе • Язык для автоматизации простых массовых задач • Команды — сторонние программы • Перенаправление ввода/вывода команд — построение цепочек обработки данных • Конструкции языка — простейшие условные и циклические операторы • Чистая интерпретация всегда • Переменные окружения Скриптовые языки. Часть1 8
  • 9. 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
  • 10. 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
  • 11. Послать заданный сигнал каждому процессу из списка#!/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
  • 12. Повседневные полезности# Проверить все хосты на уязвимости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
  • 13. > 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
  • 14. PowerShell• Появился в: 2006• Разработчик: Microsoft Corporation• Расширяемое средство автоматизации: командная оболочка + скриптовый язык• Построен на базе Microsoft .NET Framework и интегрирован с ним• Командлеты: специализированные классы .NET • Можно комбинировать их в скриптах • Выполняют отдельные административные задачи• Можно обращаться к обычным классам .NET, объектам Windows Management Instrumentation или COM• Механизм встраивания • Приложения предоставляют свои командлеты • Графический интерфейс управления поверх PowerShell Скриптовые языки. Часть1 14
  • 15. 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
  • 16. AppleScriptПоявился в: 1993Разработчик: Apple Inc.Классы языка: объектно-ориентированный, натуральныйТипизация данных: динамическая, слабая• Является компонентой Mac OS начиная с System 7• Интегрируется в Cocoa приложения• Можно посылать команды объектам во многих приложениях, включая непосредственно Mac OS X• Script Editor – стандартное средство разработки• Поддержка Unicode с AppleScript 2.0 [Mac OS X Leopard] Скриптовые языки. Часть1 16
  • 17. 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
  • 18. 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
  • 19. 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)
  • 20. PerlПоявился в: 1987Автор: Ларри УоллКлассы языка: мультипарадигменный: императивный, объектно-ориентированный, функциональныйТипизация данных: динамическая Скриптовые языки. Часть1 20
  • 21. Practical extraction and report language — “язык извлечения данных и составления отчётов”Девизы Perl 5• Есть больше одного способа это сделать• Простые вещи должны оставаться простыми, а сложные — стать выполнимымиОсобенности• Встроенные в язык регулярные выражения• Множество специальных синтаксических “трюков”• Гибкость структур данных и парадигмы программированияТипы данных в perl: $foo; # скаляр или указатель @foo; # массив %foo; # хеш-таблица &foo; # функция FOO; # дескриптор ввода-вывода или константа Скриптовые языки. Часть1 21
  • 22. 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
  • 23. Perl. КритикаПлюсы• Простота, надежность и гибкость• CPAN (англ. Comprehensive Perl Archive Network —“всеобъемлющая сеть архивов Perl») — решения большинства задач • 114,447 модулей • в 25,970 пакетах • 10,119 авторов• Непревзойденная эффективность обработки текстовых данныхМинусы• Perl — один раз написал, через месяц ничего не понял и переписал• Высокий порог вхождения (подходит только для высококвалифицированных программистов)$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see Скриптовые языки. Часть1 23
  • 24. PythonПоявился в: 1990Автор: Гвидо ван РоссумКлассы языка: мультипарадигменный: объектно-ориентированный, императивный, функциональный, аспектно-ориентированныйТипизация данных: строгая, динамическая (утиная) Скриптовые языки. Часть1 24
  • 25. Назван в честь комедийного телешоу 1970-х «Летающий цирк Монти Пайтона»Философия Python [import this]1. Красивое лучше, чем уродливое.2. Читаемость имеет значение.3. Особые случаи не настолько особые, чтобы нарушать правила.4. Ошибки никогда не должны замалчиваться.5. Встретив двусмысленность, отбрось искушение угадать.6. Должен существовать один — и, желательно, только один — очевидный способ сделать это.7. Хотя он поначалу может быть и не очевиден, если вы не голландец.Особенности• Акцент на производительность разработчика и читаемость кода• Минималистичность ядра• Расширяемость стандартными библиотеками• Много разных интерпретаторов Скриптовые языки. Часть1 25
  • 26. 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
  • 27. 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
  • 28. # Множественное (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
  • 29. RubyПоявился в: 1995Автор: Юкихиро МацумотоКлассы языка: мультипарадигменный: объектно-ориентированный, императивный, функциональныйТипизация данных: строгая, динамическая (утиная) Скриптовые языки. Часть1 29
  • 30. Мотивация:• Perl — устаревший язык с гибкой парадигмой• Python — недостаточно ООП“Python мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой надязыком” (Юкихиро Мацумото)Особенности• Стабильность возможностей• Минимизация работы программиста• Полностью ОО • объект = данные • метод = функция• Переменная = ссылка на объект Скриптовые языки. Часть1 30
  • 31. 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
  • 32. Ruby. КритикаПлюсы• Гибкость структур• Поддержка множества современных технологий• Встроенная поддержка YAML [формат сериализации данных]• Perl-подобная обработка данных• RubyGems — поиск и проверка нужных расширенийМинусы• Идеология ООП превыше здравого разума• Плохая совместимость между версиями пакетов• Высокие требования к ресурсамОбласти применения• Массовое системное администрирование: системы Puppet, Chef• Web: Ruby On Rails Скриптовые языки. Часть1 32
  • 33. Perl• Гибкость структур и многообразие возведенные в основу• Синтаксис изобилующий специализированными “трюками”Python• Читаемость кода, высокая скорость прототипирования• Потеря гибкости ради единообразия подходов• Стабильность при активном развитии• “Встроенные” системы документирования и тестирования• Простой механизм интеграции не-скриптовых частейRuby• Минимум специального синтаксиса• Гибкость структур данных и подходов• Жесткость структуры ООП Скриптовые языки. Часть1 33
  • 34. Будущее языков “большой тройки”Текущее состояниеPerl Язык обработки данных и сложного администрированияPython Язык внутренней логики и язык самостоятельных приложенийRuby Язык массового администрирования и Web-приложенийПрогнозPerl Останется популярным среди “хакеров”Python Дальнейшая экспансия в внутреннюю логику и приложенияRuby Развитие в текущих областях применения Скриптовые языки. Часть1 34
  • 35. QMLПоявился в: 2009Разработчик: NokiaКлассы языка: декларативныйТипизация данных: динамическая, строгая• Основан на JavaScript• Часть Qt Quick - высокоуровневой технологии для создания приложений• Мобильные приложения, работающие и на настольных компьютерах • Идея Look & Feel• Интеграция с C++ кодом на Qt• Вызов JavaScript функций• WYSIWYG редактор • Нет необходимости быть опытным разработчиком Скриптовые языки. Часть1 35
  • 36. Популярностьскриптовыхязыков Индекс популярности языков TIOBE Programming Community за октябрь 2012 Скриптовые языки. Часть1 36
  • 37. Заключение: в чем секретпопулярности СЯПростота разработки• Высокая скорость “компиляции”• Высокоуровневость• Эффективность отладкиУдобство использования• Расширяемость и гибкость• Возможность интеграции скрипта разными языками• Возможность интеграции разных языков в скрипты Скриптовые языки. Часть1 37
  • 38. Использованные источники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