Як розвивався Perl — незвичайний мовами, створений лінгвістом для програмістів



Мова програмування Perl створив Ларрі Уолл (Larry Wall) в 1987 році, коли він працював системним програмістом в американській компанії Unisys. Цілі, які переслідував Ларрі при розробці нової мови програмування, відображені в його назві — PERL, яке пізніше стало розшифровуватися як Practical Extraction and Report Language, тобто «практичний мова витягування „даних“ і „створення звітів».

Одна з легенд про походження Perl свідчить, що в той час уже існував мову з такою назвою, тому Ларрі скоротив назву на одну букву, не змінивши вимови. За іронією долі, сьогодні той язик не пам'ятає ніхто, крім істориків, а Perl відомий всьому світу.

Хоча, за іншою версією, Ларрі назвав створений їм мову по імені своєї нареченої.


Ларрі Уолл

На становлення Perl вплинули мови Ada, Basic, Fortran, Lisp, Pascal і, звичайно, мову C. Perl ввібрав в себе різні течії комп'ютерної науки: процедурне, модульне, функціональне і об'єктно-орієнтоване програмування, макрообработку тексту, а крім цього — культуру ОС Unix, з її багатим набором команд і утиліт, стрункою продуманої архітектурою і уніфікованим підходом до подання даних.

Спадщину Unix

Вирішальний вплив на розвиток мови Perl надала середовище Unix, в якій він розроблявся. З самого початку ця операційна система створювалася невеликою групою програмістів для самих себе. Тому принципи, закладені в ній, орієнтовані на зручність повсякденного застосування людиною: все робилося максимально функціонально, коротко, одноманітно. Наприклад, більшість системних налаштувань зберігається у звичайному текстовому вигляді, так що їх може читати і виправляти чоловік, озброєний простим текстовим редактором.

Для тих, хто знайомий з операційною системою Unix, цей матеріал не буде новим. Але багатьом програмістам, що працюють з MS-DOS і Windows, важливо познайомитися з принципами програмування, заснованого на інструментальних засобах (softwaretools), яке зародилося і розвивалося разом з ОС Unix. Про них написали чудову книгу відомі програмісти Брайан Керниган (Brian W. Kernighan) і Філіп Плоджер (Philip Plauger). Ось основні положення цього підходу.

• Для рішення деякої задачі розробляються програми невеликого розміру, кожна з яких виконує одну функцію розв'язуваної задачі.

• Поставлена задача вирішується шляхом взаємодії невеликих програм за рахунок послідовної обробки даних кожної з них.

• При розробці цих невеликих програм слід орієнтуватися на їх максимально незалежне використання, щоб їх можна було застосовувати для вирішення інших завдань. Таким чином, поступово створюються інструментальні засоби (ІС) для подальшого універсального застосування.

• Більшість інструментальних засобів розробляються у вигляді програм, що представляють з себе фільтри, які читають потік даних зі стандартного вводу і записують оброблені дані в стандартний висновок.

• Об'єднання інструментальних засобів програми здійснюється засобами командного мови ОС: перенаправлення вводу-виводу, створення програмних конвеєрів (напрямок вихідного потоку однієї програми на вхід іншого).

• Основним форматом збережених даних для інструментальних засобів виступають текстові файли, однаково добре підходять для програмної обробки і читання їх людиною.

• Для ефективної обробки слабо структурованої текстової інформації застосовуються регулярні вирази.

Сприятливі фактори

Мова швидко поширився серед користувачів мережі Usenet. Незважаючи на те, що в операційній системі (ОС) Unix, для якої був створений Perl, вже були численні і різноманітні засоби для обробки текстової інформації (awk, csh, grep, sed та інші), новий мову полюбився величезному числу системних адміністраторів і програмістів. Він був легкий у вивченні і застосуванні: синтаксис схожий на С, Perl-програми не потрібно попередньо компілювати, вихідні тексти було легко модифікувати. А найголовніше — це був дійсно дуже практичний мова: з його допомогою легко вирішувалося більшість повсякденних завдань — від найпростіших до дуже складних.



Активно користуючись мовою Perl, програмісти з різних країн спрямовували Ларрі Уоллу пропозиції додати в нього нові можливості або поліпшити наявні. Поступово Perl перетворився із засобу обробки текстів в середовищі Unix в потужну універсальну систему програмування. В середині 1990-х років, у міру розвитку інтернету, Perl став улюбленим інструментом web-майстрів для створення динамічних сайтів і Інтернет-програмування.

Завдяки своїм потужним вбудованим засобам роботи з текстовими даними Perl широко використовується для обробки інформації в форматах HTML і XML.

Perl став неодмінним компонентом будь поставки ОС сімейства Unix (наприклад, FreeBSD, Linux або Solaris). Крім цього, до теперішнього часу Perl реалізований практично для всіх сучасних апаратних платформ (суперкомп'ютери, RISC, Macintosh, PC, надолонні комп'ютери) і операційних систем (AIX, Linux, Macintosh, MS-DOS, NetWare,OS/2, QNX, Solaris, Windows, VMS і так далі).

Це дає можливість легко переносити популярні Perl-програми з одного операційного оточення в інше. (До слова сказати, приклади до цього курсу лекцій перевірялися під операційними системами SuSE Linux 10.0, MS Windows XP Professional SP2, MS Pocket PC 2003Premium Edition v. 4.20).

Безсумнівно, його широкому застосуванню сприяло і те, що він розповсюджується безкоштовно на умовах однією з ліцензій: або GNU GeneralPublic License (GPL), або Artistic License — на вибір. Але головне, що в ньому є всі засоби, щоб відмінно виручати професіоналів і недосвідчених програмістів, коли потрібно швидко вирішувати різні системні та прикладні завдання — від найпростіших до дуже складних. В результаті Perl став одним з найуспішніших проектів руху open source (з відкритими вихідними кодами) — поряд з Apache, Linux, PHP і Python.

Незвичайний мову програмування

Принципи розробки Perl сильно відрізняються від тих, які застосовувалися в програмуванні до цього. Новаторський характер мови був пов'язаний з унікальними особливостями особистості автора, Ларрі Уолла, і його різнобічними інтересами.

Під час навчання в університеті Ларрі Уолл отримав лінгвістична освіта. Крім того, він займався програмуванням і працював в університетському комп'ютерному центрі.

Можливо, головна заслуга Ларрі як автора Perl полягає в тому, що йому вдалося створити мову, що враховує властивості та принципи природної мови: ситуативну багатозначність конструкцій, розумну надмірність (і за рахунок цього стильове розмаїття), максимальну адаптованість до різного рівня знань носіїв мови, гнучкість і виразність синтаксичних засобів. Все це додає особливий творчий смак самого процесу «письменництва» на цій мові.

Пишуть про мові Perl мимоволі вживають терміни «ідіома», «метафора», «синонім», «контекст» і т. п., зазвичай застосовувані до природних мов. А сам Ларрі Уолл, описуючи мову Perl, широко користується лінгвістичними термінами: іменник, дієслово, пропозицію, єдине і множинне число, займенник.

Видатний лінгвіст Б. Л. Уорф зауважив: «Мова формує наш спосіб мислити і визначає, про що ми можемо думати». Цю ж думку підтверджує Дж. Бентлі в книзі «Перлини творчості програмістів», описуючи випадок, коли саме особливості мови програмування APL наштовхнули розробника на оригінальне рішення задачі з масивами. У цьому сенсі Perl як мову для втілення задумів програміста, не сковує фантазію розробника, дає йому максимальну свободу самовираження, а іноді навіть підказує нестандартні рішення.

В якості недоліків мови згадують:
  • відсутність механізму статичної типізації;
  • надмірність мовних засобів;

  • відсутність модульності;
  • «перекручену» реалізацію ООП.

Лінгвістичні принципи Perl

Людські мови тяжіють до використання обмеженого набору конструкцій для вираження різних значень і їх повторного використання в різних контекстах. Згідно з цим принципом, в Perl одні і ті ж конструкції мови мають різний зміст, а їх однозначне розуміння визначається контекстом використання.

Принцип контексту тісно пов'язаний з попереднім. Контекст використовується в природних мовах для правильної інтерпретації сенсу виразу. Підкоряючись цим принципом, в мові Perl, наприклад, багато функції повертають одне значення або список залежно від контексту виклику: вимагає синтаксис вираження одиничного або множинного значення.

Принцип змістового підкреслення природних мовах служить для залучення уваги до важливої частини висловлювання. При цьому виділяється частина зазвичай ставиться в початок пропозиції. В Perl програміст може скористатися цим принципом для акцентування сенсу, вибравши просте речення з модифікатором або умовну конструкцію, наприклад:
$we->shall(do($it)) if $you->want($it); # або
if $you->want($it) { $we->shall(do($it)) }
Принцип свободи в природних мовах передбачає, що завжди є кілька варіантів вираження однієї й тієї ж думки. Як і у природних мовах, в Perl одного і того ж результату можна досягти кількома способами, використовуючи різні виразні засоби мови. Це так званий принцип TIMTOWTDI — скорочення читається «Тім Тоуди» і розшифровується як «There is more than one way to do it»: «є більше одного способу зробити щось». Згідно з ним кожен розробник вибирає той варіант мовної конструкції, який більше підходить йому в конкретній ситуації, більше відповідає його стилю чи рівнем знання мови.

Подібний підхід повністю протилежний суворо формального погляду на мови програмування, коли головними цілями розробки стають однозначність і мінімізація мовних конструкцій. Але з точки зору психології і мовного мислення «лінгвістичний підхід» багато в чому більш продуктивний, як це не парадоксально! Адже він стимулює творчість, залучаючи людський досвід застосування природної мови, — і писати програми на Perl стає захоплююче і цікаво. Напевно, тому що програмують на Perl так люблять слівце «fun» (весело, забавно).

Перші версії і «Верблюжа книга»

Ларрі Уолл почав розробку Perl в 1987 році, коли працював програмістом в Unisys. Версія 1.0 була випущена і анонсована 18 грудня 1987 року як «„заміна“ для awk і sed».

Perl 2 був випущений в 1988 році. Основним нововведенням в ньому був перероблений механізм регулярних виразів.

Perl 3, випущений в 1989 році, отримав можливість обробляти потоки двійкових даних.

Спочатку, єдиною документацією для Perl була єдина (величезної довжини) man-сторінка. У 1991 році була випущена книга «Programming Perl» (відома багатьом програмістам як «Верблюжа книга» (Camel Book) з-за зображення на обкладинці), яка де-факто, стала стандартом мови.



У той же самий час, версія мови була «піднята» до 4 й — не стільки щоб вказати на значні зміни, скільки щоб позначити, що ця версія мови документована книгою. Perl 4 пройшов через серію релізів, зупинившись на Perl 4.036 в 1993 році.

Perl 5

Розробка Perl 5 була розпочата в 1994 році. У той же час було створено список розсилки perl5-porters для координації роботи над портированием Perl 5 на різні платформи. Він досі залишається основним форумом з розроблення, обслуговування та портування Perl 5.

Perl 5.000 був випущений 17 жовтня 1994 року. Він включав в себе повністю переписаний інтерпретатор, а також багато нових мовних можливостей, таких, як об'єкти, посилання, локальні змінні (my $var_name) і модулі. Особливо важливою частиною були модулі, так як вони надали механізм розширення мови без модифікування інтерпретатора. Це дозволило стабілізувати інтерпретатор, але при цьому, дало можливість звичайним Perl-програмістів додавати в мову нові можливості. Perl 5 знаходиться в активній розробці донині.

