ARCHIV |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
Perl (146) - Perl 6 - jazyk budoucnostiNa Perl 6 jsme čekali již před začátkem tohoto seriálu. Stále čekáme. Ale bude stát za to. Perl 6 je rodící se skriptovací jazyk, který vzniká na základě Perlu 5. Bude dalším stupněm nejen ve vývoji Perlu, ale půjde o velký krok v evoluci programovacích jazyků obecně. Jeho hlavními filozofiemi jsou hesla "make easy things easier" a "keep Perl 6 Perl". VznikPůvodním cílem bylo odstranit některé nešvary z Perlu 5. Larry Wall ve své přednášce na Perl Conference prohlásil: "Easy things should stay easy, hard things should get easier, and impossible things should get hard". Základní myšlenky Perlu 6 byly na této konferenci tedy položeny již v červenci roku 2000. Následovala veřejná diskuze ve formě několika RFC (request for comments). Poté Larry Wall napsal několik článků (zvaných Apokalypsy), kde představil, které změny by měl Perl 6 obsahovat, které ne a které možná. Číslování Apokalyps je shodné s číslováním kapitol v knize Programming Perl. V každé Apokalypse je tedy popsáno, co by se mělo z dané kapitoly změnit. Z Apokalyps poté vznikly vychytáním sporů mezi jednotlivými Apokalypsami Synopses, ze kterých vychází specifikace jazyka. To je zásadní rozdíl oproti Perlu 5. V Perlu 5 specifikace neexistovala a museli jsme se spokojit s popisem chování (fakticky byla tedy specifikace dána zdrojovými kódy interpretu Perlu 5 a dokumentace byla pouze jejich popisem). Nyní je v Synopses jasně deklarováno, jak by se Perl měl chovat a podle nich bude interpret fungovat. Pokud se tedy bude lišit specifikace a chování interpretu Perlu 6, bude třeba interpret opravit. Také existuje série tzv. Exegesis, což jsou výklady Apokalyps (na příkladech je zde vysvětleno nové chování). Interprety Perlu 6Zásadní změnou oproti Perlu 5 bude to, že nově bude moci existovat více implementací interpretu jazyka. Existuje několik projektů, které vyvíjejí interpret Perlu 6, avšak žádný ještě nedospěl do svého konce. Již mnohokrát bylo anoncováno datum, kdy Perl 6 spatří světlo světa, ale zatím nabírá stále nová zpoždění. Od jisté doby se manažeři projektu vyjadřují slovy "Perl 6 has no schedule". Již nyní můžeme pomocí těchto projektů zkoušet syntaxi Perlu 6. Stačí, když si stáhneme nějaký z nabídky aktuálně vyvíjených interpretů. Jednou z možností je instalace Rakudo Perlu, po které nám vznikne spustitelný soubor perl6. Nakopírujme ho do některého z adresářů v proměnné prostředí $PATH. Nyní můžeme spouštět naše programy v interpretu perl6 (je třeba si uvědomit, že řada věcí je zde ještě neimplementovaných).
Také lze spustit perl6 bez argumentu. Objeví se perl6 shell, který se hodí pro naše další pokusy.
Vztah Perl 6 s předchozími verzemiPerl 6 nebude s předchozími verzemi zpětně kompatibilní. To znamená, že zdrojový kód programu napsaného v Perlu 5 nemusí fungovat (nebo může fungovat jinak). Důležité však je, že archiv CPAN bude i v Perlu 6 nadále k dispozici, neboť bude možné používat Perl 6 ve speciálním módu, kde kompatibilita bude. Změny oproti Perlu 5Již bylo řečeno, že asi nejzlomovějším rozdílem je existence specifikace. Na základě ní tedy lze kdykoliv vytvořit interpret jazyka. Avšak kdyby šlo jen o ni, tak by se z praktického hlediska v Perlu 6 nic nezměnilo. Věnujme se tedy dále změnám v syntaxi jazyka. Změn je obrovské množství. Máme řadu nových funkcí, operátorů (ačkoliv "Operators are just functions with funny names and syntax"), konstrukcí a změn v syntaxi. Zde si představíme jen ty nejviditelnější změny. Následující text by měl sloužit zejména pro orientaci, co je v Perlu 6 možné, nikoliv jako komplexní příručka. Ta by totiž vydala na desítky dílů. Koho zajímá více, než jen letmý pohled, měl by se podívat do specifikace jazyka, kde najde skutečně všechno. Použití kódu Perlu 5I v Perlu 6 budeme moci používat nespecifikvaný kód Perlu 5.
Výpis textuExistuje příkaz say jako alternativa print, která navíc vytiskne znak nového řádku.
Sigil se nemění pro získání prvku poleSigil (znak, který označuje začátek proměnné) zůstává v Perlu 6 stejný i po operaci "prvek pole" nebo "prvek hashe". Konkrétněji, následující příklad bude běžným zápisem (v Perlu 5 bychom měli změnit u @pole[2] zavináč na dolar).
TwigilsTaké se objevují tzv. twigils. To jsou proměnné se dvěma sigil znaky. Vyskytují se následující twigils:
DeklarátoryPodívejme se, jakými způsoby lze deklarovat proměnné.
Končí local, ale lze používat temp. Méně závorekU často používaných konstrukcí mohou být vynechávány kulaté závorky. Cykly a podmínky tak lze psát v tomto stylu (dříve to bylo možné pouze v postfixovém zápisu).
Definice polePodobně je to s definicí pole. Operátor čárka se zde již chová jinak (v Perlu 5 by následující kód měl úplně jiný význam - toto lze uvést jako důkaz nekompatibility Perlu 6 s předchozími verzemi).
Pro vytváření pole řetězců nyní máme místo qw novou syntaxi.
Nově lze snadno na pole konvertovat proměnnou s mezerami.
Exsituje také speciální operátor Q pro uvozování, který přijímá různé modifikátory. Líné vyhodnocováníLze vytvořit pole s "nekonečně mnoha" prvky uvedením hvězdičky nebo Inf jako horní meze. Následující kód bude fungovat.
Obsah pole se vyhodnocuje líně. Dokud ho nepotřebujeme, nebude se počítat. Příslušná část se vyhodnocuje, jakmile je to potřeba (čtení hodnoty). S tím souvisí i zavedení konstrukce gather...take. Vytvoříme pole @nadruhou všech čtvercových čísel od 0 do nekonečna.
Celý proces se zde vyhodnocuje líně, což znamená, že příslušné hodnoty prvků pole @nadruhou budou dopočteny teprve až dojde k jejich přečtení. Díky tomu není plýtváno cennými jednotkami CPU, pokud výpočet nebude potřeba. Hybridní typový systémV Perlu 5 jsme se vůbec nemuseli starat o datové typy používaných proměnných. Pracovali jsme s různými druhy dat a Perl si je v tichosti sám podle nějakých pravidel konvertoval. To v Perlu 6 zůstává, ale nově bude existovat i možnost explicitního uvedení datového typu programátorem při deklaraci proměnné.
K dispozici máme následující datové typy.
Výraz lze testovat na datový typ pomocí v Perlu 6 oblíbeného operátoru "odpovídat si", který se zapisuje ~~. Například výraz 1 ~~ Int je pravdivý. Lze definovat vlastní datové typy. Například datový typ pro sudá čísla bychom definovali takto.
Rozepisování datových strukturPro pohled do nitra datové struktury jsme se naučili používat modul Data::Dumper. Nyní ale pro základní orientaci postačí následující.
Přetěžování kontextuV Perlu 5 máme funkci scalar, která vynutí skalární kontext. V Perlu 6 lze již vynutit libovolný kontext. Následující tabulka uvádí, jak vynutit jednotlivé (již specializovanější než jen prázdný, skalární a pole) datové typy.
Díky této změně budeme moci zjednodušit spoustu zápisů. Jak bychom například v Perlu 6 zjistili neprázdnost pole? Podprogram MAINPodprogram s názvem MAIN si automaticky vezme parametry z příkazového řádku. Ukažme si, jak to lze použít.
A teď se podívejme, jak bude program reagovat na volání.
Co když uvedeme jiný počet parametrů? Pak se automaticky zavolá podprogram USAGE, který implicitně vytiskne následující zprávu.
Pokud místo klíčového slova sub uvedeme multi, lze vytvořit různé MAIN pro různé prototypy. Také lze zadávat parametry --arg1 --arg2. Pojmenování parametrů v hlavičce podprogramů, konec @_V hlavičce podprogramů je třeba v Perlu 6 pojmenovat parametry, protože již nebudeme používat proměnnou @_. Podprogramy tak budou vypadat následovně.
I zde je možné explicitně uvést datový typ.
Důležité však je, že tyto parametry budou pouze pro čtení a při pokusu o změnu jejich hodnoty bude vyvolána výjimka. Toto chování lze změnit atributem is rw. Existují tři módy předávání parametrů:
Parametry mohou být povinné i nepovinné. Standardně jsou povinné a pro změnu chování je třeba uvést za pojmenovaný parametr znak ! a za poziční znak ?. Srkající parametry jsou vždy nepovinné. Podívejme se na příklad, který ukazuje chování dvou různých volání.
EnumeracePomocí následujícího kódu lze vytvářet něco jako speciální datový typ pro konečné množství hodnot.
Hodnotu pak reprezentujeme jako Rok::2011. Změny v cyklechfor a while cyklus můžeme psát v nové syntaxi. V jedné iteraci můžeme ze seznamu převzít i více než jeden prvek.
Céčkovský for cyklus je nyní přejmenován na loop. Cyklus loop {} se dá také použít jako nekonečná smyčka. Operace se souboryKoncept handlerů z Perlu 5 samozřejmě funguje dále. Perl 6 ale nabídne několik zajímavých usnadnění. Podívejme se, jak budeme moci otevřít soubor a číst z něj.
Jak vytvoříme nový soubor (analogie unixového touch)?
A co zápis?
Za zmínku stojí též funkce slurp s názvem souboru jako parametrem, která vrátí obsah souboru. Změnilo se také testování souborů. Nyní budeme testovat pomocí nového operátoru ~~ pro "odpovídání si", se kterým můžeme porovnávat skoro všechno se vším. Ještě se s ním setkáme později. Například existenci souboru ověříme následovně.
Změny v OOPV Perlu 5 vznikaly objekty pomocí funkce bless. To je možné stále, ale existuje nově také paralelní model, který je inspirován i již existujícím Moose. Okamžitě viditelnou je změna operátoru šipky na tečku při přístupu k metodám a atributům. Takto bychom mohli začít psát třídu pro manipulaci s komplexními čísly. Musíme deklarovat atributy pro reálnou a imaginární část pomocí deklarátoru has. Atributy se označují uvedením tečky hned po sigil znaku.
Takto potom vytvoříme číslo 1 + 2i.
Dále s ním samozřejmě můžeme manipulovat.
Nové OOP bude podporovat role, které budou fungovat podobně jako v Moose. Role jsme již probrali dříve a proto zde jen uveďme, jak se budou v Perlu 6 používat.
Nyní bychom mohli tuto roli přiřadit konkrétnímu objektu.
Přípojky (junctions)Přípojky jsou hodnoty, které se mohou vyskytovat ve více stavech. Jde o velmi zajímavou myšlenku, která se poprvé v Perlu objevila jako modul Quantum::Superpositions. Zadefinujme proměnnou, která se bude vyskytovat v 5 stavech. Nejprve se podívejme na přípojku typu "any", která reprezentuje některou z hodnot.
Nyní krátce zkoumejme vlastnosti této proměnné. Můžeme zkusit testovat, jaké číslo tato proměnná reprezentuje. Následující test dopadne úspěšně.
Zajímavé je, že úspěšně dopadne i následující test. U tohoto typu přípojky je totiž pro rovnítko lepší intepretací operace "být prvkem množiny".
Vybereme-li číslo mimo množinu, test neuspěje.
Leckoho napadne, jak se chová $mnozina1 při běžných aritmetických operacích.
Asi ale nikoho nepřekvapí, že výsledným výrazem je další přípojka, protože je to jediný konzistentní způsob. Výraz se tedy vyhodnotí na any(0, 2, 4, 6, 12). Ještě existuje druhý typ přípojky a to typ "all". Ta vyjadřuje všechny hodnoty.
Rozdíl si můžeme ukázat například při porovnávání. Když porovnáváme dvě "any" přípojky mezi sebou, výraz je pravdivý, pokud existuje v první přípojce prvek, který je obsažen i ve druhé. Porovnáváme-li "all" přípojky, musí mít pro pravdivou hodnotu všechny stavy identické. Při porovnávání "any" a "all" přípojky musí existovat každý stav "all" přípojky i v "any" přípojce. Následující výraz je potom nepravdivý.
Dodejme, že nezávisí na pořadí prvků v přípojkách. Měli bychom připomenou i to, že bitové operátory (jako které by přípojky identifikoval Perl 5) mají nyní novou syntaxi. Více v dokumentaci. Poznamenejme, že s přípojkami souvisí ještě to, že výraz obsahující all(@pole) se může začít samovolně zpracovávat ve více vláknech. Uvedení all se totiž chápe tak, že nezáleží na pořadí, ve kterém se budou výrazy zpracovávat. Využití může vypadat i takto.
MakraNa okraj zmiňme také makra. V Rakudo Perlu zatím nejsou implementované, ale v budoucnu bude fungovat kód následujícího typu.
Další změny stručně
Související články
Předchozí Celou kategorii (seriál) Další
Perl (1) - Dávka teorie na úvod
Perl (2) - Úvod do syntaxe Perl (3) - Proměnné Perl (4) - Čísla a řetězce Perl (5) - Podmínky Perl (6) - Pravdivostní výrazy Perl (7) - Vstup poprvé Perl (8) - Některé základní vestavěné funkce Perl (9) - Cykly Perl (10) - Další řídící struktury Perl (11) - Pole - úvod Perl (12) - Pole - základní operace Perl (13) - Hashe Perl (14) - Další nástroje pro seznamy Perl (15) - Výchozí proměnná, heredoc, symbolické odkazy Perl (16) - Regulární výrazy - začínáme Perl (17) - Regulární výrazy - kotvy Perl (18) - Regulární výrazy - množiny znaků Perl (19) - Regulární výrazy - opakování a kvantifikátory Perl (20) - Regulární výrazy - magické závorky Perl (21) - Regulární výrazy - nahrazování Perl (22) - Regulární výrazy - přepínače Perl (23) - Regulární výrazy - rozšířené vzory Perl (24) - Regulární výrazy - příklady Perl (25) - Regulární výrazy - závěr Perl (26) - Podprogramy Perl (27) - Prototypy Perl (28) - Rozsahy platnosti proměnných Perl (29) - Úvod k práci se soubory Perl (30) - Práce se soubory Perl (31) - Testování souborů Perl (32) - Jiné typy souborů Perl (33) - Formátování výstupu - printf Perl (34) - Formátování výstupu - formáty Perl (35) - Vestavěný debugger Perl (36) - Grafické debuggery Perl (37) - Začínáme s moduly Perl (38) - Rozhraní modulu Perl (39) - Pragma Perl (40) - Dodatky k modulům Perl (41) - CPAN Perl (42) - Argumenty příkazového řádku Perl (43) - Přepínače Perl (44) - Dlouhé přepínače Perl (45) - Odkazy Perl (46) - Užití odkazů a anonymní data Perl (47) - Složitější datové struktury Perl (48) - Libovolně složité datové struktury Perl (49) - Tabulky symbolů a typegloby Perl (50) - Uzávěry a iterátory Perl (51) - Signály Perl (52) - Externí příkazy Perl (53) - Režim nakažení Perl (54) - Fork Perl (55) - Eval Perl (56) - Volby příkazu perl Perl (57) - Jednořádkové skripty Perl (58) - OOP - úvod Perl (59) - OOP - typické použití Perl (60) - OOP - dědičnost Perl (61) - OOP - přínos a užití dědičnosti Perl (62) - OOP - přetěžování Perl (63) - OOP - závěr Perl (64) - Projekt - čtečka sportovních výsledků Perl (65) - Projekt - získání dat Perl (66) - Projekt - výběr zápasů a podrobnosti Perl (67) - Projekt - dokončujeme modul Perl (68) - Projekt - zobrazení zápasů Perl (69) - Projekt - online přenos Perl (70) - Plain Old Documentation Perl (71) - Navazování proměnných Perl (72) - Navazování složitějších datových typů Perl (73) - DBM Perl (74) - Sockety Perl (75) - Obsluha více klientů Perl (76) - Síťová hra v kostky Perl (77) - Služby internetu Perl (78) - Databáze - úvod Perl (79) - Databáze - manipulace s daty Perl (80) - Databáze - závěrečné poznámky Perl (81) - CGI - příprava webového serveru Perl (82) - CGI - první skripty Perl (83) - CGI - získávání dat od uživatele Perl (84) - CGI - usnadnění tvorby skriptů pomocí modulu CGI Perl (85) - CGI - generování dokumentu modulem CGI Perl (86) - CGI - cookies Perl (87) - CGI - příklad aplikace Perl (88) - CGI - závěr Perl (89) - Mason - snadné psaní webů Perl (90) - Mason - speciální bloky Perl (91) - Mason - handlery Perl (92) - Mason - závěr Perl (93) - Catalyst - MVC framework pro Perl Perl (94) - Catalyst - základy pro psaní aplikace Perl (95) - Catalyst - šablony Perl (96) - Catalyst - spolupráce s databází Perl (97) - Curses - tvorba textových uživatelských rozhraní Perl (98) - Curses - pozicování a okna Perl (99) - Curses - měření rychlosti psaní Perl (100) - Curses - použití hotových widgetů Perl (101) - Curses - jednoduchý textový editor Perl (102) - Rozšiřování Perlu pomocí XS Perl (103) - Rozšiřování Perlu pomocí SWIG Perl (104) - Testování rychlosti Perl (105) - Testování programových jednotek Perl (106) - Debugování pomocí komentářů Perl (107) - Moose - moderní objektový systém Perl (108) - Moose - základní vlastnosti Perl (109) - Moose - role Perl (110) - Moose - meta API Perl (111) - Pokročilá práce se seznamy Perl (112) - Práce s PDF Perl (113) - Práce s archivy Perl (114) - Tk - úvod Perl (115) - Tk - umísťování widgetů Perl (116) - Tk - základní widgety Perl (117) - Tk - některé pokročilejší widgety Perl (118) - Tk - čas a události Perl (119) - Tk - CD man Perl (120) - Wx - základní práce s widgety Perl (121) - Wx - události Perl (122) - Gtk2 - úvod Perl (123) - Gtk2 - základní práce s obrázky Perl (124) - Gtk2 - události a čas Perl (125) - Gtk2 - vlastní widgety Perl (126) - Gtk2 - textové okno a práce s pozicemi Perl (127) - Gtk2 - hierarchické seznamy Perl (128) - Gtk2 - dialogy Perl (129) - Gtk2 - skládání widgetů Perl (130) - Gtk2 - menu a toolbary Perl (131) - Gtk2 - transparentní okna, tray ikona, výběr souborů Perl (132) - Gtk2 - drag&drop, druid Perl (133) - Gtk2 - úpravy vzhledu aplikací pomocí rc Perl (134) - Gtk2 - Glade Interface Designer Perl (135) - XML - čtení a zápis Perl (136) - XML - DOM a SAX přístupy Perl (137) - Vlákna Perl (138) - Memoizace - cachování podprogramů Perl (139) - Profilling - efektivní odhalování pomalých míst v programu Perl (140) - Profilling - píšeme si vlastní profiler / debugger Perl (141) - Formátování kódu, deparsování, perltidy Perl (142) - Způsoby konfigurování Perl (143) - Struktura datových typů, správa paměti Perl (144) - POE - událostmi řízené programování Perl (145) - POE - aplikace typu klient-server Perl (147) - Perl 6 - regulární výrazy, nové operátory Perl (148) - Perl Culture Perl (149) - Závěr Pozvánka na Český Perl Workshop Perl 5.22.0 a vše okolo Perl 5.24.0 a vše okolo Předchozí Celou kategorii (seriál) Další
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |