Perl - Perl

Perl
Programování-republika-perl.png
Paradigma Multi-paradigma : funkční , imperativní , objektově orientované ( třídní ), reflexní
Navrhl Larry Wall
Vývojář Larry Wall
Poprvé se objevil 1. února 1988 ; Před 33 lety ( 01.02.1988 )
Stabilní uvolnění
Náhled vydání
5.35.4 / 20. září 2021 ; Před 22 dny ( 2021-09-20 )
Kázeň při psaní Dynamický
Implementační jazyk C
OS Cross-platform
Licence Umělecká licence 1.0 nebo GNU General Public License
Rozšíření názvu souboru .plx, .pl, .pm, .xs, .t, .pod, .cgi
webová stránka www .perl .org
Ovlivněn
AWK , BASIC , C , C ++ , Lisp , sed , Unix shell
Ovlivněn
CoffeeScript , Groovy , JavaScript , Julia , LPC , PHP , Python , Raku , Ruby , PowerShell

Perl je rodina dvou na vysoké úrovni , univerzální , interpretovaný , dynamických programovacích jazyků . „Perl“ označuje Perl 5, ale od roku 2000 do roku 2019 také odkazoval na jeho přepracovaný „sesterský jazyk“, Perl 6, předtím, než byl v říjnu 2019 jeho název oficiálně změněn na Raku .

Ačkoli Perl není oficiálně zkratka, používají se různá backronyma , včetně „Practical Extraction and Reporting Language“. Perl byl vyvinut Larry Wall v roce 1987 jako univerzální skriptovací jazyk Unix, aby usnadnil zpracování zpráv. Od té doby prošel mnoha změnami a revizemi. Raku, který začal jako redesign Perlu 5 v roce 2000, se nakonec vyvinul do samostatného jazyka. Oba jazyky se i nadále vyvíjejí nezávisle různými vývojovými týmy a navzájem si liberálně vypůjčují nápady.

Jazyky Perl si vypůjčují funkce z jiných programovacích jazyků včetně C , shell skriptu ( sh ), AWK a sed ; Poskytují zařízení pro zpracování textu bez omezení libovolné délky dat mnoha současných nástrojů příkazového řádku Unixu . Perl 5 si koncem devadesátých let získal velkou popularitu jako skriptovací jazyk CGI , částečně díky svým nepřekonatelným schopnostem regulárního výrazu a syntaktické analýzy řetězců .

Kromě CGI se Perl 5 používá pro správu systému , síťové programování , finance, bioinformatiku a další aplikace, například pro GUI . Kvůli své flexibilitě a síle a také ošklivosti dostal přezdívku „řetězová pila švýcarských armád skriptovacích jazyků“. V roce 1998 byl také označován jako „ lepicí páska, která drží internet pohromadě“ , což se týkalo jak jeho všudypřítomného používání jako lepicího jazyka, tak jeho vnímané neelegance.

Perl je vysoce expresivní programovací jazyk: zdrojový kód pro daný algoritmus může být krátký a vysoce komprimovatelný.

název

Perl se původně jmenoval „Pearl“. Wall chtěl dát jazyku krátké jméno s pozitivními konotacemi. Wall objevil stávající programovací jazyk PEARL před oficiálním vydáním Perlu a změnil pravopis jména.

Když se odkazuje na jazyk, název je velkými písmeny: Perl . Při odkazování na samotný program je název nekapitalizovaný ( perl ), protože většina unixových souborových systémů rozlišuje velká a malá písmena. Před vydáním prvního vydání Programming Perl bylo běžné tento jazyk označovat jako perl . Randal L. Schwartz však název jazyka v knize psal velkými písmeny, aby lépe vynikl při sazbě. Toto rozlišení případů bylo následně zdokumentováno jako kanonické.

Název je občas rozšířen jako backronyms : Practical Extraction and Report Language a Wall's own Pathologically Eclectic Rubbish Lister which is in the manual page for perl.

Dějiny

Rané verze

Larry Wall začal pracovat na Perlu v roce 1987, když pracoval jako programátor v Unisys , a verze 1.0 byla vydána do diskusní skupiny comp.sources.unix 1. února 1988. Jazyk se během několika příštích let rychle rozšířil.

Perl 2, vydaný v roce 1988, představoval lepší modul pro regulární výrazy. Perl 3, vydaný v roce 1989, přidal podporu pro binární datové toky.

Původně byla jedinou dokumentací pro Perl jediná zdlouhavá manuální stránka . V roce 1991 byl vydán Programming Perl , známý mnoha programátorům v Perlu jako „Camel Book“ kvůli jeho obalu, a stal se de facto referencí pro jazyk. Ve stejné době bylo číslo verze Perlu zvýšeno na 4, ne proto, aby se označila zásadní změna jazyka, ale aby se identifikovala verze, která byla v knize dobře zdokumentována.

Early Perl 5

Perl 4 prošel řadou verzí údržby , které vyvrcholily v Perlu 4.036 v roce 1993, načež Wall opustil Perl 4, aby zahájil práce na Perlu 5. Počáteční design Perlu 5 pokračoval do roku 1994. Seznam adresátů perl5-porters byl založen v květnu 1994 koordinovat práci na portování Perlu 5 na různé platformy. Zůstává primárním fórem pro vývoj, údržbu a portování Perl 5.

17. října 1994 byl vydán Perl 5.000. Bylo to téměř úplné přepsání tlumočníka a přidalo to do jazyka mnoho nových funkcí, včetně objektů , odkazů , lexikálních (mých) proměnných a modulů . Důležité je, že moduly poskytly mechanismus pro rozšíření jazyka bez úpravy tlumočníka. To umožnilo jádrovému tlumočníkovi stabilizovat se, i když to obyčejným programátorům Perlu umožnilo přidat nové jazykové funkce. Perl 5 je od té doby v aktivním vývoji.

Perl 5.001 byl vydán 13. března 1995. Perl 5.002 byl vydán 29. února 1996 s novou funkcí prototypů. To umožnilo autorům modulů vytvářet podprogramy, které se chovaly jako vestavby v Perlu . Perl 5.003 byl vydán 25. června 1996 jako bezpečnostní vydání.