Perl 5.001 був випущений 13 березня 1995 року. Perl 5.002 побачив світ 29 лютого 1996 року з новою підтримкою прототипів. Це дозволило авторам модулів створювати функції, які вели себе так само, як і вбудовані функції Perl. Версія Perl 5.003 з'явилася 25 червня 1996 року і усунула обнаружившиеся проблеми з безпекою.

Одне з найважливіших подій в історії Perl 5 трапилося за межами власне мови і було наслідком підтримки модулів. 26 жовтня 1995 року почала свою роботу CPAN (Comprehensive Perl Archive Network — «всеохоплююча мережа архівів Perl»), яка стала сховищем модулів Perl, а також вихідного коду самої мови. На даний момент мережа налічує понад 25 000 модулів, створених більш ніж 8000 програмістами.

Perl 5.004 був випущений 15 травня 1997 року і містив, крім усього іншого, пакет UNIVERSAL, який давав мови основний об'єкт, від якого автоматично відбувалися всі класи. Була також включена можливість запитувати версію модулів. В додаток до цього Perl став підтримувати Microsoft Windows, а також ряд інших операційних систем.

Perl 5.005 побачив світ 22 червня 1998 року. Цей реліз включав в себе кілька поліпшень процесора регулярних виразів, нові перехоплення в бекенд з допомогою модулів B::* оператор лапок qr// для регулярних виразів, великий вибір інших нових модулів, а також підтримку ряду операційних систем, зокрема, BeOS.

2000-і роки

Perl 5.6 був випущений 22 березня 2000 року. Головні зміни включали підтримку 64-бітних систем, подання рядків в стандарті Unicode, підтримку великих файлів (файли більше 2 Гб) і ключове слово our. Під час розробки Perl 5.6 було прийнято рішення змінити схему найменування версій на більш близьку до інших проектів з відкритим вихідним кодом. За версією 5.005_63 слідувала версія 5.5.640; згідно з планом, версіями в розробці повинні були присвоюватися непарні номери, стабільним версіями — парні.

У 2000 році Ларрі Уолл виступив із закликом до спільноти активно обговорювати пропозиції до наступної версії Perl. Результатом цього обговорення стал361 документ RFC (Request for Comments — запит коментарів»), які були використані в розробці Perl 6.

У 2001 році була розпочата робота над остаточним документом, підіб'є підсумок пропозицій до створення нового покоління Perl. Результат був представлений не у вигляді формального документа, а в якості зведення всіх RFC. До цього часу Perl 6 існував виключно у вигляді опису мови.

Perl 5.8 був вперше випущений 18 липня 2002 року і з цього часу отримував щорічне оновлення. Остання версія Perl 5.8, під номером 5.8.9, побачила світ 14 грудня 2008 року. Perl 5.8 поліпшив підтримку Юнікоду, додав нову реалізацію вводу-виводу, додав підтримку багатопоточності, збільшив числову точність і додав кілька нових модулів.

У 2004 році почалася робота над Синопсисом (Synopsis) — спочатку задуманому як ряд документів, що підводять підсумки остаточного документа, згаданого вище. Однак поступово цей ряд документів і став специфікацією Perl 6. У лютому 2005 року Отриус Тан почала роботу над Pugs — інтерпретатором Perl 6, написаному на Haskell. Це було першою справжньою спробою втілити Perl 6 в реальність. Ця спроба заглухла в 2006 році.

Коли тобі за 20

18 грудня 2007 року, в день 20-ї річниці Dos 1.0 була випущена версія Perl 5.10.0. Ця версія містила в собі ряд помітних нововведень, які наближають її до Perl 6. Одними з таких нововведень стали нові оператори switch (названих «given»/«when»), оновлення регулярних виразів, а також «розумний» оператор збіги «~~».


«Перлинний» ювілей

Приблизно в цей же час серйозно почалася розробка нової реалізації Perl 6, відомої як Rakudo Perl, розробленої в зв'язці з віртуальною машиною Parrot. З листопада 2009 року Rakudo Perl регулярно оновлюється кожен місяць і є на даний момент найбільш повною реалізацією Perl 6.

Значна зміна процесу розробки Perl 5 відбулося після появи Perl 5.11. Співтовариство розробників перейшло на щомісячний цикл випусків, з плануванням дати випуску на три місяці вперед.

12 квітня 2010 року Perl 5.12.0 був представлений громадськості. Видатні нововведення включають в себе підтримку нового синтаксису package NAME VERSION, оператор Yada Yada (службовця для маркування коду-заповнювач, який ще не реалізований), повне вирішення «проблеми 2038 року» (Y2038), перевантаження операторів регулярних виразів, підтримку DTrace (фреймворку динамічної трасування), а також повну підтримку стандарту Unicode 5.2.

7 вересня 2010 року був випущений Perl 5.12.2, а 21 січня 2011 — Perl 5.12.3. Ці випуски містять оновлення модулів, а також деякі зміни в документації. Версія 5.12.4 випущена 20 червня 2011. Остання версія цієї гілки, 5.12.5, випущена 10 листопада 2012.

Крайня п'ятирічка

14 травня 2011 випущено Perl 5.14. Підтримка JSON стала вбудованої, починаючи з версії 5.14.2. Остання версія цієї гілки, 5.14.4, випущена 10 березня 2013.

20 травня 2012 випущений Perl 5.16. Значущим нововведенням є можливість вказати потрібну версію Perl, яку треба емулювати, дозволяючи користувачам оновити Perl, але зберегти працездатність старих скриптів, які інакше стали б несумісними з новою версією. Ядро Perl 5.16 підтримує Unicode 6.1.

18 травня 2013 випущений Perl 5.18. Значущі нововведення включають нові зачіпки dtrace, лексичні функції, збільшення кількості включених в ядро функцій, перегляд реалізації хешів з міркувань безпеки, підтримка Unicode 6.2.

27 травня 2014 року була випущена нова стабільна версія — Perl 5.20.0. Розробка велася приблизно 12 місяців, починаючи з Perl 5.18.0, і містить приблизно 470 000 змінених рядків серед 2900 файлів від 124 авторів.

У грудні 2015 року вийшов Perl 5.22.1. Розробка велася 6 місяців.

9 травня 2016 року була випущена нова стабільна версія мови програмування Perl 5.24.0. Розробка велася приблизно 11 місяців, починаючи з Perl 5.22.0, і містить приблизно 360 000 змінених рядків серед 1800 файлів від 77 авторів.

Згідно даними на липень 2016 року, індекс TIOBE, який вимірює зростання популярності мов програмування, показав, що Perl займає 9 місце:


Це на 2 позиції вище, ніж у минулому році.

Perl 6

зазначається у «Вікіпедії», Perl 6 — чергова версія мови програмування Perl (з точки зору будови, Perl 6 зручніше розглядати як самостійний мова програмування). Є революційним розвитком мови, останній написаний практично «з чистого аркуша». Вперше за всю історію Perl розробка нової версії була розпочата з написання специфікацій, які зазнають змін і донині.

Perl 6, компілюючи програму, створює байт-код, який в подальшому виконує віртуальна машина. Той же підхід застосовується в технологіях Java і .NET Framework.

Фактично, можна говорити про новий мовою, що мають з попередньою версією Perl спільні корені, але не сумісного з нею, хоча в специфікаціях передбачався режим сумісності.

Розробка Perl 6 почалася в 2000 році і триває й донині.

Спочатку Perl замислювався, як інструмент, за швидкодією порівнянний з откомпилированными Unix-утилітами. Швидкість роботи повинна була забезпечуватися за рахунок того, що виконуюча система Perl читає вихідний текст Perl-програми і компілює його «на льоту», потім відразу інтерпретує откомпилированную програму.

Ларрі Уолл жартома проголосив три головні чесноти програміста: лінь, нетерпіння і зарозумілість. На його думку, Perl спроектований так, щоб відповідати цим якостям розробника.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.