<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.multimediaexpo.cz/mmecz/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Perl_6</id>
		<title>Perl 6 - Historie editací</title>
		<link rel="self" type="application/atom+xml" href="http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Perl_6"/>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Perl_6&amp;action=history"/>
		<updated>2026-04-27T13:05:29Z</updated>
		<subtitle>Historie editací této stránky</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Perl_6&amp;diff=345639&amp;oldid=prev</id>
		<title>Sysop: 1 revizi</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Perl_6&amp;diff=345639&amp;oldid=prev"/>
				<updated>2013-09-25T10:14:18Z</updated>
		
		<summary type="html">&lt;p&gt;1 revizi&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 25. 9. 2013, 10:14&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Perl_6&amp;diff=345638&amp;oldid=prev</id>
		<title>Sysop: + Vylepšení</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Perl_6&amp;diff=345638&amp;oldid=prev"/>
				<updated>2012-05-31T00:17:43Z</updated>
		
		<summary type="html">&lt;p&gt;+ Vylepšení&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Perl 6''' je [[dynamický programovací jazyk|dynamický]] programovací jazyk, který vzniká celkovým přepracováním stávající verze [[Perl]]u.&lt;br /&gt;
&lt;br /&gt;
[[Larry Wall]], původní autor Perlu, nazývá Perl 6 &amp;quot;přepracování Perlu a komunity komunitou&amp;quot; (&amp;quot;community's rewrite of Perl and of the community&amp;quot;), protože jedny z nejvýznamnějších změn provedl na základě 361 RFC (žádosti o komentáře), které mu byly zaslány v roce [[2000]].&amp;lt;ref name=&amp;quot;apoc1&amp;quot;&amp;gt;{{Citace elektronické monografie | url=http://dev.perl.org/perl6/doc/design/apo/A01.html | titul=Apocalypse 1: The Ugly, the Bad, and the Good | autor=[[Larry Wall|Wall, Larry]] | datum=2001-04-02}}&amp;lt;/ref&amp;gt; Larry uspořádal tyto změny do série esejí ([[Apocalypses]]), kde nastínil které změny se mu líbí, které ne a které ještě zváží. Tyto dokumenty jsou nyní považovány za historické. Nynější, zatím nedokončená a neustále se vyvíjející specifikace Perlu 6 je uvedena v dokumentech s názvem [[Synopses]]. Číslování Apocalypses a Synopses odpovídá jednotlivým kapitolám v knize [[Programování v Perlu (kniha)|Programování v Perlu]].&lt;br /&gt;
&lt;br /&gt;
Perl 6 je přepracování jazyka, jež přináší elementy z moderních i historických jazyků. Výrazně se liší od předchozích verzí Perlu a nebude [[zpětná kompatibilita|zpětně kompatibilní]] na úrovní zdrojových kódů. Kód a především moduly v Perlu 5 však bude možné dále používat.&lt;br /&gt;
&lt;br /&gt;
Perl 6 je vyvíjen již přes šest let. Bohužel zatím neexistuje úplná implementace Perlu 6. V projektu [[Pugs]] je již větší část vlastností jazyka hotova, ale nevýhodami jsou malá rychlost a nekompatibilita licencí některých částí kódu. Existují další dvě implementace, jedna v [[Parrot]]u na základě [[Parser Grammar Engine|PGE]], nazvaná Rakudo Perl, a druhá v [[Perlu 5]], který je součástí projektu Pugs. Práce na projektu Pugs byla zastavena, naopak první release Rakuda, nazvaný také Rakudo Star, byl uvolněn v červenci 2010.&lt;br /&gt;
&lt;br /&gt;
== Hlavní změny oproti Perlu 5 ==&lt;br /&gt;
Perl 5 a Perl 6 jsou velmi rozdílné jazyky, přesto hlavním záměrem bylo aby „Perl 6 byl stále Perl“. Mnoho změn má standardizovat jazyk a udělat jej snadnějším pro naučení ať již pouze základům nebo hodně do hloubky. Pokračuje tedy ve vývoji a dělá jednoduché věci ještě více jednoduššími a umožňuje dělat více složitých věcí ({{Cizojazyčně|en|easy things easier and hard things more possible}}).&lt;br /&gt;
&lt;br /&gt;
=== Specifikace ===&lt;br /&gt;
&lt;br /&gt;
Hlavní netechnický rozdíl mezi Perlem 5 a Perlem 6 je že Perl 6 začal specifikací jazyka. To znamená, že Perl 6 může být reimplementován, pokud to bude nutné a také to, že programátor nemusí číst zdrojové kódy, aby získal úplnou informaci o některé z vlastností. Dokumentace Perlu 5 je považovaná za velmi kvalitní, ale pokud se dokumentace a zdrojové kódy interpretu Perlu 5 liší, pak jsou právě zdrojové kódy považovány za správný stav a dokumentace by měla být změněna. Jinak řečeno specifikace Perlu 5 je dána existujícím interpretem, přesná specifikace v podobě klasického textu neexistuje.&lt;br /&gt;
&lt;br /&gt;
=== Typový systém ===&lt;br /&gt;
&lt;br /&gt;
V Perlu 6 byl dynamický typový systém rozšířen o možnost uvést statické typy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
my Int $i = 0;&lt;br /&gt;
my Num $n = 3.142;&lt;br /&gt;
my Str $s = &amp;quot;Hello, world&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avšak, stejně jako v Perlu 5, programátor může většinu věcí dělat bez explicitního vyjádření typu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
my $i = &amp;quot;25&amp;quot; + 10; # $i is 35&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zastánci statického typování uvádějí že je výhodné pro optimalizaci v kompilátoru, snižuje počet chyb programátora a zvyšuje udržovatelnost, zvláště u velkých projektů.&lt;br /&gt;
&lt;br /&gt;
Na druhou stranu dynamické typování snižuje délku zdrojového kódu, což je důležité u malých projektů. Velmi se to projevuje u rychlého psaní jednořádkových či krátkých skriptů nebo skriptů na jedno použití.&lt;br /&gt;
&lt;br /&gt;
Perl 6 tedy nabízí hybridní typový systém a programátor si tedy může zvolit zda bude používat statické nebo dynamické typování nebo obojí najednou.&lt;br /&gt;
&lt;br /&gt;
=== Definice parametrů podprogramů ===&lt;br /&gt;
Při předání parametrů do podporogramu v Perlu 5 je „vytvořeno“ pole aliasů na tyto paramety označené &amp;lt;tt&amp;gt;@_&amp;lt;/tt&amp;gt;. Pokud je pole @_ modifikováno, pak se změna může projevit v originálních předávaných datech.&lt;br /&gt;
&lt;br /&gt;
Perl 6 již má skutečné formální parametry. V Perlu 6 může definice podprogramu vypadat třeba takto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub udělej_něco(Str $text, Int $číslo) { ... }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tyto parametry jsou defaultně jen pro čtení. Nelze tedy měnit jejich hodnotu. Pro čtení i zápis (read-write) je možné je označit direktivou &amp;lt;code&amp;gt;is rw&amp;lt;/code&amp;gt;. Pokud je označíme &amp;lt;code&amp;gt;is copy&amp;lt;/code&amp;gt;, pak je možné je měnit lokálně.&lt;br /&gt;
&lt;br /&gt;
====Předávání parametrů====&lt;br /&gt;
Perl 6 poskytuje tři základní typy předávaní parametrů:&lt;br /&gt;
* Poziční  ({{Cizojazyčně|en|Positional}})&lt;br /&gt;
* Pojmenované  ({{Cizojazyčně|en|Named}})&lt;br /&gt;
* Srkající  ({{Cizojazyčně|en|Slurpy}})&lt;br /&gt;
Poziční parametry jsou klasický seznam seřazených parametrů, který používá většina programovacích jazyků. Všechny parametry mohou být také předány pomocí jejich jména v neseřazené formě. Pojmenované parametry mohou být předány pouze pomocí svého jména (což znamená, že nejsou nikdy předávány jako poziční) a jsou označeny pomocí znaku &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; před jménem. Srkající (slurpy) parametry (označené pomocí &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; před nimi) jsou nástrojem Perlu 6 pro funkce s proměnným počtem parametrů (variadic functions). Srkající hash bude obsahovat všechny zbývající pojmenované parametry, zatímco skrající pole bude obsahovat všechny zbývající parametry předané pozičně.&lt;br /&gt;
&lt;br /&gt;
Ukázka používající všechny tři možnosti předávaní parametrů:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub somefunction($a, $b, :$c, :$d, *@e) {...}&lt;br /&gt;
&lt;br /&gt;
somefunction(1, 2, :d&amp;lt;3&amp;gt;, 4, 5, 6); # $a=1, $b=2, $d=3, @e=(4,5,6)&lt;br /&gt;
somefunction(:b&amp;lt;2&amp;gt;, :a&amp;lt;1&amp;gt;);         # $a=1, $b=2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Poziční parametry jako ty v příkladu jsou povinné, pokud za nimi není uveden znak &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;, který vyjadřuje že jsou nepovinné. Pojmenované parametry jsou standardně nepovinné, pokud nejsou označeny znakem &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; za jménem proměnné. Srkající parametry jsou vždy nepovinné.&lt;br /&gt;
&lt;br /&gt;
====Bloky a uzávěry====&lt;br /&gt;
Parametry mohou být rovněž poslány do libovolného bloku, který se chová jako uzávěr. Je to způsob, jak jsou např. iterátory while smyčky pojmenovány. V následujícím příkladu je procházen seznam po třech elementech najednou a ty jsou předávány do loop bloku jako proměnné $a, $b, $c.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
for @list -&amp;gt; ($a, $b, $c) { ... }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obecně je tento způsob nazýván „nečisté podprogramy“ ({{Cizojazyčně|en|pointy sub}}) nebo „nečisté bloky“ ({{Cizojazyčně|en|pointy block}}), u nichž se šipka chová téměř úplně stejně jako klíčové slovo sub. Tento způsob zavádí do jazyka anonymní uzávěry ({{Cizojazyčně|en|closure}}) (nebo anonymní podprogramy ({{Cizojazyčně|en|subroutine}}) při použití terminologie Perlu 5).&lt;br /&gt;
&lt;br /&gt;
=== Neměnnost sigils ===&lt;br /&gt;
V Perlu 5 se [[Sigil|''sigils'']] — interpunkční znak před samotným jménem proměnné — mění podle toho jak je proměnná použita:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Perl 5 code&lt;br /&gt;
my &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;@&amp;lt;/span&amp;gt;array = (1, 2, 3);&lt;br /&gt;
my $element = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;$&amp;lt;/span&amp;gt;array[1]; # $element equals 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V Perlu 6, sigils jsou invariatní, což znamená, že se nemění podle toho zda jde o pole nebo o prvek pole:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Perl 6 code&lt;br /&gt;
my &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;@&amp;lt;/span&amp;gt;array = (1, 2, 3);&lt;br /&gt;
my $element = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;@&amp;lt;/span&amp;gt;array[1]; # $element equals 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Změna sigil v Perlu 5 byla inspirovaná přirozenými jazyky:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;'''To''' jablko&amp;quot;.                                  # SPRÁVNĚ&lt;br /&gt;
    &amp;quot;'''Ta''' jablka.                                   # SPRÁVNĚ&lt;br /&gt;
    &amp;quot;'''To''' jedno třetí jablko z jablek&amp;quot;.             # SPRÁVNĚ&lt;br /&gt;
    &amp;quot;'''Ta''' jedno třetí jablo z jablek&amp;quot;.              # ŠPATNĚ&lt;br /&gt;
&lt;br /&gt;
Změna v Perlu 6 má snížit ''cognitive load'' při rozeznávání zda použít ''@'' nebo ''$''.&lt;br /&gt;
&lt;br /&gt;
=== Objektově orientované programování ===&lt;br /&gt;
Perl 5 podporoval objektově orientované programování přes mechanismus známý jako ''požehnávání'' ({{Cizojazyčně|en|blessing}}). Jakákoliv reference mohla být „požehnána“ ({{Cizojazyčně|en|blessed}}) do stavu objektu určité třídy, požehnaný objekt mohl mít metody volatelné na něm pomocí „šipkové notace“ ({{Cizojazyčně|en|arrow syntax}}), která v Perlu 5 měla za následek statické vyhledání nebo dynamické vyhledání ({{Cizojazyčně|en|dispatch}}) příslušného podprogramu podle jména a jeho zavolání tak, že požehnaná proměnnou byla prvním argumentem.&lt;br /&gt;
&lt;br /&gt;
I když jde o extrémně mocný model, prakticky jakýkoliv objektový model jiného programovacího jazyka je možné tímto jednoduchým modelem simulovat, tak na druhou stranu běžné případy objektově orientovaného programování, jako např. jednoduchá kompozice objektů s nějakým přidruženým kódem, jsou zbytečně složité. Navíc, protože Perl nemůže dělat žádné předpoklady o tom zda je použit objektový model, tak nemůže ani příliš dobře optimalizovat volání metod.&lt;br /&gt;
&lt;br /&gt;
V duchu dělání „jednoduchých věcí jednoduchými a složitých možnými“, Perl 6 zachováná model požehnávání, ale podporuje také mnohem robustnější model pro běžné případy.&amp;lt;ref&amp;gt;{{Citace elektronické monografie | url=http://dev.perl.org/perl6/doc/design/syn/S12.html | titul=Synopsis 12: Objects | autor=Wall, Larry | datum=2006-08-18 }}&amp;lt;/ref&amp;gt; Například, třída zapouzdřující bod v Kartézské souřadnicové soustavě může být definována a použita takto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
class Bod is rw {&lt;br /&gt;
  has $.x;&lt;br /&gt;
  has $.y;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my Bod $bod .= new( :x&amp;lt;1.2&amp;gt;, :y&amp;lt;-3.7&amp;gt; );&lt;br /&gt;
&lt;br /&gt;
# Nyní změníme x (všimněnte si že metoda &amp;quot;x&amp;quot; je použita jako lhodnota):&lt;br /&gt;
$bod.x = 2;&lt;br /&gt;
say &amp;quot;X-ová souřadnice bodu: &amp;quot;, $bod.x;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Šipka je nahrazena tečkou, což je mnohem běžnější syntaxe (Java, Python, atd.) pro volání metod.&lt;br /&gt;
&lt;br /&gt;
V terminologii Perlu 6 je &amp;lt;code&amp;gt;$.x&amp;lt;/code&amp;gt; nazývám „atribut“ ({{Cizojazyčně|en|attribute}}). Jiné jazyky nazývají atribut položkou ({{Cizojazyčně|en|field}}) nebo prvkem ({{Cizojazyčně|en|member}}). Metoda používaná pro přístup k atributu je nazývána „accessor“ ({{Cizojazyčně|en|accessor}}). Auto-accessors jsou metody, které jsou vytvářeny automaticky jako např. metoda &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; v příkladu výše. Tyto accessor funkce vrací hodnotu atributu. Pokud je třída nebo jednotlivý atribut deklarován s &amp;lt;code&amp;gt;is rw&amp;lt;/code&amp;gt; modifikátorem (rw je zkratka pro &amp;quot;read/write&amp;quot;, tj. &amp;quot;čtení/zápis&amp;quot;), auto accesoru může být poslaná nová hodnota jako parametr pro nastavení atributu nebo mu může být použit přímo jako [[lhodnota|hodnota]] pro přímé přiřazení (jako v příkladu výše). Auto accesor může být nahrazen jinou uživatelsky definovovanou metodou, pokud programátor požaduje složitější přístup k atributu. K atributům je možné přistupovat přímo pouze z vnitřku třídy. Všechny ostatní přístupy mohou být uskutečněny pouze pomocí accestor metod.&lt;br /&gt;
&lt;br /&gt;
==== Role ====&lt;br /&gt;
&lt;br /&gt;
Role v Perlu 6 jsou možností jak použít jak ''interfaces'' z Javy tak traits&amp;lt;ref&amp;gt;{{Citace elektronické monografie | titul=Traits | url=http://www.iam.unibe.ch/~scg/Research/Traits/ | autor=The Software Composition Group | rok=2003}}&amp;lt;/ref&amp;gt; z varianty Squeak Smalltalku. Jsou podobné třídám, ale jsou zcela abstraktní. Při použití s třídami jsou způsobem kompozice bez zasahování do pole dědičností ({{Cizojazyčně|en|inheritance chain}}) třídy. Role definují nominální typy; poskytují sémantické jména pro soubor chování a stavu.&lt;br /&gt;
&lt;br /&gt;
Základním rozdílem mezi rolemi a třídami je to, že ze třídy je možné vytvořit instanci objektu ({{Cizojazyčně|en|are instantiable}}), zatímco z rolí ne.&amp;lt;ref&amp;gt;{{Citace elektronické monografie | titul=Roles: Composable Units of Object Behavior | url=http://www.oreillynet.com/onlamp/blog/2006/08/roles_composable_units_of_obje.html | autor=chromatic | rok=2006}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V podstatě je role balík (eventuálně abstraktních) metod a atributů, které mohou být ke třídě přidány bez použití dědičnosti. Role může být přidána také k individuálnímu objektu, v tomto případě Perl 6 vytvoří anonymní podtřídu (''subclass''), přidá roli k této podtřídě a změní třídu objektu na takto vzniklou anonymní podtřídu (s rolí).&lt;br /&gt;
&lt;br /&gt;
Např. pes je savec. Psi dědí některé vlastnosti od savců, např. mléčné žlázy a také, protože savci jsou obratlovci, páteř. Psi mohou mít jednu nebo několik různých typů chování, např. pes může být domácí mazlíček, pes divoký nebo vodící pes pro nevidomé. Avšak toto jsou jednoduché soubory dodatečných vlastností, které mohou být přiřazeny jak ke psovi, tak v případě vlastností &amp;quot;mazlíček&amp;quot; či &amp;quot;divoký&amp;quot; také např. ke kočce. Proto pes a savec jsou třídy, zatímco mazlíček, divoký a vodící jsou role.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
class Savec is Obratlovec {...}&lt;br /&gt;
class Pes is Savec {...}&lt;br /&gt;
role Mazlící {...}&lt;br /&gt;
role Divoký {...}&lt;br /&gt;
role Vodící {...}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Role jsou přidávány třídě nebo objektu pomocí klíčového slova &amp;lt;code&amp;gt;does&amp;lt;/code&amp;gt; (dělá) na rozdíl od klíčového slova &amp;lt;code&amp;gt;is&amp;lt;/code&amp;gt; (je) pro dědičnost. Klíčové slova odrážejí rozdílný význam těchto dvou vlastností: přidání role dává třídě &amp;quot;chování&amp;quot; této role, ale nenaznačuje, že se jedná o &amp;quot;stejnou věc&amp;quot; jako je tato role.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
class VodícíPes is Pes does Vodící {...}   # přidání role k podtřídě&lt;br /&gt;
&lt;br /&gt;
my $pes = new Pes;&lt;br /&gt;
$pes does Vodící;                          # přidání role k individuálnímu objektu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I když se role liší od tříd, obě jsou typy. Proto se role může vyskytovat v deklaraci proměnné, tam kde běžně bývá třída. Např. role &amp;quot;Nevidomý&amp;quot; u člověka může obsahovat atribut typu &amp;quot;Vodící&amp;quot; a tento může obsahovat hodnotu vodící pes, vodící kůň, vodící člověk nebo vodící stroj.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
class Člověk {&lt;br /&gt;
    has Pes $pes;                        # Může obsahovat psa, ať už má, či nemá roli Vodící&lt;br /&gt;
    ...                                  &lt;br /&gt;
}&lt;br /&gt;
role Nevidomý {&lt;br /&gt;
    has Vodící $vodič;                   # Může obsahovat jakýkoliv objekt, který má roli Vodící,&lt;br /&gt;
    ...                                  # ať už je to Pes nebo něco jiného&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regulární výrazy ===&lt;br /&gt;
Regulární výrazy a podpora pro zpracování textů jsou jedněmi z vlastností, které definují Perl.&amp;lt;ref&amp;gt;{{Citace elektronické monografie | url=http://cslibrary.stanford.edu/108/EssentialPerl.html#re | titul=Essential Perl: String Processing with Regular Expressions | autor=Parlante, Nick | rok=2000}}&amp;lt;/ref&amp;gt; Možnosti pro rozeznávání vzorů ({{Cizojazyčně|en|pattern-matching}}) Perlu již před nějakou dobou překračují klasické formální regulární výrazy, proto jsou v dokumentaci Perlu 6 nazývány výhradně termínem ''regexes'', který je odlišný od formální definice.&lt;br /&gt;
&lt;br /&gt;
Regexes Perlu 5 jsou součásti mnohem větší množiny funkcí nazývaných pravidla ({{Cizojazyčně|en|rules}}), které obsahují možnosti kontextových parserů (jak např. [[syntactic predicate]]s of [[parsing expression grammar]]s and [[ANTLR]]) stejně jako možnost chovat se jako uzávěry ({{Cizojazyčně|en|closures}}) respektující jejich lexikalní (statický) rámec ({{Cizojazyčně|en|lexical scope}}) .&amp;lt;ref&amp;gt;{{Citace elektronické monografie | url=http://dev.perl.org/perl6/doc/design/syn/S05.html | titul=Synopsis 5: Regexes and Rules | autor=Wall, Larry | datum=2002-06-24 }}&amp;lt;/ref&amp;gt; Pravidla se definují pomocí klíčového slova &amp;lt;code&amp;gt;rule&amp;lt;/code&amp;gt; podobně jako podprogramy. Anonymní pravidla mohou být definovaný pomocí &amp;lt;code&amp;gt;regex&amp;lt;/code&amp;gt; (nebo &amp;lt;code&amp;gt;rx&amp;lt;/code&amp;gt;) nebo mohou být použitý uvnitř ({{Cizojazyčně|en|inline}}) stejně jako tomu bylo v případě regexps Perlu 5 přes &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; (srovnej ({{Cizojazyčně|en|matching}})) nebo &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; (hledej a nahraď ({{Cizojazyčně|en|search adn replace}})) operátory.&lt;br /&gt;
&lt;br /&gt;
V ''Apocalypse 5'', Larry Wall napočítal 20 problémů se &amp;quot;stávající kulturou regex výrazů ({{Cizojazyčně|en|current regex culture}})&amp;quot;. Mezi nimi bylo to, že regexes Perlu byly &amp;quot;příliš kompaktní ({{Cizojazyčně|en|compact}}) a 'roztomilé ({{Cizojazyčně|en|cute}})'&amp;quot;, měly &amp;quot;příliš mnoho důvěru v přílič málo operátorů&amp;quot;, &amp;quot;slabou podporu pro pojmenované zachycení ({{Cizojazyčně|en|captures}})&amp;quot; a &amp;quot;slabou podporu integrace se 'skutečnými' jazyky&amp;quot;.&amp;lt;ref&amp;gt;{{Citace elektronické monografie | url=http://dev.perl.org/perl6/doc/design/apo/A05.html | titul=Apocalypse 5: Pattern Matching | autor=Wall, Larry | datum=2002-06-04 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zjednodušení syntaxe ===&lt;br /&gt;
Některé konstrukce Perlu 5 byly v Perlu 6 změněny, tak aby byly optimálnější pro odlišné syntaktické pravidla pro nejpoužívanější případy. Např. kulatá závorka vyžadovaná pro příkazy řízení ({{Cizojazyčně|en|control flow}}) v Perlu 5 je nyní nepovinná:&amp;lt;ref&amp;gt;{{Citace elektronické monografie | url=http://dev.perl.org/perl6/doc/design/syn/S04.html | titul=Synopsis 4: Blocks and Statements | autor=Wall, Larry | datum=2004-08-19 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
if is_true() {&lt;br /&gt;
   for @array {&lt;br /&gt;
       ...&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Také operátor &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt; (čárka ({{Cizojazyčně|en|comma}})) je nyní konstruktor seznamu ({{Cizojazyčně|en|list}}), proto nejsou obklopující závorky rovněž vyžadovány. Kód&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
@pole = 1, 2, 3, 4;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vytváří pole ({{Cizojazyčně|en|array}}) @pole s obsahující prvky ({{Cizojazyčně|en|elements}}) '1', '2', '3' a '4'.&lt;br /&gt;
&lt;br /&gt;
=== Zřetězené porovnávání ===&lt;br /&gt;
Perl 6 umožňuje porovnávat v „řetězci“ ({{Cizojazyčně|en|chain}}), což znamená že sekvence porovnávání jako např. následující jsou dovoleny:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
if C(20) &amp;lt;= $teplota &amp;lt;= C(25) { say &amp;quot;Pokojová teplota!&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tento výraz je zpracován jako kdyby každé porovnání postupně zleva doprava bylo provedeno zvlášť a výsledek byl logicky spojen pomocí operace &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Líné vyhodnocování ===&lt;br /&gt;
Perl 6 používá techniku [[líné vyhodnocování|líného vyhodnocování]] seznamů, která je součástí [[funkcionální programování|funkcionálních programovacích jazyků]] mezi které patří např. [[Haskell]]:&amp;lt;ref name=&amp;quot;syn9&amp;quot;&amp;gt;{{Citace elektronické monografie | url=http://dev.perl.org/perl6/doc/design/syn/S09.html | titul=Synopsis 9: Data Structures | autor=Wall, Larry | datum=2004-09-13 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
@cela_cisla = 0..Inf; # celá čísla od 0 do nekonečna ({{Cizojazyčně|en|infinity}})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vyše uvedený kód je validní, tj. nepokouší se přiřadit seznam nekonečné délky do pole &amp;lt;code&amp;gt;@cela_cisla&amp;lt;/code&amp;gt; ani nezůstene navždy „viset“ ({{Cizojazyčně|en|hang indefinitely}}) při pokusu rozšířit seznam pokud prohledáváme omezený počet jeho položek ({{Cizojazyčně|en|slots}}).&lt;br /&gt;
&lt;br /&gt;
Tento přístup zjednodušuje mnoho částí Perlu 6, např. vstupně/výstupní operace, transformace seznamů a předávání parametrů.&lt;br /&gt;
&lt;br /&gt;
=== Junctions (Propojky) ===&lt;br /&gt;
&lt;br /&gt;
Perl 6 představuje koncept ''junctions'': hodnot, které jsou složeny z jiných hodnot.&amp;lt;ref name=&amp;quot;syn9&amp;quot;/&amp;gt; Na začástku návrhu Perlu 6 se jim říkalo „superpozice“  ({{Cizojazyčně|en|superpositions}}), analogicky ke konceptu kvantové superpozice z kvantové fyziky, kde se vlny mohou najednou vyskytovat ve více stavech dokud je pozorovatel „nezhroutí“. Perl 5 modul &amp;lt;code&amp;gt;Quantum::Superpositions&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;{{Citace elektronické monografie | url=http://search.cpan.org/dist/Quantum-Superpositions/lib/Quantum/Superpositions.pm | titul=Quantum::Superpositions - QM-like superpositions in Perl | autor=[[Damian Conway|Conway, Damian]] | rok=2002 }}&amp;lt;/ref&amp;gt; vydaný Damianem Conwayed v roce [[2000]] poskytl první návrh ({{Cizojazyčně|en|proof of concept}}). Na začátku vypadaly superpoziční ({{Cizojazyčně|en|superpositional}}) hodnoty jako programátorská kuriozita, v průběhu času byla jejich užitečnost a intuitivnost široko rozpoznána a junctions nyní patří k hlavním částem návrhu Perlu 6.&lt;br /&gt;
&lt;br /&gt;
V nejjednodužším případě jsou propojky (junctions) spojením množiny hodnot pomocí propojovacího (junctive) operátoru:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
 my $jakákoliv_sudá_číslice = 0|2|4|6|8; # any(0, 2, 4, 6, 8)&lt;br /&gt;
 my $všechny_liché_číslice = 1&amp;amp;3&amp;amp;5&amp;amp;7&amp;amp;9; # all(1, 3, 5, 7, 9)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; označuje hodnotu, která je rovna buď jeho levému ''nebo'' pravému argument. &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt; označuje hodnotu, který je rovna jeho levému ''a'' zároveň i  pravému argumentu. Tyto hodnoty mohou být použity kdekoliv v kódu jako normální hodnoty. Operace vykonané na propojce ({{Cizojazyčně|en|junction}}) se chovají ke všem prvkům propojky stejně a jsou uspořádany podle operátoru propojky. Proto vysledkem &amp;lt;code&amp;gt;(&amp;quot;ananas&amp;quot;|&amp;quot;banán&amp;quot;) ~ &amp;quot;y&amp;quot;&amp;lt;/code&amp;gt; je &amp;lt;code&amp;gt;&amp;quot;ananasy&amp;quot;|&amp;quot;banány&amp;quot;&amp;lt;/code&amp;gt;. Při porovnávání propojka vrací jeden výsledek, true (pravda) nebo false (lež). &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; nebo &amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt; propojka vrací true, pokud je porovnání pravdivé pro alespoň jeden prvek propojky. &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt; nebo &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; projka vrací true, pokud je porovnání pravdivé pro všechny prvky propojky.&lt;br /&gt;
&lt;br /&gt;
Propojky mohou být také použity pro rozšíření typového systému na způsob [[generické programování|generického programování]], které je omezený propojkami typů:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub get_tint ( RGB_Color|CMYK_Color $color, num $opacity) { ... }&lt;br /&gt;
sub store_record (Record&amp;amp;Storable $rec) { ... }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Autothreading====&lt;br /&gt;
Junctions (propojky) jsou neseřazené; &amp;lt;code&amp;gt;1|2|3&amp;lt;/code&amp;gt; a &amp;lt;code&amp;gt;3|2|1&amp;lt;/code&amp;gt; představují stejnou hodnotu. Díky tomu může kompilátor Perlu 6 zvolit ''paralelní'' zpracování výrazu s propojkou. Např. kód:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
for all(@pole) { ... }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
naznačuje kompilátoru, že &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; smyčka by měla být spuštěna paralelně, třeba v oddělených vláknech ({{Cizojazyčně|en|threads}}). Tato vlastnost je nazývána „autothreading“ (automatické spouštění ve vláknech). Použití a implementace není zatím zcela dokončena a je otázkou pro diskuse vývojářů.&amp;lt;ref&amp;gt;{{Citace elektronické monografie | url=http://groups.google.com/group/perl.perl6.language/browse_frm/thread/868ab2f20deb00d8/9e7da05315e91e13?tvc=1#9e7da05315e91e13 | titul=Junction Values | autor=Adams, Rod | datum vydání=[[2005-02-15]] }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hello world ==&lt;br /&gt;
Program ''hello world'' je často používán k demonstraci základního použití jazyka. V Perlu 6 může být napsán takto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
say &amp;quot;Hello world&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funkce &amp;lt;code&amp;gt;say&amp;lt;/code&amp;gt;, která je v Perlu 6 nová, tiskne své parametru (podobně jako funkce &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt;), ale se znakem nového řádku na konci.&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
== Externí odkazy ==&lt;br /&gt;
===Specifikace===&lt;br /&gt;
* [http://dev.perl.org/perl6/doc/synopsis.html Synopses] - dokumenty považované za oficiální, ale vyvíjející se, specifikaci jazyka.&lt;br /&gt;
* [http://dev.perl.org/perl6/doc/exegesis.html Exegeses] - Vysvětlění Apocalypse s příklady&lt;br /&gt;
* [http://dev.perl.org/perl6/doc/apocalypse.html Apocalypses] - První návrhy Larry Walla&lt;br /&gt;
* [http://dev.perl.org/perl6/rfc RFCs] - Orginální žádosti komunity o úpravy jazyka&lt;br /&gt;
* [http://feather.perl6.nl/syn/ Perl 6 Dokumentace] s částmi testů jazyka&lt;br /&gt;
&lt;br /&gt;
===Implementace===&lt;br /&gt;
* [http://dev.perl.org/perl6/ Oficiální stránky okolo vývoje jazyka]&lt;br /&gt;
* [http://www.pugscode.org/ Pugs] - Implementace jazyka v [[Haskell]]u s mnoha [http://svn.perl.org/perl6/pugs/trunk/examples/  příklady] a [http://svn.perl.org/perl6/pugs/trunk/t/ testy].&lt;br /&gt;
* [http://www.parrotcode.org/ parrotcode] - Oficiální stránky virtuálního stroje [[Parrot]]&lt;br /&gt;
&lt;br /&gt;
===Ostatní===&lt;br /&gt;
* [http://perl6.cz perl6.cz] - Web pro české uživatele s [http://perl6.cz/wiki/Perl_6_and_Parrot_links unikátním seznamem odkazů]&lt;br /&gt;
* [http://planetsix.perl.org/ Planet Perl 6] - Agregátor Perl 6 blogů.&lt;br /&gt;
* [http://wiki.osdc.org.il/index.php/Larry_Wall_-_Present_Continuous%2C_Future_Perfect Present Continuous, Future Perfect] - Přednáška Larry Wall o Perlu 5 and Perlu 6 na Open Source Developer Conference 2006 v [[Netanya]], Israel (HTML s odkazem na slidy a audio nahrávku)&lt;br /&gt;
* [http://www.programmersheaven.com/2/Perl6-FAQ Perl 6 FAQ] - Otázky a odpovědi na nejrůznější otázky.&lt;br /&gt;
* [http://www.programmersheaven.com/2/Perl6-QuickStart Perl 6 Quick-Start] - Krok za krokem jak napsat svůj první Perl 6 program a jak jej spustit&lt;br /&gt;
* [http://perlcabal.org/syn/Differences.html Perl6::Perl5::Differences]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Článek z Wikipedie}}&lt;br /&gt;
[[Kategorie:Počítačové jazyky]]&lt;br /&gt;
[[Kategorie:Svobodný software]]&lt;/div&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	</feed>