Jedna z nejdůležitějších událostí v historii Perlu 5 se odehrála mimo vlastní jazyk a byla důsledkem podpory jeho modulu. 26. října 1995 byla zřízena komplexní síť Perl Archive Network (CPAN) jako úložiště pro jazyk Perl a moduly Perl ; v květnu 2017 nese přes 185 178 modulů ve 35 190 distribucích napsaných více než 13 071 autory a je celosvětově zrcadleno na více než 245 místech.

Perl 5.004 byl vydán 15. května 1997 a zahrnoval mimo jiné balíček UNIVERSAL, který Perlu poskytl základní objekt, ze kterého byly automaticky odvozeny všechny třídy, a možnost vyžadovat verze modulů. Dalším významným vývojem bylo zahrnutí modulu CGI.pm , který přispěl k popularitě Perlu jako skriptovacího jazyka CGI .

Perl 5.004 přidal podporu pro Microsoft Windows , Plan 9 , QNX a AmigaOS .

Perl 5.005 byl vydán 22. července 1998. Toto vydání obsahovalo několik vylepšení motoru regexu , nové háčky do backendu přes B::*moduly, qr//operátor citace regexu, velký výběr dalších nových základních modulů a přidanou podporu pro několik dalších operačních systémy, včetně BeOS .

2000–2020

Hlavní verze Poslední aktualizace
Stará verze, již není udržována: 5.4 1999-04-29
Stará verze, již není udržována: 5.5 1999-03-29
Stará verze, již není udržována: 5.6 2003-11-15
Stará verze, již není udržována: 5.8 14. 12. 2008
Stará verze, již není udržována: 5.10 2009-08-23
Stará verze, již není udržována: 5.12 10. listopadu 2012
Stará verze, již není udržována: 5.14 2013-03-10
Stará verze, již není udržována: 5.16 2013-03-11
Stará verze, již není udržována: 5.18 2014-10-02
Stará verze, již není udržována: 5.20 12. 09. 2015
Stará verze, již není udržována: 5.22 15. července 2017
Stará verze, již není udržována: 5.24 2018-04-14
Stará verze, již není udržována: 5.26 29. 11. 2018
Stará verze, již není udržována: 5.28 01.06.2020
Stará verze, již není udržována: 5.30 01.06.2020
Starší verze, ale stále udržovaná: 5.32 2021-01-23
Aktuální stabilní verze: 5,34 2021-05-20
Nejnovější verze náhledu budoucí verze: 5,35 2021-05-21
Budoucí vydání: 5,36 2022-05-20
Budoucí vydání: 7.0 2022?
Legenda:
Stará verze
Starší verze, stále zachována
Aktuální stabilní verze
Poslední náhledová verze
Budoucí vydání

Perl 5.6 byl vydán 22. března 2000. Hlavní změny zahrnovaly 64bitovou podporu, řetězcovou reprezentaci Unicode , podporu souborů nad 2 GiB a klíčové slovo „naše“. Při vývoji Perlu 5.6 bylo rozhodnuto přepnout schéma verzí na jiné podobné jiným open source projektům; po 5.005_63 se další verze stala 5.5.640, s plány vývojových verzí na lichá čísla a stabilní verze na sudá čísla.

V roce 2000 Wall zveřejnil výzvu k podávání návrhů na novou verzi Perlu od komunity. Výsledkem procesu bylo 361 dokumentů RFC (žádost o komentář), které měly být použity při vedení vývoje Perlu 6. V roce 2001 byly zahájeny práce na „Apocalypses“ pro Perl 6, sérii dokumentů, jejichž cílem bylo shrnout žádosti o změnu a předložit design příští generace Perlu. Byly prezentovány spíše jako souhrn RFC než jako formální dokument. V tomto okamžiku existoval Perl 6 pouze jako popis jazyka.

Perl 5.8 byl poprvé vydán 18. července 2002 a od té doby měl téměř roční aktualizace. Perl 5.8 vylepšil podporu Unicode, přidal novou implementaci I/O, přidal novou implementaci podprocesů, vylepšil číselnou přesnost a přidal několik nových modulů. Od roku 2013 tato verze stále zůstává nejpopulárnější verzí Perlu a používají ji Red Hat 5, Suse 10, Solaris 10, HP-UX 11.31 a AIX 5.

V roce 2004 začaly práce na „Synopsech“ - dokumentech, které původně shrnovaly Apokalypsy, ale které se staly specifikací pro jazyk Perl 6. V únoru 2005 začala Audrey Tang pracovat na Pugsovi , tlumočníkovi Perlu 6 napsaném v Haskellu . Jednalo se o první společné úsilí o uskutečnění Perlu 6. Toto úsilí se zastavilo v roce 2006.

PONIE je zkratka pro Perl On New Internal Engine. Projekt PONIE existoval od roku 2003 do roku 2006 a měl být mostem mezi Perlem 5 a Perlem 6. Jednalo se o snahu přepsat tlumočníka Perlu 5 tak, aby běžel na Parrot , virtuálním stroji Perl 6. Cílem bylo zajistit budoucnost milionů řádků kódu Perl 5 u tisíců společností po celém světě. Projekt PONIE skončil v roce 2006 a již se aktivně nevyvíjí. Do tohoto projektu byla vložena některá vylepšení provedená na tlumočníku Perl 5 v rámci PONIE.

18. prosince 2007, 20. výročí vydání Perlu 1.0, byl vydán Perl 5.10.0. Perl 5.10.0 obsahoval pozoruhodné nové funkce, díky nimž byl blíže k Perlu 6. Patřil sem příkaz switch (nazývaný „zadaný“/„when“), aktualizace regulárních výrazů a operátor ' smart match (~~). Přibližně ve stejnou dobu začal vážně vývoj další implementace Perlu 6 známého jako Rakudo Perl , vyvinutého ve tandemu s virtuálním strojem Parrot . V listopadu 2009 měla Rakudo Perl pravidelná měsíční vydání a nyní je nejkompletnější implementací Perl 6.

