Лекція 1. Історія розвитку Perl
У цій лекції викладається історія розвитку мови програмування Perl, на особливості якого сильно вплинула особистість творця мови - Ларрі Уолла. Пояснюється лінгвістична основа мови Perl і його тісний зв'язок з філософією Unix. Розповідається про оригінальну культуру Perl, що об'єднує співтовариство Perl-програмістів. Далі йдеться про сфери застосування Perl і розповідається про розробку нової, 6-й версії мови Perl. Також даються короткі відомості про встановлення Perl під різними операційними системами.
Мета лекції: познайомитися з історією створення мови Perl, дізнатися принципи, що лежать в його основі, і джерела його особливостей. Крім того, отримати відомості, необхідні для установки системи програмування Perl.
Мова програмування Perl створив американський програміст Ларрі Уолл (Larry Wall) в 1987 році, коли він працював системним програмістом в компанії Unisys. Цілі, які переслідував Ларрі при розробці нової мови програмування, відображені в його назві - PERL, яке пізніше стало розшифровуватись Practical Extraction and Report Language, тобто "практичну мову вилучення" даних "і" створення "звітів". (Неважко помітити, що перші літери всіх слів назви становлять слово PEARL - "перли". Одна з легенд про походження Perl говорить, що в той час вже існував мову з такою назвою, тому Ларрі скоротив назву на одну букву, не змінивши вимови. По іронією долі, сьогодні ту мову не пам'ятає ніхто, крім істориків, а Perl відомий всьому світу. Хоча, за іншою версією, Ларрі назвав створений ним мову на ім'я своєї нареченої.
Мал. 1.1.Создатель мови Perl - Ларрі Уолл
Під час навчання в університеті Ларрі Уолл отримав не тільки комп'ютерне, але і лінгвістичне (а також хімічна і музичне) освіту, і це, безсумнівно, сильно вплинуло на особливості мови Perl. (Вихований в релігійній сім'ї, молодий Ларрі навіть збирався стати місіонером і присвятити своє життя наверненню до християнства тубільців, при необхідності створюючи для тубільних мов писемність, щоб перевести на них Біблію!) Розповідаючи про витоки Perl, Ларрі Уолл приводив схему, відтворену на рис. 1.2. на якій показано, що Perl з'явився в результаті злиття кількох, на перший погляд, несумісних ідей і дисциплін.
Мал. 1.2 Чинники, що вплинули на створення Perl
Важливе значення має принцип повторного використання. Людські мови тяжіють до використання обмеженого набору конструкцій для вираження різних значень і їх повторного застосування в різних контекстах. Відповідно до цього принципу, в Perl одні й ті ж конструкції мови мають різний зміст, а їх однозначне розуміння визначається контекстом використання.
Принцип контексту тісно пов'язаний з попереднім. Контекст використовується в природних мовах для правильної інтерпретації сенсу виразу. Підкоряючись цьому принципу, в мові Perl, наприклад, багато функцій повертають одне значення або список в залежності від контексту виклику: чи вимагає синтаксис виразу одиничного або множинного значення.
Принцип смислового підкреслення в природних мовах служить для залучення уваги до важливої частини висловлювання. При цьому виділяється частина зазвичай ставиться в початок пропозиції. У Perl програміст може скористатися цим принципом для акцентування сенсу, вибравши просте речення з модифікатором або умовну конструкцію, наприклад:
$ We-> shall (do ($ it)) if $ you-> want ($ it); # або
Принцип свободи в природних мовах передбачає, що завжди є кілька варіантів вираження однієї і тієї ж думки. Як і в природних мовах, в Perl одного і того ж результату можна досягти кількома способами, використовуючи різні виразні засоби мови. Це так званий принцип TIMTOWTDI- скорочення читається "Тім Тоуд" і розшифровується як "There is more than one way to do it": "є більш одного способу зробити щось". Відповідно до нього кожен розробник вибирає той варіант мовної конструкції, який більше підходить йому в конкретній ситуації, більше відповідає його стилю чи рівню знання мови.
Подібний підхід повністю протилежний строго формального погляду на мови програмування, коли головними цілями розробки стають однозначність і мінімізація мовних конструкцій. Але з точки зору психології і мовного мислення "лінгвістичний підхід" багато в чому більш продуктивний, як це не парадоксально! Адже він стимулює творчість, залучаючи людський досвід застосування природної мови, - і писати програми на Perl стає захоплююче і цікаво. Напевно, тому що програмують на Perl так люблять слівце "fun" (весело, забавно).
Ларрі не раз повторював, що Perl замислювався як мова, що передбачає постійний розвиток. Тому в процесі його вдосконалення, як і при розвитку "людських" мов, з інших мов програмування була запозичена все краще, практичне і зручне для розробника. На становлення Perl вплинули мови Ada, Basic, Fortran, Lisp, Pascal і, звичайно, мова C. Perl ввібрав в себе різні течії комп'ютерної науки: процедурне, модульне, функціональне і об'єктно-орієнтоване програмування, макрообработку тексту, а крім цього - культуру ОС Unix, з її багатим набором команд і утиліт, стрункою продуманої архітектурою і уніфікованим підходом до представлення даних.
Для тих, хто знайомий з операційною системою Unix, цей матеріал не буде новим. Але багатьом програмістам, що працюють з MS-DOS і Windows, важливо познайомитися з принципами програмування, заснованого на інструментальних засобах (software tools), яке зародилося і розвивалося разом з ОС Unix. Про них написали чудову книгу відомі програмісти Брайан Керниган (Brian W. Kernighan) і Філіп Плоджер (Philip Plauger). Ось основні положення цього підходу.
1 Для вирішення деякої задачі розробляються програми невеликого розміру, кожна з яких виконує одну функцію розв'язуваної задачі.
2 Поставлена задача вирішується шляхом взаємодії невеликих програм за рахунок послідовної обробки даних кожної з них.
3 При розробці цих невеликих програм слід орієнтуватися на їх максимально незалежне використання, щоб їх можна було застосовувати для вирішення інших завдань. Таким чином, поступово створюються інструментальні засоби (ІС) для подальшого універсального застосування.
4 Більшість інструментальних засобів розробляються у вигляді програм, що представляють собою фільтри, які читають потік даних зі стандартного вводу і записують оброблені дані в стандартний висновок.
5 Об'єднання інструментальних засобів в додатку проводиться засобами командного мови ОС: перенаправлення вводу-виводу, створення програмних конвеєрів (напрямок вихідного потоку однієї програми на вхід іншого).
6 Основним форматом даних, що зберігаються для інструментальних засобів виступають текстові файли, однаково добре підходять для програмної обробки і читання їх людиною.
7 Для ефективної обробки слабо структурованої текстової інформації застосовуються регулярні вирази (кошти пошуку по шаблонах, про які йтиметься в лекції 8).
У мові Perl до ідей Unix додалися досягнення інших мов програмування, і все це було перероблено відповідно до лінгвістичними принципами і вимогами практичного застосування мови. Положення філософії мови Perl були викладені Ларрі Уоллом в його знаменитій книзі "Програмування на Perl" і в безлічі статей та інтерв'ю. Вони часто укладені в форму витончених і дотепних афоризмів. Один з них говорить: "Perl розроблений так, щоб легко вирішувати прості завдання, а важкі робити можливими". А емблемою Perl став верблюд - домашня тварина, що не блискуче красою і витонченістю, але володіє унікальними здібностями для виконання важкої, що здається неможливою, роботи в екстремальних умовах.
Perl створювався як практичний мову, а яка ж практичність без швидкості? Програми на Perl традиційно відрізняються високою швидкістю виконання і по швидкодії можна порівняти з відкомпілювалися Unix-утилітами. Швидкість роботи досягається за рахунок того, що виконуюча система Perl читає вихідний текст Perl-програми і компілює його "на льоту", потім відразу інтерпретує відкомпільоване програму. Говорячи про цю унікальну виконуючої системи, що поєднує в собі компілятор і інтерпретатор, прийнято називати її perl (малими літерами, на відміну від мови програмування Perl).
Ларрі Уолл жартома (в якій, як водиться, є чимала частка істини) проголосив три головних чесноти програміста: лінь, нетерпіння, зарозумілість (laziness, impatience, hubris). І Perl спроектований так, щоб відповідати цим якостям розробника. "Лінивий" програміст, часто обмежений у часі, може написати програму максимально компактно і швидко, оскільки в Perl є безліч способів коротко і просто записати досить складні алгоритми. До того ж будь-які символи не є обов'язковими, якщо їх відсутність не змінює сенсу програми. Наприклад, звичайну умовну конструкцію
можна написати і по-іншому - без пробілів і дужок, перемістивши умова в кінець оператора:
Часто зовнішні обставини спонукають нас до якнайшвидшому досягненню мети. Але при програмуванні на Perl терпіння програміста піддається мінімальному випробуванню, оскільки Perl-скрипт буде працювати без попередньої компіляції і виконується дуже швидко. І нарешті, система програмування Perl пропонує надзвичайно широкий набір засобів, щоб реалізувати самі амбітні проекти будь-якого програміста, навіть з гіпертрофованим зарозумілістю.
У мові Perl враховані багато психологічні особливості програмістів, в тому числі навіть програмістська схильність "до економії зусиль". Наприклад, більш часто вживаються конструкції мови записуються коротко, а рідко використовувані - довше. У цьому полягає так званий принцип "кодування Хаффмана", назва якого походить від широко використовується методу стиснення даних бітовими послідовностями змінної довжини, запропонованим Девідом Хаффманом (D.A. Huffman).
Принцип "відсутності вбудованих обмежень", якому при всякій нагоді слідують розробники Perl, передбачає максимум свободи для програміста, наприклад: довжина імені змінної може досягати 252, в рядках можуть зберігатися будь-які виконавчі дані, рядок може займати всю доступну пам'ять, обсяг використовуваної пам'яті обмежується тільки ОС.
У наступних лекціях будуть порушені й інші принципи і положення філософії Perl, а також проілюстровані вже згадані.
До теперішнього часу в світі утворилося численне міжнародне співтовариство програмістів, які пишуть на Perl (жартівливо зване Perlfolk - "народ Perl"). По всьому світу створені групи користувачів мови Perl. Деякі (але далеко не всі) з них зареєстровані в списку на сайті. Розвитку, просуванню і поширенню мови Perl сприяло чимало видатних програмістів, серед них: Тім Банс (Tim Bunce), Грехем Барр (Graham Barr), Малькольм Бітті (Malcolm Beattie), Хуго Ван Дер занде (Hugo van der Sanden), Ілля Захаревич ( Ilya Zakharevich), Нік Інг-Сіммонс (Nick Ing-Simmons), Гурусамі Сараті (Gurusamy Sarathy), Лінкольн Штейн (Lincoln Stein) і багато інших, а також тисячі шанувальників цієї мови в усьому світі. Велику підтримку мови Perl і всьому руху програмного забезпечення з відкритим кодом (open source software) робить відомий книжковий видавець Тім О'рейллі (Tim O'Reilly).
Про мову Perl написано багато чудових книг, серед них потрібно особливо виділити класичні книги видавництва O'Reilly з зображеннями тварин на обкладинці. Мабуть, ось найвідоміші книги з цієї серії:
[X]. "Книга з ламою" ( "the Llama Book"), в російській перекладі "Вивчаємо Perl" - відмінний підручник для початкового знайомства з мовою, написаний відомим "Perl- проповідником" Рендалу Шварцем (Randal L. Schwartz).
[X]. "Книга з бараном" ( "the Ram Book"), "Perl. Збірник рецептів" - значний збірник готових рішень на Perl для безлічі типових задач, складений розробниками мови Томом Крістіансеном (Tom Christiansen) і Натаном Торгінгтоном (Nathan Torkington).
Програмістів, які пишуть на Perl, об'єднує не тільки любов до цієї мови, а й особливий азартний і пустотливий дух спільноти розробників, які вміють не тільки добре працювати, а й весело відпочивати. Веселий тон спільноті задає все той же Ларрі Уолл, відомий жартівник і балагур, який в офіційній документації дає таке пустотливе визначення мови: "Насправді Perl позначає паталогічна Еклектичний Распечативатель нісенітниця, але тільки не кажіть нікому, що це сказав я". І сама мова Perl теж часто використовується для розваги. Наприклад, існує змагання по створенню "віршів на Perl" - компільованих Perl-програм, що читаються як осмислене вірш англійською мовою. Регулярно проводиться Obfuscated Perl Contest - конкурс на саму туманну програму на Perl з використанням найбільш нелегкою і заплутаних конструкцій мови. Є також змагання з написання так званих "однострочнікі" (one-liners) - повноцінних і корисних програм на Perl, які складаються з одного рядка, зазвичай вводиться в якості параметра при запуску інтерпретатора Perl. Познайомитися з деякими корисними однострочнікі можна, прочитавши серію статей Бена Живокосту (Ben Okopnik) для "Linux-газети", витриманих в детективному дусі, в блискучому перекладі Павла Соколова на сайті.
Користувачі однієї з ОС сімейства Unix, швидше за все, будуть користуватися вже встановленою системою програмування Perl, що поставляється з ОС. Але якщо Perl не встановлено, то вихідні тексти найсвіжішої версії завжди можна завантажити з сайту CPAN і скомпілювати, керуючись поставляється докладною документацією. Готові відкомпілювалися дистрибутиви Perl для самих різних операційних систем перераховані на сайті CPAN (). Все, що потрібно для установки Perl на комп'ютери Apple, можна знайти на сайті. Для користувачів MS Windows можна порекомендувати зручний дистрибутив від компанії ActiveState () або комплект PXPerl (pixigreg.com/?pxperl), що включає в себе безліч корисних бібліотек, а також робочі реалізації Perl 6 і Parrot для тих, хто хоче ознайомитися з можливостями нової версії . Тим, хто має намір займатися розробкою на Perl додатків для Інтернету, можна порадити дистрибутив Perl в комплекті з сервером Apache і більшістю необхідних модулів. Його можна завантажити з сайту perl.apache.org.
Установка Perl з бінарного дистрибутива зазвичай не представляє труднощів і зводиться до розпакуванні файлів із завантаженого архіву. Для зручності роботи ім'я каталогу з виконуваними файлами perl додається в системний список шляхів для пошуку виконуваних програм (в змінну оточення PATH). Зазвичай всі необхідні дії по установці виконує програма-інсталятор. Після завершення установки потрібно перевірити доступність виконуючої системи perl. Це можна зробити, виконавши таку команду (в термінальному вікні Unix, в командному вікні Windows або у вікні інтерпретатора cmd на Pocket PC):
This is perl, v5.8.7 built for MSWin32-x86-multi-thread
Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl 'or` perldoc perl'. If you have access to the
Якщо ви побачили подібне повідомлення, значить, Perl коректно встановлений і готовий до використання, так що можна вже приступати до його вивчення. Чим ми і займемося, починаючи з наступного лекції.
Текст призначений тільки для попереднього ознайомчого читання.
Публікація даних матеріалів не переслідує за собою ніякої комерційної вигоди.
Всі права на вихідні матеріали належать відповідним
організаціям і приватним особам.