abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 14:55 | IT novinky

    Před 70 lety, 7. června 1954, ve věku 41 let, zemřel Alan Turing, britský matematik, logik, kryptoanalytik a zakladatel moderní informatiky.

    Ladislav Hagara | Komentářů: 8
    včera 11:44 | Zajímavý software

    NiceGUI umožňuje používat webový prohlížeč jako frontend pro kód v Pythonu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 1
    včera 10:55 | Nová verze

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána ve verzi 2024.6. Z novinek lze vypíchnout lepší integraci LLM (OpenAI, Google AI, Ollama) nebo podporu Matter 1.3.

    Ladislav Hagara | Komentářů: 0
    6.6. 20:55 | IT novinky

    IKEA ve Spojeném království hledá zaměstnance do své nové pobočky. Do pobočky v počítačové hře Roblox. Nástupní mzda je 13,15 liber na hodinu.

    Ladislav Hagara | Komentářů: 0
    6.6. 10:44 | Zajímavý článek

    Alyssa Rosenzweig se v příspěvku na svém blogu Vulkan 1.3 na M1 za 1 měsíc rozepsala o novém Vulkan 1.3 ovladači Honeykrisp pro Apple M1 splňujícím specifikaci Khronosu. Vychází z ovladače NVK pro GPU od Nvidie. V plánu je dále rozchodit DXVK a vkd3d-proton a tím pádem Direct3D, aby na Apple M1 s Asahi Linuxem běžely hry pro Microsoft Windows.

    Ladislav Hagara | Komentářů: 34
    6.6. 01:00 | Nová verze

    Byla vydána (𝕏) květnová aktualizace aneb nová verze 1.90 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.90 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    6.6. 00:44 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová verze 2024.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    5.6. 16:44 | IT novinky

    Počítačová hra Tetris slaví 40 let. Alexej Pažitnov dokončil první hratelnou verzi 6. června 1984. Mezitím vznikla celá řada variant. Například Peklo nebo Nebe. Loni měl premiéru film Tetris.

    Ladislav Hagara | Komentářů: 10
    5.6. 10:44 | Nová verze

    MicroPython (Wikipedie), tj. implementace Pythonu 3 optimalizovaná pro jednočipové počítače, byl vydán ve verzi 1.23.0. V přehledu novinek je vypíchnuta podpora dynamických USB zařízení nebo nové moduly openamp, tls a vfs.

    Ladislav Hagara | Komentářů: 0
    5.6. 10:22 | Nová verze

    Canonical vydal Ubuntu Core 24. Představení na YouTube. Nová verze Ubuntu Core vychází z Ubuntu 24.04 LTS a podporována bude 12 let. Ubuntu Core je určeno pro IoT (internet věcí) a vestavěné systémy.

    Ladislav Hagara | Komentářů: 2
    Rozcestník

    Naučte mě Perl 6, II. Kontext

    9.4.2016 22:08 | Přečteno: 1653× | Perl | Výběrový blog | poslední úprava: 10.4.2016 11:00

    V dnešní blogu o Perlu 6 se budu zabývat kontextem, ukáži jak ho vynutit, zmást a možné využití.

    II. Kontext

    Perl na základě toho, co je po něm vyžadováno, dokáže hodnotu předat v požadovaném kontextu. Tedy např. máme řetězec s číslem my $a = '121' tak na něj lze použít číselný operátor a naopak číslo můžeme přímo vypsat jako řetězec say $a + $a.

    Kontext a jeho příklady v Perlu 6

    V Perlu 6 máme mnoho typů kontextu. Vynutit je můžeme jednak pomocí speciálních metod, podprogramů, operátorů ( pamatujete na I. kapitolu ), nebo si je vynucují některé podprogramy.

    Ukažme si pár příkladů
    my @a = ( 1, 2, 5, );
    dd @a.Str;       #"1 2 5"
    dd @a.Numeric;   #3 -- počet prvků
    dd @a.so;        #Bool::True
    dd @a.gist;      #"[1 2 5]"
    dd @a.perl;      #"[1, 2, 5]"
    
    my Str $a = '234';
    dd $a.list;      #("234",)
    dd $a.Numeric;   #234
    dd $a.so;        #Bool::True
    dd $a.gist;      #"234"
    dd $a.perl;      #"\"234\""
    
    my Rat $r = 22/7;
    dd $r.Str;       #"3.142857"
    dd $r.perl;      #"<22/7>"
    
    say ( '', 0 )>>.so, ().so; #(False False)False
    say @a + $a;               #237
    say @a ~ $r;               #1 2 53.142857
    
    Zastavil bych se u .gist, který by měl reprezentovat řetězec v dobře čitelné formě pro lidi, a idea .perl by měl být v řetězci Perl kódu, pomocí kterého přes EVAL dostaneme původní hodnotu.

    Vynucujeme kontext

    Pojďme si napsat podprogram, který bude vynucovat parametry v celých číslech. Mějme definici operátoru na celých číslech
    sub infix:<⊕> ( Int $a, Int $b ) {
        $a + $b + 1;
    }
    
    Tento operátor vrátí požadovanou hodnotu, pokud oba parametry budou typu Int a jinak vyhodí chybu. Tedy můžeme použít 12 ⊕ 10, ale už ne '12' ⊕ 23/12. Perl 6 ale umí snadno řetězec '12' i racionální číslo 23/12 interpretovat jako Int. Náprava je snadná
    multi sub infix:<⊕> ( Int $a, Int $b ) {
        $a + $b + 1;
    }
    
    multi sub infix:<⊕> ( Any $a, Any $b ) {
        $a.Int ⊕ $b.Int
    }
    
    (Použili jsme další mocnou zbraň Perlu 6 a to multi pro definici podprogramů.)

    Mateme kontext

    V této části ukážeme jak ovlivnit hodnoty pro jednotlivé kontexty. Pokud chceme definovat všechny kontexty podle sebe v Perlu 6 to můžeme snadno udělat pomocí (anonymní) třídy.
    my $c = class {
        method Numeric { 42 };
        method gist    { 'čtyřicetdva' };
        method Str     { sprintf " %.2f ", self.Numeric };
    };        
    
    say $c;             #čtyřicetdva
    say $c + 12;        #54
    say $c ~ 'CZK';     # 42.00 CZK
    
    Pokud bude chtít pouze pozměnit některý kontext můžeme to udělat pomocí but.
    role length {
        method Numeric {
            self.chars
        }
    }
    
    my $s = 'ahoj' but length;
    say +$s;                       #4
     
    my $m = '123';
    say +$m;                       #123
    
    my $n = '123' but length;
    say +$n;                       #3
    
    my @p := [];
    say ?@p;                       #False
    
    my @q := [] but True;
    say ?@q;                       #True
    
    #pro zajímavost, berte prosím s rezervou, jednak je to šílenost a závisí to na implementaci
    my $o = 123 but length;
    say +$o;                       #3                
    say 0 + $o, -$o;               #123-123
    

    Využití

    Nyní zkusme kontext využít při definici vlastní třídy. Zavedeme třídu graph, pomocí které budeme reprezentovat orientované grafy. (Třídu budu vypisovat po částech a nakonec uvedu kompletní definici třídy i s příklady a výstupem.)

    Třída bude mít 2 atributy uzly a hrany,
    class graph {
        has @.vertices;
        has @.edges;
    
    kde uzly budou bude pole názvů, např. 1, 2, 3 a hrany bude pole párů např. 1 => 2, 3 => 1,. Definice pak bude vypadat, např. pro kompletní orientovaný graf na pěti uzlech, takto
    my graph $k5 .= new: :vertices(^5), :edges( ^5 X=> ^5 );
    
    Všimněte si jak se lze v Perlu 6, pomocí .= vyhnout opakovanému napsání názvu třídy. Operátor X je cross operátor, něco jako kartézský součin.

    Dále definujme metodu gist, pro lidsky vřelý řetězec. Vypíše 10 náhodných hran.
    method gist {
        my @ge = @!edges.map({ .key ~ '→' ~ .value });
        join ', ', @ge.elems <= 10 ?? @ge !! ( @ge.pick(10), '…' ); 
    };
    
    Místo @ge.elems <= 10 by jsme mohli napsat i @ge <= 10, pamatujete na numerický kontext pole.

    Nyní můžeme použít na objekt naši třídy say
      say $k5;
      #2→3, 0→0, 0→3, 4→4, 4→2, 3→4, 2→4, 1→3, 0→4, 4→0, …
    
    A také definujme metody Str pro operace s řetězci a metodu perl pro replikaci třídy pomocí Perlu 6.

    Celý příklad
    class graph {
        has @.vertices;
        has @.edges;
    
        method gist {
            my @ge = @!edges.map({ .key ~ '→' ~ .value });
            join ', ', @ge.elems <= 10 ?? @ge !! ( @ge.pick(10), '…' ); 
        };
    
        method Str {
            join "\n", 'Vertices:', @!vertices.Str, 'Edges:', @!edges.join( "\n" );
        };
    
        method perl {
            [~] 'graph.new( ',  :vertices( |@!vertices ).perl, ', ', :edges( |@!edges ).perl, ' )';
        };
                       
    };
    
    my graph $k5 .= new: :vertices(^5), :edges( ^5 X=> ^5 );
    say 'gist:';
    say $k5;
    say 'Str:';
    put $k5;
    say 'perl:';
    say $k5.perl;
    
    say 'Ověření perl:';
    use MONKEY-SEE-NO-EVAL;
    say EVAL( $k5.perl );
    
    Výstup:
    gist:
    2→4, 2→3, 2→1, 3→1, 0→4, 1→4, 4→4, 0→3, 3→0, 0→0, …
    Str:
    Vertices:
    0 1 2 3 4
    Edges:
    0	0
    0	1
    0	2
    0	3
    0	4
    1	0
    1	1
    1	2
    1	3
    1	4
    2	0
    2	1
    2	2
    2	3
    2	4
    3	0
    3	1
    3	2
    3	3
    3	4
    4	0
    4	1
    4	2
    4	3
    4	4
    perl:
    graph.new( :vertices(slip(0, 1, 2, 3, 4)), :edges(slip(0 => 0, 0 => 1, 0 => 2, 0 => 3, 0 => 4, 1 => 0, 1 => 1, 1 => 2, 1 => 3, 1 => 4, 2 => 0, 2 => 1, 2 => 2, 2 => 3, 2 => 4, 3 => 0, 3 => 1, 3 => 2, 3 => 3, 3 => 4, 4 => 0, 4 => 1, 4 => 2, 4 => 3, 4 => 4)) )
    Ověření perl:
    0→1, 0→0, 0→2, 1→2, 3→2, 3→4, 0→3, 0→4, 2→0, 4→4, …
    

    Závěr

    Princip kontextu je z mého pohledu jakýmsi doplňkem polymorfismu, kde místo aby se operace přizpůsobovala hodnotám, tak hodnoty se přizpůsobují operaci. Jak je to v jiných jazycích s tímto principem? Napadá vás nějaký pěkný příklad jak tento princip využít?        

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    9.4.2016 23:40 Yenda
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    To je moc dobře, že jde předefinovat operátor plus včetně, jak doufám, jeho priority. Je moc dobře, že jdou používat japonský znaky jako operátory, ještě bych zavedl bílé unicode znaky jako funkce a výpis integeru určitě půjde nastavit tak, aby se zobrazoval v římských cislovkach. Když blázinec, tak poradnej, včetně alegorickych vozu, tisíce slonů, baletkama, transsexualnima kurvama s fetisem pro chciply lososy a hektolitry kvalitního šumivé ho vína z Polska.

    Je fakt, že perverse přitahuje publicitu, ale udělat z jazyka levnou zmalovanou stetku z omicronu perseiy 3 s různým přízvukem a elektronickou vagíny s Bluetooth jen because we can cancan mi prijde docela kentus.
    wamba avatar 10.4.2016 00:27 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Operátor plus tam nikde není předefinován. Nicméně tam dělám ještě hloupější věc měním číslu numerický kontext. Ona je otázka, jestli nějakou věc pro dobro programátorů zakázat (v tomhle Perl nikdy nevynikal), nebo to umožnit a říci jim, že to nemají používat, popř. je nechat (někdy i bolestivou cestou), aby na to přišli. Může se stát, že ta zakázaná věc bude v nějakých situacích užitečná a pak se bude vymýšlet obezlička na obezličku.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    10.4.2016 01:16 Yenda
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Operátor plus byl tuším predefinovan minule, ne? Nebo by alespoň určitě předefinovat šel, ne? Nenech se mýlit, nic proti tobě, oceňuji ten seriál a tvoje úsilí, které tomu venujes. Už se těším na to, co bude příště. Jen nechápu smysl existence takového jazyka (kromě toho, že je to bezva technologická masturbace).

    Btw, těším se na díl o unicode - někdo to v souvislosti s perle 6 zmiňoval minule. Například by mne zajímalo, jak se v unicode v perlu řeší uppercase/lowercase. Například v turectine upper('i') není I. A nebo \w v regularnich vyrazech? A podobných problémů je víc. Je hezké, kdyz jazyk umožňuje uživatelům nejenom ustrelit si hlavu, ještě je to prezentováno jako hlavní selling point, ale takových jazyků je spousta. Jazyky, které by uživateli naopak pomohl dělat věci správně jsou poslední dobou jaksi nedostatkove zboží. Zpracovavam texty v cca 20 jazykach (různý znakový sady od cantonese po amhari) a nakonec spoustu věcí dělám ručně (přes filtry v icu) a zatím jsem bohužel nenašel žádný prostředek jak tohle zvládnout efektivněji.
    10.4.2016 07:31 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Ty nechapes k cemu muze byt dobre pretizeni operatoru + ?

    To nejsi programator, ze?

    wamba avatar 10.4.2016 09:53 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Předpokládám, že nenarážel na to když + použijeme jako operátor pro vlastní objekty. To jde v Perlu 6 snadno
    multi sub infix:<+> ( graph $a, graph $b ) {
       $a.gist~ "\n" ~ $b.gist; 
    }
    say $k5 + $k5;
    
    ale na to, když bychom chtěli předefinovat +, např. na Int, to mě Perl 6 vyhodil chybu s tím, že jsem příliš abiciózní.

    Na Rat to kupodivu prošlo
    multi sub infix:<+> ( Rat $a, Rat $b ) {
        $a * $b
    }
    
    my Rat $a = 1/1;
    my Rat $b = 2/1;
    say $a + $b + 5;               #7
    
    ale není těžké přijít na to, že to není dobrý nápad. Mimochodem původně jsem tam na místo $a * $b měl $a + $b + 1 a úspěšně jsem se dostal do nekonečné rekurze. Ten výsledek $a + $b + 5, který je 7, může být pro leckoho také překvapivý.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    wamba avatar 10.4.2016 10:24 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    K operátoru + se vyjadřuji níže. Děkuji za ocenění. Já jsem zase rád, že někoho moje blogy potěšili.

    Co se týká unicode, tak jsem zatím neplánoval udělat o něm díl. Nějak hlouběji jsem do toho zatím nepronikal. Samozřejmě jsem občas na to narazil např. prezentace Normal from grapheme. Za mě je zatím přínos o proti Perlu 5 to, že se vyhnu encode a decode. Na to, že bych se na některé věci s unicode (nejen v Perlu) neměl spoléhat, jsem se dozvěděl v diskuzi pod minulým článkem.

    Co se týče smyslu Perlu 6, tak bych zkrátka řekl, že tvůrci a komunita (nebo alespoň část) Perlu, měla pocit, že je potřeba nový jazyk. Otázka je co znamená "pomoci dělat věci správně", jestli to znamená umožnit snadno dělat tyto věci, i třeba přesto, že půjdou snadno děla i věci špatně, nebo nějakým způsobem je vynucovat. Pro mě Perl 6 není jeden z mnoha.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    10.4.2016 11:17 Vilda
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    tak bych zkrátka řekl, že tvůrci a komunita (nebo alespoň část) Perlu, měla pocit, že je potřeba nový jazyk.
    Byl to Tim O’Reilly, ktery potreboval dalsi knihy o Perlu (nejlepe novou verzi) a Larry Wall mu to slibil. Jenom se nejak nedohodli, jak dlouho to bude trvat.
    11.4.2016 13:26 Martin Mareš
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Tohle nejsou ani tak problémy podpory Unicode, jako spíš podpory pro locales. Návrh Perlu6 počítá s tím, že půjde zapnout (lexikálně lokálně) zpracování regexů a pár dalších věcí v kontextu daného locale. Nakolik to už je implementované, to nevím.

    Každopádně má P6 dostatečné prostředky na to, abyste si chování pro konkrétní jazyk podle potřeby (do|pře)definoval.
    11.4.2016 13:15 Martin Mareš
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    To, že něco v daném jazyku lze, ještě přeci neznamená, že je to rozumné používat na doraz. Třeba Céčkový preprocesor je turingovsky úplný a mohu v něm spočítat cokoliv, co v Céčku samotném, ale přesto mám (většinou) dost soudnosti na to, abych to neudělal.

    Naopak si myslím, že je dobře, když je jazyk rozšiřitelný v maximálním možném rozsahu, místo aby někdo vytyčoval nějakou umělou (a většinou dost křivolakou) hranici toho, co se ještě smí. Perl 6 je z většiny nadefinovaný sám v sobě, takže je naprosto přirozené, že se dá předefinovat cokoliv. Nějak to omezovat by bylo ošklivé a dříve či později nepraktické.

    Pokud mezi vaše oblíbené noční můry patří, že vám někdo za bezměsíčné noci potají předefinuje plus, můžete si samozřejmě napsat jednoduchý modul, který to explicitně zakáže. Jazyk vám k tomu dává dostatek prostředků :)

    Mimochodem, předefinovat plus nějakému standardnímu číselnému typu může být dokonce užitečné -- představte si, že chcete u floatů analyzovat zakrouhlovací chyby. Jeden z hezkých způsobů, jak to zařídit, je během ladění programu předefinovat floatům všechny operace tak, aby udržovaly statistiky o zaokrouhlování. Ještě elegentnější samozřejmě je vyměnit standardní floatový typ za nějaký odvozený s patřičným ladicím kódem.
    13.4.2016 03:28 Emil Zátopek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    „Pokud mezi vaše oblíbené noční můry patří, že vám někdo za bezměsíčné noci potají předefinuje plus, můžete si samozřejmě napsat jednoduchý modul, který to explicitně zakáže.“

    Jdu programovat modul do perlu, který explicitně zakáže někomu zakázat předefinování plusu. :-) Všechny ostatní prosím, aby mi mou práci nenarušovali psaním modulu, který by v perlu zakázal zakázání zákazu předefinování plusu.

    „Mimochodem, předefinovat plus nějakému standardnímu číselnému typu může být dokonce užitečné -- představte si, že chcete u floatů analyzovat zakrouhlovací chyby. Jeden z hezkých způsobů, jak to zařídit, je během ladění programu předefinovat floatům všechny operace tak, aby udržovaly statistiky o zaokrouhlování.“

    Jestli ony ty zaokrouhlovací chyby nevznikají u naprosto všech operací. Proč tedy nevyměnit všech 3685 předefinovaných operátorů v perlu.

    10.4.2016 08:19 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Ten XOR symbol :-D.
    wamba avatar 10.4.2016 10:35 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Teď si nejsem jist, na co narážíte, zda na něco v blogu (nejsem si vědom, že by tam xor byl někde použit). Nebo na něco přímo z dokumentace. Možná že se jedná o X=>, nebo ?? !!. Budu rád, když to upřesníte, abych případně mohl reagovat.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    10.4.2016 10:40 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    plus v kruhu se casto pouziva jako xor :-)
    wamba avatar 10.4.2016 11:02 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Děkuji za vysvětlení, já jsem byl zvyklý používat jako binární operaci v různých strukturách a netušil jsem, že si to někdo bude automaticky spojovat s xor. Tak pokud je to matoucí, tak se omlouvám. Kdyby to bylo příliš matoucí tak to můžu v blogu změnit, popř. na to upozornit, ale to já nedokáži posoudit. Nahradil jsem
    definici operátoru na celých číslech
    za
    definici operátoru ⊕ na celých číslech
    tak snad už to bude jasnější.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    ⧠ A = 0 avatar 11.4.2016 10:09 ⧠ A = 0 | skóre: 10 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Jak moc je omezená množina znaků, které lze použít jako operátory? A co identifikátory?
    Nevolte zmrdy.
    ⧠ A = 0 avatar 11.4.2016 10:12 ⧠ A = 0 | skóre: 10 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    (Mně by však ke spokojenosti bohatě stačilo, kdyby třeba gcc začal respektovat standardní C.)
    Nevolte zmrdy.
    12.4.2016 00:35 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Co chybí oproti -std=iso9899:2011 ?
    ⧠ A = 0 avatar 12.4.2016 00:56 ⧠ A = 0 | skóre: 10 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Dodatek D. Ale nedal bych ruku do ohně za to, že to nejde ani v aktuální versi (teď si to zrovna nemám kde vyzkoušet).
    Nevolte zmrdy.
    12.4.2016 01:58 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Aha, ale zase unicode znaky v céčku (a časem asi i v kernelu), no nevím nevím. To by se ladilo dost špatně.
    ⧠ A = 0 avatar 12.4.2016 02:20 ⧠ A = 0 | skóre: 10 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    To mi připadá jako jen nějaký technokonservativní pathos. Proč by to mělo záporný vliv na ladění (pominu-li extrémní příklady jako záměrně obfuskovaný kód používáním podobně vypadajících znaků z různých abeced)? Příznivci javistické ukecanosti se mnou možná souhlasit nebudou, ale v mnoha případech to naopak značně zlepšuje čitelnost. Kdo viděl typický fortranovský kód (a zároveň nepatří do oné sekty), asi pochopí.
    Nevolte zmrdy.
    12.4.2016 05:48 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Kernel patche jsou checkovaný perlem ;-).

    A třeba čínsky bych se moc učit nechtěl :-D.
    wamba avatar 11.4.2016 12:18 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    U identifikátorů (pravděpodobně se to týká i názvů mehtod a podprogramů) se mi to podařilo najít v Synopsi 15. Co je co jsem našel v Programming with Unicode. Zkráceně: alfanumerické znaky a ',-,_ (ne samostatně) a nějaký druh mezer (ne na začátku).

    Pro operátory taková omezení neplatí, přesně se mi to nepodařilo najít.

    Raději pro představu ukáži pár příkladů co funguje
     
    sub postfix:<γ> ($ ) {
        say "hi"
    };
    
    my $απ='aa';
    ($απ)γ;       
    'aa'γ;
    my \δ = 21;
    say δ;
    
    sub infix:<.⊕.> ( $α, $β ) {
        $α + $β;
    };
    
    my $ĥoroj=12;
    my $ℵ=10;
    say $ĥoroj.⊕.$ℵ;
    
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    ⧠ A = 0 avatar 11.4.2016 13:30 ⧠ A = 0 | skóre: 10 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Dík za odkazy. Čili pro identifikátory nelze použít kombinační znaky, takže ta sada je omezenější než v pythonu3.
    my $ℏ = 1.054571800e-34; # Funguje, jak má
    say $ℏ;
    
    my $μ̂ = 'zdar'; # Ostuda – nefunguje. Perl sucks, python rulez.
    say $μ̂ ;
    
    Nevolte zmrdy.
    wamba avatar 11.4.2016 14:34 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    tak ono to nebude tak horké :) pokud to bude standardní spojení tak to lze, jinak lze použít term operátor, nebo konstantu
    my $ĉ=2;
    my &term:<μ̂> = { 'ahoj' };
    constant aμ̂ = 'ahoj';
    say $ĉ;
    say μ̂;
    say aμ̂;
    
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    ⧠ A = 0 avatar 11.4.2016 17:24 ⧠ A = 0 | skóre: 10 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Kdybych potřeboval jen standardní spojení, mohu se vykašlat na nějaké kombinační znaky a vrazit tam rovnou příslušný jeden unikódový znak. Ale když mám ve vzorečku μ se stříškou (tak se často značí jednotkové vektory), chci mít μ̂ i v kódu, a holt to nejde jinak než s kombinačním znakem.
    Nevolte zmrdy.
    ⧠ A = 0 avatar 11.4.2016 17:25 ⧠ A = 0 | skóre: 10 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Na druhou stranu uznávám, že je krajně nepravděpodobné, že bych kdy použil perl k numerickým výpočtům. :-)
    Nevolte zmrdy.
    wamba avatar 11.4.2016 21:47 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Pro numerické výpočty by mohlo být zajímavé, že Perl 6 počítá (automaticky do určité velikosti) s desetinnými čísly jako s racionálními a ne s plovoucí čárkou.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    wamba avatar 11.4.2016 17:41 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    uznávám v matematice je to celkem běžné a občas se to hodí, ale teď jsem to zkoušel a funguje to i v Perlu 6 (předtím jsem myslel, že si to testoval); tohle funguje:
    my \μ̂ = 12;
    say μ̂; 
    my $μ̂ = 13;
    say $μ̂;
    
    PS. čím ten znak píšeš zkoušel jsem compose i tex mod v emacsu a nepodařilo se :). Šipka nad písmenem se dá vypsat taky?
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    ⧠ A = 0 avatar 11.4.2016 20:34 ⧠ A = 0 | skóre: 10 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Testoval jsem a nešlo mi to. Tvůj příklad mi dává chybu
    ===SORRY!=== Error while compiling test2.pl6
    Term definition requires an initializer
    at test2.pl6:1
    ------> my \μ⏏̂ = 12;
        expecting any of:
            scoped declarator
    
    Ale možná to bude tím, že mám nějakou archaickou versi perlu6 (stabilní debian)
    $ perl6 -v
    This is perl6 version 2014.07 built on parrot 6.6.0 revision 0
    
    Přiznám se, že vzhledem k častotě používání nemám žádný effektivní způsob psaní – většinou si to kopíruji myší z nějakého svého seznamu (na nějž jsem to dostal pomocí kcharselect).
    Nevolte zmrdy.
    wamba avatar 11.4.2016 21:35 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    V mé verzi
    perl6 -v
    This is Rakudo version 2016.03-86-g0e95cde built on MoarVM version 2016.03-84-g4afd7b6
    implementing Perl 6.c.
    
    to funguje.

    Ale moc se v Unicode nevyznám, tak ti neřeknu zda to má jít podle té Sinopse.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    12.4.2016 08:21 Martin Mareš
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Verze Rakuda z roku 2014 ještě moc použitelná není, opravdu doporučuji pořídit si co nejnovější. Speciálně Rakudo nad Parrotem pracovalo s Unicodem dost primitivně, až nad MoarVM to začíná fungovat pěkně. (AFAIK – vývoj P6 spíš z dálky sleduji, než bych se aktivně zapojoval. Proč jen má den pouhých 24 hodin? :) )
    12.4.2016 00:41 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, II. Kontext
    Kruci a já se těšil na Zalgo kódy :-D.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.