Zásadní změna v procesu vývoje Perlu 5 nastala s Perlem 5.11; vývojářská komunita přešla na měsíční cyklus vydávání vývojových vydání s ročním plánem stabilních vydání. Podle tohoto plánu budou vydání bodů opravy chyb následovat stabilní vydání každé tři měsíce.

12. dubna 2010 byl vydán Perl 5.12.0. Pozoruhodné klíčové vylepšení patří nové package NAME VERSIONsyntaxe operátor bláboly (zamýšlel označit zástupný kód, který ještě není implementována), implicitních striktur, plné Y2038 shoda, regex konverze přetížení, DTrace podporu a Unicode 5.2. 21. ledna 2011 byl vydán Perl 5.12.3; obsahuje aktualizované moduly a některé změny dokumentace. Verze 5.12.4 byla vydána 20. června 2011. Poslední verze této větve, 5.12.5, byla vydána 10. listopadu 2012.

14. května 2011 byl vydán Perl 5.14 s vestavěnou podporou JSON .

20. května 2012 byl vydán Perl 5.16. Mezi pozoruhodné nové funkce patří možnost specifikovat danou verzi Perlu, kterou si přeje napodobit, což uživatelům umožňuje upgradovat jejich verzi Perl, ale přesto spouštět staré skripty, které by za normálních okolností byly nekompatibilní. Perl 5.16 také aktualizuje jádro pro podporu Unicode 6.1.

18. května 2013 byl vydán Perl 5.18. Mezi významné nové funkce patří nové háčky dtrace, lexikální subs, více CORE :: subs, přepracování hashe z bezpečnostních důvodů, podpora Unicode 6.2.

27. května 2014 byl vydán Perl 5.20. Mezi pozoruhodné nové funkce patří podpisy podprogramů, hashovací řezy/nová syntaxe slice, dereferencování postfixu (experimentální), Unicode 6.3, rand () pomocí konzistentního generátoru náhodných čísel.

Někteří pozorovatelé připisují vydání Perlu 5.10 počátkem hnutí Modern Perl. Tato fráze popisuje zejména styl vývoje, který zahrnuje použití CPAN, využívá nejnovější vývoj v jazyce a je přísný při vytváření vysoce kvalitního kódu. Zatímco kniha „Modern Perl“ může být nejviditelnějším nositelem této myšlenky, jiné skupiny, jako například organizace Enlightened Perl, se této příčiny chopily.

Na konci roku 2012 a 2013 bylo zahájeno několik projektů alternativních implementací pro Perl 5: Perl5 v Perl6 týmem Rakudo Perl, moe Stevan Little a přátelé, p2 týmem Perl11 pod Reini Urban, gperl od goccy a rperl, Kickstarter projekt vedený Willem Braswellem a přidružený k projektu Perll11.

Od roku 2020

V červnu 2020 byl Perl 7 oznámen jako nástupce Perlu 5. Perl 7 měl zpočátku vycházet z Perlu 5.32 s vydáním očekávaným v první polovině roku 2021 a s vydáním kandidátů dříve. Tento plán byl revidován v květnu 2021, bez jakéhokoli časového rámce vydání nebo verze Perlu 5 pro použití jako základní linie. Po vydání Perlu 7 přejde Perl 5 na dlouhodobou údržbu. Podporované verze Perl 5 však budou i nadále dostávat důležité opravy zabezpečení a oprav chyb.

Symboly

Velbloud

Velbloudí symbol používaný společností O'Reilly Media

Programming Perl , vydaný nakladatelstvím O'Reilly Media , obsahuje na obálce obrázek velblouda velblouda a běžně se mu říká „Camel Book“. Tento obrázek se stal neoficiálním symbolem Perlu a také obecným znakem hackera , který se objevuje na tričkách a jiných oděvních předmětech.

O'Reilly vlastní obrázek jako ochrannou známku, ale licencuje jej pro nekomerční použití, vyžaduje pouze potvrzení a odkaz na www.perl.com. O licencování pro komerční použití se rozhoduje případ od případu. O'Reilly také poskytuje loga „Programming Republic of Perl“ pro nekomerční stránky a tlačítka „Powered by Perl“ pro jakékoli stránky, které používají Perl.

Cibule

Logo cibule používané The Perl Foundation

Nadace Perl vlastní alternativní symbol, cibuli, který licencuje svým dceřiným společnostem, Perl Mongers , PerlMonks , Perl.org a dalším. Symbol je vizuální slovní hříčka na perlové cibuli .

Raptor

Alternativní logo Perl 5

Sebastian Riedel, tvůrce Mojolicious , vytvořil logo znázorňující dinosaura raptora , které je dostupné pod licencí CC-SA, verze 4.0. Analog dravce pochází ze série rozhovorů, které Matt S Trout zahájil v roce 2010.

Přehled

Podle Wall má Perl dva slogany. První z nich je „ Existuje více než jeden způsob, jak to udělat “, běžně známý jako TMTOWTDI. Druhý slogan zní „Lehké věci by měly být snadné a těžké věci by měly být možné“.

Funkce

Celková struktura Perl pochází v podstatě z C. Perl je procesní povahy, s proměnnými , výrazy , příkazů přiřazení , výztužnými -delimited bloků , řídicích struktur a podprogramů .

Perl také využívá funkce z programování prostředí. Všechny proměnné jsou označeny předními sigily , které umožňují interpolaci proměnných přímo do řetězců . Na rozdíl od shellu však Perl používá sigily na všech přístupech k proměnným a na rozdíl od většiny ostatních programovacích jazyků, které používají sigily, sigil neoznačuje typ proměnné, ale typ výrazu. Například například když je pole označeno sigilem "@" (například @arrayname), jednotlivý člen pole je označen skalárním sigilem "$" (například $arrayname[3]). Perl má také mnoho vestavěných funkcí, které poskytují nástroje často používané v programování prostředí (ačkoli mnoho z těchto nástrojů je implementováno programy mimo prostředí Shell), jako je třídění a volání zařízení operačního systému .

Perl přebírá hashe („asociativní pole“) z AWK a regulární výrazy ze sed . Tyto zjednodušují mnoho úloh analýzy, zpracování textu a správy dat. Shared with Lisp is the implicit return of the last value in a block, and all statements are also expressions which can be used in larger expressions itself.

Perl 5 přidal funkce, které podporují komplexní datové struktury , prvotřídní funkce (tj. Uzávěry jako hodnoty) a objektově orientovaný programovací model. Patří mezi ně odkazy , balíčky, odesílání metod založené na třídě a lexikálně definované proměnné spolu se směrnicemi kompilátoru (například strict pragma ). Další důležitou funkcí zavedenou v Perlu 5 byla možnost zabalit kód jako opakovaně použitelné moduly. Wall později uvedl, že „Celým záměrem modulového systému Perl 5 bylo podpořit růst kultury Perlu, nikoli jádra Perlu.“

Všechny verze Perlu provádějí automatické zadávání dat a automatickou správu paměti . Tlumočník zná typ a požadavky na úložiště každého datového objektu v programu; podle potřeby přiděluje a uvolňuje úložiště pomocí počítání referencí (takže nemůže rušit přidělení kruhových datových struktur bez ručního zásahu). Převody legálního typu - například převody z čísla na řetězec - se provádějí automaticky za běhu ; nelegální převody typů jsou fatální chyby.

Design

Design Perlu lze chápat jako reakci na tři široké trendy v počítačovém průmyslu: klesající náklady na hardware, rostoucí mzdové náklady a vylepšení technologie překladačů . Mnoho dřívějších počítačových jazyků, například Fortran a C, mělo za cíl efektivně využívat drahý počítačový hardware. Naproti tomu Perl byl navržen tak, aby počítačoví programátoři mohli psát programy rychleji a snadněji.

Perl má mnoho funkcí, které usnadňují úkol programátora na úkor větších požadavků na CPU a paměť. Mezi ně patří automatická správa paměti; dynamické psaní ; řetězce, seznamy a hashe; regulární výrazy; introspekce ; a eval()funkce. Perl se řídí teorií „žádné vestavěné limity“, myšlenkou podobnou pravidlu Zero One Infinity .

Wall byl vyškolen jako lingvista a design Perlu je velmi dobře informován lingvistickými principy. Mezi příklady patří Huffmanovo kódování (běžné konstrukce by měly být krátké), dobrá konečná váha (důležité informace by měly být na prvním místě) a velká sbírka jazykových primitivů . Perl upřednostňuje konstrukty jazyků, které jsou pro lidi stručné a přirozené pro psaní, i když komplikují překladač Perlu.

Syntaxe Perlu odráží myšlenku, že „věci, které jsou jiné, by měly vypadat jinak“. Například skaláry, pole a hashe mají různé úvodní sigily. Indexy pole a hashovací klíče používají různé druhy složených závorek. Řetězce a regulární výrazy mají různé standardní oddělovače. Tento přístup může být v kontrastu s jazykem, jako je Lisp , kde se pro všechny účely používá stejná základní syntaxe složená z jednoduchých a univerzálních symbolických výrazů .

Perl nevynucuje žádné konkrétní programovací paradigma ( procedurální , objektově orientované , funkční nebo jiné) a dokonce ani nevyžaduje, aby si mezi nimi programátor vybral.

Jazyk Perl i komunita a kultura, která jej obklopuje, má široké praktické uplatnění. Předmluva k programování Perlu začíná: „Perl je jazyk pro dokončení vaší práce.“ Jedním z důsledků toho je, že Perl není upravený jazyk. Obsahuje mnoho funkcí, toleruje výjimky ze svých pravidel a používá heuristiku k řešení syntaktických nejasností. Kvůli shovívavosti překladače je někdy těžké najít chyby. Dokumentace funkcí Perlu poznamenává chování variant vestavěných funkcí v seznamových a skalárních kontextech slovy: „Obecně dělají, co chcete, pokud nechcete konzistenci.“

Žádná písemná specifikace ani standard pro jazyk Perl neexistuje pro verze Perl prostřednictvím Perlu 5 a neexistují žádné plány na jeho vytvoření pro aktuální verzi Perlu. Došlo pouze k jedné implementaci tlumočníka a spolu s tím se vyvíjel i jazyk. Tento tlumočník spolu s funkčními testy je de facto specifikací jazyka. Perl 6 však začal specifikací a několik projektů má za cíl implementovat část nebo celou specifikaci.

Aplikace

Perl má mnoho různorodých aplikací, které jsou umocněny dostupností mnoha standardních modulů a modulů třetích stran.

Perl byl hlavně používán k psaní CGI skriptů: velké projekty napsané v Perlu zahrnují cPanel , Slash , Bugzilla , RT , TWiki a Movable Type ; Mezi weby s vysokým provozem, které Perl hojně využívají, patří Priceline.com , Craigslist , IMDb , LiveJournal , DuckDuckGo , Slashdot a Ticketmaster . Je to také volitelná součást populárního zásobníku technologií LAMP pro vývoj webu , namísto PHP nebo Pythonu . Perl se ve velké míře používá jako systémový programovací jazyk v distribuci Debian Linux .

Perl je často používán jako lepicí jazyk , spojující systémy a rozhraní, které nebyly speciálně navrženy pro vzájemnou spolupráci, a pro „ data munging “, tj. Převod nebo zpracování velkého množství dat pro úkoly, jako je vytváření sestav. Ve skutečnosti jsou tyto silné stránky úzce propojeny. Díky této kombinaci je Perl oblíbeným univerzálním jazykem pro správce systému , zejména proto, že krátké programy, často nazývané „ jednořádkové programy “, lze zadávat a spouštět na jediném příkazovém řádku .

Perl kód může být přenosný napříč Windows a Unix; takový kód často používají dodavatelé softwaru (jak COTS, tak na míru) ke zjednodušení balení a údržby skriptů pro sestavení a nasazení softwaru.

Perl/Tk a wxPerl se běžně používají k přidávání grafických uživatelských rozhraní do skriptů Perl.

Implementace

Perl je implementován jako základní interpret, napsaný v jazyce C, spolu s velkou sbírkou modulů, napsaných v jazycích Perl a C. Od roku 2010 je interpret 150 000 řádků kódu C a kompiluje se na 1 MB spustitelný soubor na typických architekturách strojů. Alternativně lze tlumočník zkompilovat do propojené knihovny a vložit do jiných programů. V distribuci je téměř 500 modulů, které obsahují 200 000 řádků Perlu a dalších 350 000 řádků kódu C (velká část kódu C v modulech se skládá z tabulek kódování znaků ).

Tlumočník má objektově orientovanou architekturu. Všechny prvky jazyce Perl-skaláry, pole, hash, coderefs, kliky souboru • Jsou zastoupeny v interpret u C structs . Operace s těmito strukturami jsou definovány velkou sbírkou maker , typedefů a funkcí; tyto tvoří Perl C API . Perl API může být pro nezasvěcené matoucí, ale jeho vstupní body se řídí konzistentním schématem pojmenování , které poskytuje návod těm, kteří ho používají.

Život tlumočníka Perlu je široce rozdělen do fáze kompilace a fáze spuštění. V Perlu jsou fáze hlavními fázemi životního cyklu tlumočníka. Každý tlumočník prochází každou fází pouze jednou a fáze následují v pevné posloupnosti.

Většina z toho, co se děje ve fázi kompilace Perlu, je kompilace a většina z toho, co se děje ve fázi spuštění Perlu, je provádění, ale existují významné výjimky. Perl významně využívá své schopnosti spouštět kód Perl během fáze kompilace. Perl také zpozdí kompilaci do běhové fáze. Pojmy, které udávají druh zpracování, ke kterému v každém okamžiku skutečně dochází, jsou čas kompilace a doba běhu . Perl je ve kompilačním čase ve většině bodů během kompilační fáze, ale kompilační čas lze zadat také během běhové fáze. Čas kompilace kódu v řetězcovém argumentu předaném evalvestavěnému nastane během běhové fáze. Perl je často v době běhu během fáze kompilace a tráví většinu běhové fáze v době běhu. Kód v BEGINblocích se spouští za běhu, ale ve fázi kompilace.

V době kompilace interpret analyzuje kód Perl do stromu syntaxe . Za běhu spustí program procházením stromu . Text je analyzován pouze jednou a strom syntaxe je před spuštěním optimalizován, takže je provádění relativně efektivní. Optimalizace v době kompilace ve stromu syntaxe zahrnují neustálé skládání a šíření kontextu, ale provádí se také optimalizace kukátka .

Perl má gramatiku úplného Turingu, protože rozbor může být ovlivněn běhovým kódem spuštěným během fáze kompilace. Perl proto nelze analyzovat rovnou kombinací Lex / Yacc lexer / analyzátor . Místo toho tlumočník implementuje svůj vlastní lexer, který koordinuje s upraveným analyzátorem bizonů GNU, aby vyřešil nejasnosti v jazyce.

Často se říká, že „Pouze Perl může analyzovat Perl“, což znamená, že pouze Perl interpret ( perl) může analyzovat jazyk Perl ( Perl ), ale ani to obecně není pravda. Protože tlumočník Perl může simulovat Turingův stroj během jeho fáze kompilace, bude muset rozhodnout o problému zastavení , aby bylo možné v každém případě dokončit analýzu. Je dlouhodobým výsledkem, že problém zastavení je nerozhodnutelný, a proto ani Perl nemůže vždy analyzovat Perl. Perl činí neobvyklou volbu a dává uživateli přístup k plnému programovacímu výkonu ve vlastní fázi kompilace. Náklady na teoretickou čistotu jsou vysoké, ale praktické potíže se zdají být vzácné.

Jiné programy, které se zavazují analyzovat Perl, jako analyzátory zdrojových kódů a automatické odsazení , musí zápasit nejen s nejednoznačnými syntaktickými konstrukty, ale také s nerozhodnutelností analýzy Perl v obecném případě. Projekt PPI Adama Kennedyho se zaměřil na analýzu kódu Perl jako dokumentu (zachování jeho integrity jako dokumentu), namísto analyzování Perlu jako spustitelného kódu (což ani Perl sám nikdy nedokáže). Byl to Kennedy, kdo se poprvé domníval, že „analýza Perla trpí„ problémem se zastavením “, což se později ukázalo.

Perl je distribuován s více než 250 000 funkčními testy pro základní jazyk Perl a více než 250 000 funkčními testy pro základní moduly. Ty běží jako součást normálního procesu sestavení a rozsáhle využívají tlumočníka a jeho základní moduly. Vývojáři Perlu spoléhají na funkční testy, aby zajistili, že změny tlumočníka nezavedou softwarové chyby ; navíc uživatelé Perlu, kteří vidí, že tlumočník předává své funkční testy na svém systému, mohou mít vysokou míru jistoty, že funguje správně.

Dostupnost

Perl je licencován dvojím způsobem podle umělecké licence 1.0 a obecné veřejné licence GNU . Distribuce jsou k dispozici pro většinu operačních systémů . Je zvláště rozšířený na Unixu a unixových systémech, ale byl přenesen na většinu moderních (a mnoha zastaralých) platforem. Až na šest hlášených výjimek lze Perl kompilovat ze zdrojového kódu na všech platformách kompatibilních s POSIX nebo jinak kompatibilních s Unixem.

Kvůli neobvyklým změnám vyžadovaným pro klasické prostředí Mac OS byl speciální port nazvaný MacPerl dodáván samostatně.

Síť Comprehensive Perl Archive Network obsahuje kompletní seznam podporovaných platforem s odkazy na distribuce dostupné na každé z nich. CPAN je také zdrojem pro veřejně dostupné moduly Perl, které nejsou součástí základní distribuce Perl.

Okna

Uživatelé systému Microsoft Windows obvykle instalují jednu z nativních binárních distribucí Perlu pro Win32, nejčastěji Strawberry Perl nebo ActivePerl . Kompilace Perlu ze zdrojového kódu v systému Windows je možná, ale většině instalací chybí požadovaný kompilátor C a nástroje pro sestavení. To také ztěžuje instalaci modulů z CPAN, zejména těch, které jsou částečně zapsány v jazyce C.

ActivePerl je distribuce uzavřeného zdroje z ActiveState, která má pravidelná vydání, která sledují základní vydání Perlu. Distribuce dříve obsahovala správce balíčků Perl (PPM), oblíbený nástroj pro instalaci, odebírání, aktualizaci a správu používání běžných modulů Perl; tento nástroj však byl ukončen od ActivePerl 5.28. Součástí je také PerlScript , modul Windows Script Host (WSH) implementující jazyk Perl. Visual Perl je nástroj ActiveState, který přidává Perl do vývojové sady Visual Studio .NET. A VBScript -to-Perl měnič, stejně jako Perl překladač pro Windows a převodníky awk a sed Perl také byly vytvořené touto společností a zařazena na ActiveState CD pro systém Windows , který zahrnuje všechny jejich distribucí plus Komodo IDE a vše kromě prvního ve variantě Unix/Linux/Posix v roce 2002 a následně.

Strawberry Perl je distribuce open-source pro Windows. Má pravidelná, čtvrtletní vydání od ledna 2008, včetně nových modulů jako zpětné vazby a požadavků. Strawberry Perl si klade za cíl umět instalovat moduly jako standardní distribuce Perl na jiné platformy, včetně kompilace modulů XS.

Cygwin emulaci vrstvy je další způsob, jak běží Perl pod Windows. Cygwin poskytuje ve Windows prostředí podobné Unixu a Perl i CPAN jsou k dispozici jako standardní předkompilované balíčky v instalačním programu Cygwin. Vzhledem k tomu, že Cygwin také obsahuje gcc , je také možné kompilovat Perl ze zdroje.

Spustitelný soubor perlu je součástí několika sad prostředků Windows v adresáři s dalšími skriptovacími nástroji.

Implementace Perlu přicházejí s MKS Toolkit , Interix (základ dřívějších implementací Windows Services pro Unix ) a UWIN .

Databázová rozhraní

Perl's text-handling capabilities can be used for generating SQL queries; pole, hashe a automatická správa paměti usnadňují shromažďování a zpracování vrácených dat. Například v rozhraní API pro programování aplikací (API) Tim Bunce Perl DBI může být argumentem API text dotazů SQL; je tedy možné programovat ve více jazycích současně (např. pro generování webové stránky pomocí HTML , JavaScript a SQL v dokumentu here ). Použití interpolace proměnné Perl k programovému přizpůsobení každého z dotazů SQL a specifikace polí nebo hashů Perl jako struktur pro programové uložení výsledných datových sad z každého dotazu SQL, umožňuje mechanismus na vysoké úrovni pro zpracování velkého množství dat pro následné zpracování podprogramem Perl. V dřívějších verzích Perlu byla databázová rozhraní vytvořena opětovným propojením tlumočníka s knihovnou databází na straně klienta . To bylo dostatečně obtížné, aby to bylo provedeno pouze pro několik nejdůležitějších a nejpoužívanějších databází, a to omezilo výsledný spustitelný soubor na použití pouze jednoho databázového rozhraní najednou. perl

V Perlu 5 jsou databázová rozhraní implementována moduly Perl DBI. Modul DBI (Database Interface) představuje jediné, na databázi nezávislé rozhraní pro aplikace Perl, zatímco moduly DBD (Database Driver) zpracovávají detaily přístupu k přibližně 50 různým databázím; pro většinu databází ANSI SQL existují ovladače DBD .

DBI poskytuje ukládání do mezipaměti pro zpracovávání databází a dotazy, což může výrazně zlepšit výkon v prostředích s dlouhou životností, jako je mod perl , a pomáhá velkoobjemovým systémům odvrátit špičky zátěže jako v efektu Slashdot .

V moderních aplikacích Perl, zejména těch, které jsou psány pomocí webových rámců, jako je Catalyst , je modul DBI často používán nepřímo prostřednictvím objektově relačních mapovačů, jako jsou DBIx :: Class , Class :: DBI nebo Rose :: DB :: Object, které generují dotazy SQL a zpracovávat data transparentně autorovi aplikace.

Srovnávací výkon

The Computer Language Benchmarks Game porovnává výkon implementací typických programovacích problémů v několika programovacích jazycích. Předložené implementace Perlu obvykle dosahují vysokého spektra využití paměti a poskytují různé výsledky rychlosti. Perlův výkon ve hře benchmarků je typický pro interpretované jazyky.

Velké programy Perl začínají pomaleji než podobné programy v kompilovaných jazycích, protože Perl musí zdroj kompilovat při každém spuštění. V proslovu na konferenci YAPC :: Europe 2005 a následném článku „A Timely Start“ Jean-Louis Leroy zjistil, že jeho programy v Perlu trvaly mnohem déle, než se očekávalo, protože tlumočník Perlu strávil značnou dobu hledáním modulů v rámci svého příliš velkého zahrnout cestu. Na rozdíl od Javy, Pythonu a Ruby má Perl pro předkompilaci pouze experimentální podporu. Programy Perl proto platí tuto režijní pokutu při každém provedení. Fáze běhu typických programů je dostatečně dlouhá, aby amortizovaná doba spuštění nebyla podstatná, ale benchmarky, které měří velmi krátké doby provádění, budou pravděpodobně z důvodu této režie zkreslené.

Pro zlepšení této situace byla zavedena řada nástrojů. Prvním takovým nástrojem byl Apache's mod perl , který se snažil řešit jeden z nejčastějších důvodů, proč byly malé programy Perl rychle vyvolávány: CGI Web Development. ActivePerl prostřednictvím Microsoft ISAPI poskytuje podobná vylepšení výkonu.

Jakmile je kód Perl zkompilován, existuje další režie během fáze provádění, která obvykle není k dispozici pro programy napsané v kompilovaných jazycích, jako je C nebo C ++. Mezi příklady takové režie patří interpretace bajtového kódu , správa paměti pro počítání referencí a dynamická kontrola typu.

Optimalizace

Nejkritičtější rutiny lze psát v jiných jazycích (například C ), které lze k Perlu připojit pomocí jednoduchých modulů Inline nebo složitějšího, ale flexibilnějšího mechanismu XS .

Perl 5

Perl 5, jazyk obvykle označovaný jako „Perl“, se nadále aktivně rozvíjí. Perl 5.12.0 byl vydán v dubnu 2010 s některými novými funkcemi ovlivněnými designem Perl 6, následovaný Perl 5.14.1 (vydán 17. června 2011), Perl 5.16.1 (vydán 9. srpna 2012.), a Perl 5.18.0 (vydáno 18. května 2013). Vývojové verze Perl 5 jsou vydávány na měsíční bázi, přičemž hlavní verze vychází jednou za rok.

Relativní podíl internetového vyhledávání „programování v Perlu“ ve srovnání s podobným vyhledáváním v jiných programovacích jazycích trvale klesal z přibližně 10% v roce 2005 na přibližně 2% v roce 2011 na přibližně 0,7% v roce 2020.

Raku (Perl 6)

Camelia , logo projektu Perl 6

Na konferenci v Perlu v roce 2000 předložil Jon Orwant argument pro velkou novou jazykovou iniciativu. To vedlo k rozhodnutí zahájit práce na redesignu jazyka, který se bude jmenovat Perl 6. Návrhy nových jazykových funkcí byly vyžádány od komunity Perl jako celku, která předložila více než 300 RFC .

Wall strávil příštích několik let strávením RFC a jejich syntézou do uceleného rámce pro Perl 6. Svůj návrh pro Perl 6 představil v sérii dokumentů nazvaných „apokalypsy“ - číslovaných tak, aby odpovídaly kapitolám v Programování Perlu . V lednu 2011 byla vyvíjející se specifikace Perlu 6 zapouzdřena v projekčních dokumentech s názvem Synopses - očíslovány tak, aby odpovídaly Apocalypses.

Diplomová práce Bradleyho M. Kuhna , na kterou dohlíží Wall, zvažovala možné využití virtuálního stroje Java jako runtime pro Perl. Kuhnova práce ukázala, že tento přístup je problematický. V roce 2001 bylo rozhodnuto, že Perl 6 poběží na vícejazyčném virtuálním stroji s názvem Parrot . To bude znamenat, že ostatní jazyky zaměřené na Parrot získají nativní přístup k CPAN , což umožní určitou úroveň mezijazyčného vývoje.

V roce 2005 vytvořila Audrey Tang projekt Pugs , implementaci Perlu 6 v Haskellu . Toto fungovalo a nadále funguje jako testovací platforma pro jazyk Perl 6 (oddělené od vývoje skutečné implementace) - což umožňuje jazykovým designérům prozkoumat. Projekt Pugs vytvořil aktivní vícejazyčnou komunitu Perl/Haskell soustředěnou kolem IRC kanálu Libera Chat #raku. Designový tým Perl 6 pohltil mnoho vlivů funkčního programování .

V roce 2012 byl vývoj Perl 6 zaměřen především na dva kompilátory:

  1. Rakudo , implementace běžící na virtuálním stroji Parrot a virtuálním stroji Java.
  2. Niecza , která se zaměřuje na modul Common Language Runtime .

V roce 2013 byl oznámen MoarVM („Metamodel On A Runtime“), virtuální stroj založený na jazyce C určený primárně pro Rakudo.

V říjnu 2019 byl Perl 6 přejmenován na Raku.

Od roku 2017 se aktivně vyvíjí pouze implementace Rakudo a MoarVM a jsou podporovány další virtuální stroje, jako je Java Virtual Machine a JavaScript .

Perl 7

Perl 7 byl oznámen 24. června 2020 na „The Perl Conference in the Cloud“ jako nástupce Perl 5. Na základě Perl 5.32 je Perl 7 navržen tak, aby byl zpětně kompatibilní s moderním kódem Perl 5; Perl 5 kód, aniž by standardizovaný (Pragma) header potřebuje přidání use compat::perl5;zůstat kompatibilní, ale moderní kód může klesnout některé často používaný.

Komunita Perl

Kultura a komunita Perlu se vyvíjela vedle samotného jazyka. Usenet bylo první veřejné místo, kde byl představen Perl, ale v průběhu svého vývoje byla komunita Perlu formována růstem rozšiřujících se internetových služeb, včetně zavedení World Wide Web. Komunita, která obklopuje Perl, byla ve skutečnosti tématem prvního Wallova rozhovoru o „stavu cibule“.

Stav cibule

State of the Onion je název Wallových ročních souhrnů o pokroku Perlu a jeho komunity ve stylu keynote . Vyznačují se jeho charakteristickým humorem, využívajícím odkazy na Perlovu kulturu, širší hackerskou kulturu, Wallin lingvistické pozadí, někdy jeho rodinný život a občas dokonce i křesťanský původ.

Každá přednáška je nejprve přednesena na různých konferencích v Perlu a nakonec je také zveřejněna online.

Perl kratochvíle

JAPHY
V e -mailech, příspěvcích Usenet a na nástěnkách jsou běžným trendem programy „ Just another Perl hacker “ (JAPH), které vytvořil Randal L. Schwartz , jeden z prvních profesionálních trenérů Perlu. V jazyce Perlské kultury jsou Perl programátoři známí jako Perl hackeři, a od toho se odvíjí praxe psaní krátkých programů k vytištění fráze „Just another Perl hacker“. V duchu původního konceptu jsou tyto programy mírně zmatené a dostatečně krátké, aby se vešly do podpisu e -mailu nebo zprávy Usenet. „Kanonický“ JAPH, jak jej vyvinul Schwartz, obsahuje na konci čárku, i když se to často vynechává.
Golf v Perlu
Perlský „golf“ je zábavou snižování počtu postav (klíčových „úderů“) používaných v programu Perl na naprosté minimum, a to stejným způsobem, jakým se golfoví hráči snaží v kole udělat co nejméně záběrů. První použití této fráze zdůraznilo rozdíl mezi kódem pro chodce, který má učit nováčka a stručnými hacky, které pravděpodobně pobaví zkušené programátory v Perlu, příkladem toho jsou JAPHy, které již byly použity v podpisech v příspěvcích Usenet a jinde. Podobné kaskadérské kousky byly v předchozích desetiletích nejmenovanou zábavou v jazykové APL . Použití Perlu k napsání programu, který prováděl šifrování RSA, vyvolalo široký a praktický zájem o tuto zábavu. V následujících letech byl na zábavu v jiných jazycích použit termín „ kódový golf “. Perl Golf Apocalypse se konala na konferenci Perl 4.0 v Monterey v Kalifornii v červenci 2000.
Zmatení
Stejně jako v případě C byly soutěže o zmatený kód dobře známou zábavou na konci devadesátých let. Obfuscated Perl Soutěž byla soutěž pořádá The Perl Journal od roku 1996 do roku 2000, který dělal obloukem ctnost syntaktické ohebnosti Perlu. Ceny byly uděleny za kategorie jako „nejmocnější“-programy, které efektivně využívaly prostor-a „nejlepší čtyřřádkový podpis“ za programy, které se vešly do čtyř řádků se 76 znaky ve stylu podpisového bloku Usenet .
Poezie
Perlská poezie je praxe psaní básní, které lze kompilovat jako legální kód Perl, například dílo známé jako Black Perl . Perlskou poezii umožňuje velký počet anglických slov, která se používají v jazyce Perl. Nové básně jsou pravidelně zasílány do komunity v PerlMonks .

Perl na IRC

Existuje řada kanálů IRC, které nabízejí podporu pro jazyk a některé moduly.

IRC síť Kanály
irc.libera.chat #perl #raku
irc.perl.org #moose #poe #catalyst #dbix-class #perl-help #distzilla #epo #corehackers #sdl #win32 #toolchain #padre #dancer
irc.slashnet.org #perlmonks
irc.oftc.net #perl
irc.efnet.net #perlhelp
irc.rizon.net #perl
irc.debian.org #debian-perl (balení modulů Perl pro Debian)

CPAN Acme

Existuje také mnoho příkladů kódu napsaného čistě pro zábavu na CPAN . Lingua::Romana::Perligatanapříklad umožňuje psaní programů v latině . Po spuštění takového programu modul převede svůj zdrojový kód do běžného Perlu a spustí ho.

Komunita Perlu vyčlenila obor názvů „ Acme “ pro moduly, které mají zábavnou povahu (ale její rozsah se rozšířil o průzkumný nebo experimentální kód nebo jakýkoli jiný modul, který není určen k tomu, aby byl někdy používán ve výrobě). Některé moduly Acme jsou záměrně implementovány zábavnými způsoby. To zahrnuje Acme::Bleachjeden z prvních modulů v Acme::oboru názvů, který umožňuje „vybělit“ zdrojový kód programu (tj. Všechny znaky nahradit mezerou) a přesto fungovat.

Příklad kódu

Ve starších verzích Perlu by člověk napsal program Hello World jako:

print "Hello, World!\n";

Zde je složitější program Perl, který odpočítává sekundy od dané počáteční hodnoty:

#!/usr/bin/perl
use strict;
use warnings;

my ( $remaining, $total );

$remaining = $total = shift(@ARGV);

STDOUT->autoflush(1);

while ( $remaining ) {
    printf ( "Remaining %s/%s \r", $remaining--, $total );
    sleep 1;
}

print "\n";

Tlumočník perlu lze také použít pro jednorázové skripty na příkazovém řádku. Následující příklad (jak je vyvolán ze sh-kompatibilního shellu, jako je Bash) překládá řetězec „Bob“ ve všech souborech končících .txt v aktuálním adresáři na „Robert“:

$ perl -i.bak -lp -e 's/Bob/Robert/g' *.txt

Kritika

Jeho kritici označovali Perl jako „ linkový šum “ a jazyk pouze pro zápis . Nejstarší taková zmínka byla v prvním vydání knihy Learning Perl , výukové knihy Perl 4, kterou napsal Randal L. Schwartz , v jejíž první kapitole uvádí: „Ano, někdy Perl pro nezasvěcené vypadá jako linkový šum, ale ostřílenému programátorovi z Perlu to vypadá jako kontrolní součet šumu s posláním v životě. " Rovněž uvedl, že obvinění, že Perl je jazyk pouze pro zápis, lze zabránit kódováním s „náležitou péčí“. Přehledový dokument Perlintro o Perlu uvádí, že názvy vestavěných „magických“ skalárních proměnných „vypadají jako interpunkce nebo šum v řádcích“. Anglický modul však poskytuje dlouhé i krátké anglické alternativy. dokument perlstyle uvádí, že šum v řádcích v regulárních výrazech lze zmírnit pomocí /xmodifikátoru pro přidání mezer.

Podle Perl 6 FAQ , Perl 6 byl navržen tak, aby zmírnil „obvyklé podezřelé“, které vyvolávají „linkový šum“ od kritiků Perl 5, včetně odstranění „většiny interpunkčních proměnných“ a dezinfikace syntaxe regexu . Perl 6 FAQ rovněž uvádí, že to, co se někdy označuje jako Perl linka hluk je „skutečná syntaxe jazyka“, stejně jako gerunds a předložky jsou součástí anglického jazyka . V příspěvku na blog v prosinci 2012, přestože prohlašoval, že „Rakudo Perl 6 selhal a bude nadále selhávat, pokud nezíská dohled nad dospělými“, chromatic uvedl, že design Perl 6 má „dobře definovanou gramatiku“ a také „ vylepšený typový systém, jednotný objektový systém s inteligentním metamodelem, metaoperátory a jasnější systém kontextu, který zajišťuje takové drobnosti, jako je všudypřítomná lenost “. Rovněž uvedl, že „Perl 6 má soudržnost a konzistenci, která Perlu 5 chybí.“

Viz také

Reference

Další čtení

externí odkazy