Raku

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 19. tammikuuta 2021 tarkistetusta versiosta . tarkastukset vaativat 297 muokkausta .
Raku (entinen Perl 6)
Kieliluokka Moniparadigma
Esiintyi Kehitystä on tehty vuodesta 2000 lähtien. Ensimmäinen julkaisu tapahtui 25. joulukuuta 2015
Tekijä Larry Wall
Kehittäjä Larry Wall ja Audrey Tan
Tiedostotunniste _ .raku, .rakumod, .rakudoc, .rakutesttai.t
Vapauta 6.d (24. helmikuuta 2020 ) ( 2020-02-24 )
Tyyppijärjestelmä dynaaminen, staattinen
Vaikutettu

haskell ,

JavaScript , Perl , Ruby , Smalltalk , J
vaikutti Perl , Haskell , AntLang
Lisenssi GNU General Public License , Artistic License
Verkkosivusto raku.org
OS cross-platform

Raku (  japanista 楽土pron. rakudo  - Paradise , [1] [2] ja , pron. raku -  onnellisuus, helppous, sukha [3] [4] ) on ohjelmointikieli Perlin kaltaisten kielten perheestä . Perl-kielen suunnittelun ja toteutuksen perusteellinen uudistus, joka katkaisi yhteensopivuuden sen kanssa, vaikka yhteensopivuustilan pitikin olla olemassa vuoteen 2010 asti. [5]

Kuten Perl-kieli, Raku jättää paljon vapautta ohjelmoijille . Sen avulla voit silti ilmaista itseäsi ytimekkäästi, mukaan lukien yhden rivin kirjoittaminen, mutta se myös yksinkertaistaa suurten ohjelmien kirjoittamista staattisen kirjoittamisen ja parannetun OOP -tuen ansiosta .

Rakun entinen nimi oli Perl 6. [6] Perl-yhteisössä on vitsailtu julkaisupäivämäärästä useiden vuosien ajan. Kun kysyttiin "milloin Perl 6 julkaistaan", tavallinen vastaus oli "joululla", mutta ilman vuotta. [7] [8] Vuonna 2015, eli viidentoista vuoden odotuksen jälkeen, niin kutsuttu "joulu" -versio julkistettiin vihdoin. [9] [10] [11]

Historia

Perl 6:ssa päätimme, että on parempi korjata kieli kuin korjata käyttäjä.Larry Wall [12]

Larry Wall ilmoitti ensimmäisen kerran Perl 6:n kehityksestä 19. heinäkuuta 2000, saman vuoden Perl-konferenssin neljäntenä päivänä [ 13] State of the Onion -puheessaan . [14] Tuolloin prioriteetit olivat: "historiallisten syylien" poistaminen kielestä; "yksinkertaisten asioiden tulee pysyä yksinkertaisina, monimutkaisista asioista tulee yksinkertaisia ​​ja mahdottomista monimutkaisiksi"; sisäsuunnittelun ja API :n yleinen puhdistus  . Prosessi alkoi sarjalla RFC :itä . Tämä prosessi oli avoin kaikille osallistujille, eikä mitään kielen osa-aluetta jätetty muuttamista varten. [viisitoista]

Vastaanotettiin 361 pyyntöä, jotka Wall tarkasti. Sitten hän aloitti useiden "Apokalypsien" kirjoittamisen, kristillisen termin, joka tarkoittaa "hyvien uutisten paljastamista hyville ihmisille". [16] Vaikka alkuperäinen tavoite oli kirjoittaa yksi Apocalypse kutakin en:Programming Perl -kirjan lukua kohti , kävi ilmi, että jokaisen Apocalypsen kirjoittamisen aikana myöhemmät muutokset ohittivat aiemmat Apokalypsit. Tästä syystä julkaistiin sarja synopseja, joista jokainen viittaa yhteen maailmanloppuun, mutta sisältää korjauksia uusista Apokalypseista. Nykyään Raku-spesifikaatiota ohjaa "roast"-testisarja [17] , kun taas synopseja pidetään historiallisena viitteenä. [kahdeksantoista]

Siellä on myös Damian Conwayn kirjoittama Exegesis-sarja, joka selittää jokaisen Apokalypsin sisällön käytännön kannalta. Jokainen eksegeesi koostuu koodiesimerkeistä, joissa käsitellään niiden käyttöä ja merkitystä. [19]

Alkuperäiset tavoitteet ja seuraukset

Päätavoitteena, jonka Wall ehdotti alkuperäisessä puheessaan, oli "historiallisten syylien" poistaminen. Näitä olivat sekaannukset  taulukoiden ja tiivisteiden merkinnöissä, funktioiden epäselvyydet select, ongelmat paljaiden [20] (ilman välimerkkejä [21] ) tiedostokuvaajien käytössä. Wall mainitsi puheessaan myös monia muita ongelmia, joista Perl-ohjelmoijat ovat keskustelleet vuosia.

Seurauksena näistä tavoitteista oli taaksepäin yhteensopivuuden menetys. Koska ohjelmistoa parannettaessa viitataan yleensä taaksepäin yhteensopivuuteen, Perl 6:n muutokset, jotka rikkovat sen, olisi pitänyt ilmaista selvästi. Vähitellen ero Perl 5:n ja Perl 6:n välillä kasvoi niin suureksi, että Perl 6 nimettiin uudelleen Rakuksi 12. lokakuuta 2019 . [6]

Rakun kehitysvektori on vuosien varrella muuttunut useaan otteeseen. Pythonin ja Rubyn käsitteiden käyttöönotto oli varhainen vaikutus. [22] [23] [24] Lisäksi Pugs, ensimmäinen Raku-tulkki, on kirjoitettu toiminnallisella kielellä Haskell , ja monet toiminnallisen ohjelmoinnin elementit ovat omaksuneet Rakun kehitystiimin. [25] [26]

Maskotti

Kielen maskotti on Camellia-hyönteis. [27] Sen nimi viittaa perlin kielen tunnukseen, kameliin ("Camel"), ja sen muoto, sanapeliä rakastavan Perl-yhteisön perinteen mukaisesti , toistaa sanaa " bug ". Sen perhosmaisiin siipiin kaiverretut spiraalikuviot muistuttavat "P6"-hahmoja, ja  poikkeava karsastus  on tarkoituksellinen sanapeli "Wall-eyed". [28]

Eloisan ja värikkään logosuunnittelun yksi tavoitteista oli estää naisvihaa yhteisössä ja antaa "maskuliinisia uskomuksia" omaavien näyttää herkän puolensa. [29]

Toteutukset

Rakudo on kehittynein toteutus, [30] mikä ei tee siitä kielen virallista versiota, as kieltä ei määrittele toteutus, vaan testipaketti. [31]

Rakudon avulla voit suorittaa [32] -koodia MoarVM-, JVM- ja Node.js - virtuaalikoneissa . [33] MoarVM on virtuaalikone, joka on rakennettu erityisesti Rakudolle ja NQP-kääntäjälle. [34] [35] NQP-kääntäjä (Not Quite Perl 6  ) toteuttaa  kielen  osajoukon, joka sisältää Raku-säännöt lähdekoodin jäsentämiseen,  abstraktin syntaksipuun käsittelyyn ja taustakohtaisen koodin luomiseen . Suuri osa Rakudosta on kirjoitettu rakulla ja NQP:llä. Rakudo ei ole  itsenäinen kääntäjä, eikä kääntäjää ole tällä hetkellä tarkoitus mainostaa .

Version "2015.02" jälkeen Rakudo lopetti tuen Parrot -virtuaalikoneelle [36] (MoarVM:n edeltäjä), joka perustui virheelliseen oletukseen, että Perl 6 olisi samanlainen kuin Perl 5. [37] [38]

Historialliset toteutukset

Rakun ensimmäinen toteutus oli Pugs [39]  , Haskellilla kirjoitettu  tulkki ja kääntäjä . Se oli edistynein toteutus, mutta vain minimaalisia korjauksia on tehty vuodesta 2007 lähtien GHC :n uusien versioiden pysymiseksi ajan tasalla , ja marraskuusta 2014 lähtien Pugsia ei tueta. [40] Elokuussa 2006 Yichun Zhang jakoi Mopsit-testitiedostot osiin ja liitti niihin asianmukaiset Synapsis-kappaleet, [41] [42] ja tammikuussa 2008 nämä testit integroitiin virallisiin kielen testeihin ("paisti"). ”). [43] [44] Helmikuussa 2015 yhteisö julisti kielikokeet eritelmäksi. [45]

Tärkeimmät erot Perlistä

Raku ja Perl ovat pohjimmiltaan erilaisia, vaikka tarkoitus oli pitää Raku Perlinä. Suurin osa muutoksista on tarkoitettu normalisoimaan kieltä niin, että se on helpompi ymmärtää sekä aloitteleville että kokeneille ohjelmoijille, ja tehdä "yksinkertaisista asioista helpompaa ja monimutkaisemmasta mahdollista".

Tekniset tiedot

Suurin ei-tekninen ero on, että Raku aloitti spesifikaationa. [31] Tämä tarkoittaa, että Raku voidaan ottaa käyttöön tarvittaessa uudelleen, ja myös sitä, että ohjelmoijien ei tarvitse lukea lähdekoodia saadakseen täyden hallinnan sen ominaisuuksiin. Perl-kielen tapauksessa virallinen dokumentaatio kuvaa vain nykyisen tulkin käyttäytymistä. Kaikki dokumentaation ja toteutuksen välillä löydetyt erot voivat johtaa jommankumman muuttamiseen, mikä on Perl-julkaisujen jatkuvan kehittämisen ja parantamisen liikkeellepaneva voima.

Tyyppijärjestelmä

Rakussa dynaamista tyyppijärjestelmää on täydennetty staattisilla tyypeillä . [46] Esimerkiksi:

minun Int $i = 0 ; minun rotan $r = 3,142 ; my Str $s = "Hei, maailma" ;

Staattiset tyypit ovat kuitenkin valinnaisia, joten ohjelmoijat voivat tehdä useimmat asiat määrittelemättä tyyppejä erikseen.

minun $i = "25" + 10 ; #$i on 35

Luettelo aliohjelmien muodollisista parametreista

Perlissä aliohjelmilla ei ole muodollisia parametreja , vaikka parametrien lukumäärän ja tyyppien yksinkertainen tarkistus on mahdollista aliohjelman prototyypeillä. [47] Sen sijaan viittauksella välitetyt todelliset parametrit piilotetaan @_aliohjelman rungon taulukkoelementtien taakse.

Todelliset muodolliset parametrit näkyvät Rakussa. [48] ​​Esimerkiksi:

sub do_something ( Str $thing , Int $other ) { ... }

Aivan kuten Perlissä, Rakussa parametrit välitetään viittauksella, mutta oletuksena Rakussa ne ovat vakioita , ts. niiden arvoja ei voi muuttaa. Ne voidaan nimenomaisesti ilmoittaa sallimaan alkuperäisen arvon muuttaminen ( is rw) tai kopioina ( is copy), mikä vastaa arvon ohittamista.

Tapoja siirtää parametrit

Rakussa on kolme tapaa siirtää parametreja: sijainti, nimetty ja  slurpy .

Paikkaparametrit ovat vain järjestettyä luetteloa, kuten useimmissa ohjelmointikielissä. Jopa ne voidaan välittää mielivaltaisessa järjestyksessä, kunhan heidän nimensä mainitaan. Parametrit, jotka voidaan välittää vain nimellä, on merkitty symbolilla :ennen muodollisen parametrin merkkiä. Parametrien puristaminen on tapa luoda muuttuvia toimintoja Rakussa . Ne on merkitty symbolilla *ennen muodollisen parametrin merkkiä. Slurpy hash kaappaa nimetyt parametrit, joita ei mainita aliohjelman ilmoituksessa, ja slurpy array kaappaa seuraavat todelliset sijaintiparametrit.

Seuraavassa esimerkissä kaikki kolme menetelmää ovat läsnä, mukaan lukien liukas matriisi.

osa jokin funktio ( $a , $b , : $c , : $d , * @e ) { ... } jokin funktio ( 1 , 2 , : d ( 3 ), 4 , 5 , 6 ); # $a=1, $b=2, $d=3, @e=(4,5,6)

Paikkaparametrit vaaditaan oletusarvoisesti, ellei parametrin nimen perässä ole kysymysmerkki. Nimetyt oletusparametrit puolestaan ​​ovat valinnaisia, ellei nimen perässä ole huutomerkki. Squishy-parametrit ovat aina valinnaisia.

Lohkot ja sulkimet

Parametreja voidaan myös välittää mille tahansa koodilohkolle, joka käyttäytyy kuin sulkeminen . Erityisesti esimerkiksi syklien rungot forovat  whilesulkuja. Seuraavassa esimerkissä silmukka ottaa luettelosta kolme elementtiä kerrallaan ja välittää ne lohkoon muuttujina $a, $bja $c. [49]

@list - > $a , $b , $c { ... }

Tätä kutsutaan "pointy sub" tai "pointy block", ja siinä oleva nuoli käyttäytyy jossain määrin kuin avainsana sub, joka tuo nimettömän sulkemisen (tai Perlin terminologiassa anonyymin aliohjelman). [48]

Sigilin invarianssi

Perlissä sigilit (välimerkit, jotka näkyvät ennen muuttujien nimiä) muuttuvat riippuen siitä, kuinka muuttujaa käytetään .

# Perl-koodi my @ array = ('a', 'b', 'c'); minun $elementti = $ array[1]; # palauttaa 'b', my @extract = @array [ 1, 2]; # palauttaa ('b', 'c') minun $elementti = @array [1]; # palauttaa "b" varoituksella (5.10 alkaen)

Rakussa tunnukset ovat muuttumattomia: sekä taulukolla että taulukon elementillä on sama merkki. [46]

# Raku-koodi my @ array = 'a', 'b', 'c'; minun $elementti = @array [1]; # $elementti on kirjoitettu "b" my @extract = @array [ 1]; # @ote on kirjoitettu ('b') my @extract = @array [ 1, 2]; # @ote kirjoitetaan ('b', 'c')

Perlin merkkien vaihtelu on saanut vaikutteita englannin ja monien muiden luonnollisten kielten numerokäytännöistä .

" Se on omena." #$a on totta " Nämä omenat." # @totuus " Tämä on kolmas omena." # $a[3] on totta " Nämä ovat kolmas omena." # @a[3] ei ole oikein

Tämä käsite kuitenkin rikkoutuu, kun viittaukset tulevat peliin, koska ne voivat viitata tietorakenteisiin samalla kun ne ovat skalaareja. Siten sisäkkäisten tietorakenteiden käyttäminen voi edellyttää, että sekä yksikkö että monikko ilmaistaan ​​samalla termillä:

# Perl-koodi: taulukon saaminen hash-elementistä. # Tämä tiiviste tallentaa taulukoita sisältävät tiivisteet. my @trans_verbs = @ { $sanakirja { 'verbi' }{ 'transitiivinen' } };

Tällaisilla rakenteilla ei ole analogeja yleisissä luonnollisissa kielissä, mikä aiheuttaa suurta kognitiivista kuormitusta koodia kirjoitettaessa. Sama Raku-koodi:

# Raku-koodi: taulukon saaminen hash-elementistä. # Tämä tiiviste tallentaa taulukoita sisältävät tiivisteet. my @trans_verbs = %sanakirja<verb><transitive><> ;

Olio-ohjelmointi

Perl-kielessä olio-ohjelmointia tuetaan funktiolla , joka muuttaa minkä tahansa muuttujan tietyn luokan objektiksi, josta luokassa ilmoitetut menetelmätbless tulevat saataville kutsuttavaksi . [viisikymmentä]

Vaikka tämä mekanismi on erittäin tehokas, se tekee samalla vaikeaksi kuvata jopa alkeellisinta OOP:ta - yksinkertaisia ​​rakennemaisia ​​objekteja niihin liittyvine toimenpiteineen. Lisäksi, koska Perl ei tee oletuksia objektimallista, kääntäjä ei voi optimoida metodikutsuja.

Raku säilyttää matalan tason menetelmän bless, mutta tarjoaa myös rajoittavamman objektimallin yleisiin käyttötapauksiin. [51] [52] Esimerkiksi luokka, joka kapseloi pisteen suorakulmaisessa  koordinaatistossa, voidaan määritellä seuraavasti:

luokka Piste on rw { on $.x ; on $.y ; menetelmän etäisyys ( Piste $p ) { sqrt (( $!x - $p . x ) ** 2 + ( $!y - $p . y ) ** 2 ) } menetelmä etäisyys keskustasta { itse . etäisyys: Piste . uusi ( x => 0 , y => 0 ) } } minun $pisteni = Piste . uusi ( x => 1,2 , y => -3,7 ); sano "Pistepaikka: (" , $piste . x , ', ' , $piste . y , ')' ; # Pisteen sijainti: (1,2, -3,7) # Muuta x ja y (käyttäen "x" ja "y" menetelmiä): $point . x = 3 ; $piste . y = 4 ; sano "Pistepaikka: (" , $piste . x , ', ' , $piste . y , ')' ; # Pistepaikka: (3, 4) minun $toinen piste = Piste . uusi ( x => - 5 , y => 10 ); $piste . etäisyys ( $toinen-piste ); #=> 10 $ pistettä . etäisyys keskustasta ; #=> 5

Perlissä menetelmiä kutsutaan nuolella: $object->method(). Raku käyttää pistettä nuolen sijaan kuten monet muut kielet (kuten Java ja Python).

Raku-terminologiassa sitä $.xkutsutaan attribuutiksi. Attribuutin saamiseen käytettyä menetelmää kutsutaan accessoriksi [53]englannin kielestä  access  - access). Se luodaan automaattisesti (kun attribuutti ilmoitetaan pisteellä [54] ) ja sen nimi on sama kuin attribuutilla. Se toimii kuten getteri ja kun luokka tai attribuutti is rwsaa asettajan ominaisuudet ja sitä voidaan käyttää tehtävän vasemmalla puolella. Automaattisten liitäntöjen sijaan ohjelmoija voi määritellä omia mukautettuja menetelmiään. Myös luokan rungossa kaikki attribuutit, riippumatta siitä, miten ne on ilmoitettu, voidaan käyttää suoraan käyttämällä $!.

Periytys, roolit ja luokat

Periytys on tekniikka, jossa objektit tai tyypit käyttävät uudelleen logiikkaa tai määritelmiä muista objekteista tai tyypeistä. Ohjelmoija voi esimerkiksi tehdä vakiotyypin valinnaisella attribuutilla. Kielessä, kuten Java, periytyvät luokat, jotka voivat olla muiden olemassa olevien luokkien alaluokkia.

Raku tarjoaa myös perintöä luokkien kautta, kuten muiden ohjelmointikielien luokkia, sekä roolien kautta.

Rakun roolit ovat Javassa käyttöliittymiä , Rubyssa mixinejä , PHP : ssä  ominaisuuksia [55] ja  Squeakia ( Smalltalk-kielen murre ). Ne ovat samankaltaisia ​​kuin luokat, mutta tarjoavat turvallisemman kokoonpanomekanismin kuin perintö, joka estää attribuuttien ja metodien nimien ristiriidat. [56] [57] Rooleja ei ole rakennettu perintöketjuun. Roolit viittaavat nimellistyyppiseen järjestelmään (katso en:Nominal type system ), eivät rakenteelliseen tyyppijärjestelmään, jota käytetään esimerkiksi  Go :ssa . Ne tarjoavat semanttisia nimiä käyttäytymis- ja tilajoukoille. Olennainen ero roolien ja luokkien välillä on se, että roolit eivät instantoi objekteja. [58]

Vaikka roolit eroavat luokista, on mahdollista kirjoittaa koodia, joka luo roolista objektin. Kun yritetään käyttää roolia objektin luomiseen, luodaan samanniminen luokka. Raku-dokumentaatio kutsuu tätä mekanismia automaattiseksi roolipukuksi. luotu luokka on sanapeli. [59]

Pohjimmiltaan roolit ovat nippuja attribuutteja ja mahdollisesti abstrakteja menetelmiä, jotka voidaan lisätä luokkaan ilman periytymistä. Rooli voidaan lisätä jopa yhteen objektiin. Jälkimmäisessä tapauksessa Raku luo anonyymin alaluokan, lisää siihen roolin ja korvaa objektin luokan tällä anonyymillä alaluokalla.

Esimerkiksi koira  on nisäkäs , koska koirat perivät nisäkkäiltä tiettyjä ominaisuuksia, kuten maitorauhaset ja selkärankaisten esi -isiensä kautta selkärangan . Toisaalta koirilla voi olla erilaisia ​​​​käyttäytymistyyppejä, jotka voivat muuttua ajan myötä. Esimerkiksi koira voi olla kotimainen, kulkukoira, olla opas . Nämä lisäkäyttäytymisjoukot voidaan lisätä koiraan. Voit kuvata niitä siten, että voit soveltaa niitä muihin eläimiin. Esimerkiksi kissa voi olla kotimainen ja kulkuväylä. Koira ja kissa eroavat toisistaan, mutta pysyvät yleisessä nisäkkäiden kategoriassa. Joten, Млекопитающее on luokka Собакаja  Кошка ovat nisäkkäältä perittyjä luokkia. Mutta yllä olevat käytökset ovat rooleja, jotka voidaan lisätä luokkiin tai luokista luotuihin objekteihin.

luokka Nisäkäs on selkärankainen { ... } luokan koira on nisäkäs { ... } rooli lemmikki { ... } rooli koditon { ... } rooliopas { _ ... }

Rooleja lisätään luokkiin ja objekteihin käyttämällä does. Perinnössä käytetään avainsanaa is. Nämä sanat kuvastavat eroa näiden kielen ominaisuuksien merkityksessä: roolin liittäminen antaa luokalle roolin käyttäytymisen , mutta ei tarkoita, että luokasta tulee kirjaimellisesti sama kuin tämä rooli.

luokan opaskoira on opaskoira tekee opaskoiraa { ... } # Alaluokka liittää roolin. minun $koira = Koira . uusi (); $dog tekee opaskoiran ; # Objekti liittää roolin.

Sekä roolit että luokat ovat tyyppejä. Roolia voidaan käyttää muuttujan määrittelyssä. Rooli Незрячийvoi esimerkiksi sisältää tyypin attribuutin Поводырь, joka voi olla opaskoira, opashevonen, opashenkilö tai jopa opasauto.

luokka Ihmisellä { on koira $koira ; # Voi sisältää minkä tahansa koiran - ... # sillä ei ole väliä onko se opaskoira vai ei. } rooli Sokea { on opas $opas ; # Voi sisältää minkä tahansa esineen, jonka rooli on ... # Opas - riippumatta siitä, onko se koira vai ei. }

Säännölliset lausekkeet

Säännölliset lausekkeet ja merkkijonojen käsittely ovat aina olleet yksi Perlin määrittävistä ominaisuuksista. [60] Koska Perlin mallit ylittivät säännölliset lausekkeet jossain vaiheessa, [61] Raku-dokumentaatio viittaa niihin yksinkertaisesti säännöllisiksi lausekkeiksi , mikä irrottautuu säännöllisten lausekkeiden muodollisesta määritelmästä.

Raku laajentaa Perlin ominaisuusjoukkoa säännöllisten lausekkeiden ympärille sijoittamalla ne laajempiin puitteisiin jäsentimien rakentamista varten, joita kutsutaan säännöiksi . [62] Säännöt tarjoavat asiayhteyskohtaisia ​​jäsennysominaisuuksia (kuten PEG :n ja  ANTLR :  n syntaktinen predikaatti ) ja käyttäytyvät kuin sulkevat sanastonsa . [63] Säännöt syötetään avainsanalla , joka on samanlainen kuin aliohjelman määrittely. Anonyymit säännöt voidaan syöttää avainsanalla (tai ) , tai ne voidaan kuvata säännöllisinä lausekkeina Perlissä käyttämällä (match)- tai (korvaa)-operaattoreita. ruleregexrxms

Apocalypse  5 :ssä Larry Wall listaa 20 ongelmaa nykyisessä "regulex-kulttuurissa". Muun muassa Perlin säännölliset lausekkeet olivat "liian kompakteja ja "söpöjä", ne "luottivat liian vähän liian vähän erikoismerkkejä", niillä oli "huono nimettyjen sieppaustuki", "heikko kieliopin tuki" ja "huono kieliintegraatio". . ". [64]

Syntaktiset yksinkertaistukset

Joitakin Rakun Perl-rakenteita on muutettu ja optimoitu muita syntaktisia lausekkeita varten. Esimerkiksi sulut, joita vaadittiin suoritusmääräyslausekkeissa , ovat nyt valinnaisia. [49]

if is-true () { for @array { ... } }

Operaattori ,(pilkku) on nyt luettelon muodostaja, joten luetteloiden ympärillä ei tarvita sulkeita.

@array = 1 , 2 , 3 , 4 ;

Ketjutetut vertailut

Raku sallii seuraavat lausekkeet:

if 20 <= $lämpötila <= 25 { sano "Huoneen lämpötila on 20-25 astetta!" }

Tämä nähdään peräkkäisinä vertailuina vasemmalta oikealle, jota seuraa yhdistäminen loogisen AND :n kautta .

Laiska arviointi

Raku käyttää laiskan listan arviointitekniikkaa, joka on samanlainen kuin jotkut toiminnalliset kielet, kuten Haskell : [65]

@integers = 0 .. inf ; # kokonaislukua nollasta äärettömään

Tämä koodi ei aiheuta virhettä yritettäessä laittaa ääretön lista taulukkoon @integers, eikä se jumiudu yrittäessäsi kasvattaa luetteloa loputtomiin, jos pyydetään rajallinen määrä elementtejä.

Tämä yksinkertaistaa monia yleisiä tehtäviä Rakussa, mukaan lukien I/O-toiminnot, luettelomuunnokset ja parametrien välitys.

gatherOn myös mahdollista luoda laiskoja listoja käyttämällä ja  avainsanoja take. Ne ovat samanlaisia  ​​kuin Iconin ja  Pythonin generaattorit .

minun $neliot = laiska kerätä 0 .. Inf { ota $ _ * $_ ; };

Tässä $squareson ääretön luettelo luonnollisten lukujen neliöitä (mukaan lukien nolla), mutta tämän luettelon laiskan luonteen vuoksi elementit arvioidaan vain, kun niitä käytetään. [66]

Ylitykset

Raku ottaa käyttöön risteyskäsitteen [67] ( eng.  junction  - yhteys, leikkaus; rakussa tämä termi liittyy myös  konjunktiin ja  disjunktioon [65] ). Se on useiden arvojen päällekkäisyys . [65] Yksinkertaisimmassa muodossaan risteys luodaan risteysoperaattoreiden avulla :

# Esimerkki tyypin ylityksestä | ("mikä tahansa"): minun $väri = 'valkoinen' ; ellei $väri eq 'valkoinen' | 'musta' | 'grey' { die "Tällä värillä tulostamista ei tueta.\n" ; } # Esimerkki rististä, kuten & ("kaikki"): my $salasana = 'salainen!123' ; if $salasana ~~ /<:alpha>/ & / <:digit> / & / <:punct> / { sano "Salasanasi on tarpeeksi vahva." ; }

Operaattori |ilmaisee arvon, joka on yhtä suuri kuin vasen tai oikea argumentti, operaattori & - sekä vasen että oikea. Näitä arvoja voidaan käyttää koodissa aina, kun yhden arvon oletetaan olevan semanttisesti. Kaikki risteykseen liittyvät toiminnot vaikuttavat samanaikaisesti kaikkiin sen komponentteihin ja tulos yhdistetään tämän risteyksen operaattorin kautta. Kyllä, se ("apple"|"banana") ~ "s"tulee takaisin "apples"|"bananas". Boolen kontekstissa ristit palauttavat kuitenkin vain yhden arvon, tosi tai epätosi: anyse palauttaa tosi, jos vertailu on tosi vähintään yhdelle elementille; allpalauttaa tosi, jos vertailu on tosi kaikille elementeille. [68]

Crossovereita käyttämällä on mahdollista täydentää tyyppijärjestelmää jollain yleisellä ohjelmoinnilla , joka rajoittaa muuttujat typecrossiin.

alijoukko Väri kaikista missä RGB_Color | _ CMYK_Color ; sub get_tint ( Väri $väri , Num $opasiteetti ) { ... }

Crossoverit ovat erikoisobjekteja, jotka jakavat koodin suorittamisen mahdollisesti rinnakkaisiin säikeisiin . Ja ne on suunniteltu erityisesti käytettäväksi loogisessa kontekstissa: et voi käyttää niiden sisältöä suoraan muuntamatta niitä merkkijonoksi, mikä erottaa ne esimerkiksi joukoista ja muista kokoelmista. [68]

Makrot

Matalan tason kielillä makroista on tullut synonyymi tekstin korvaamiselle lähdekoodissa, koska ne liittyvät  C-esiprosessoriin . Kuitenkin korkean tason kielissä, kuten Lisp , joka edelsi C :tä, makrot olivat tehokkaampia. [69] Raku käytti hyväkseen tätä Lisp-tyyppistä makrokonseptia. [48] ​​Tämän tyyppisen makron teho perustuu ohjelman käyttämiseen korkean tason tietorakenteena tekstin sijaan ja pääsyyn kielen kaikkiin ominaisuuksiin.

Makromäärittely Rakussa näyttää aliohjelman tai menetelmän määritelmältä. Ja tällainen makro voi toimia sekä lähdekoodin  että abstraktin syntaksipuun ja näiden kahden asian yhdistelmän kanssa.

makro hei ( $mitä ) { quasi { sano "Hei { {{{$mitä}}}" }; }

Yllä olevassa esimerkissä makroargumentti jäsennetään ennen makron suorittamista, mikä johtaa informatiivisempiin kääntäjän diagnostisiin viesteihin. Koska makrorunko kuitenkin suoritetaan käännösaikana (jokaisessa käyttötapauksessa), voidaan soveltaa monenlaisia ​​optimointitekniikoita . Makrojen avulla on jopa mahdollista tehdä suurin osa joidenkin ohjelmien työstä ennen kuin ne alkavat suorittaa .

Tunnisteet

Rakussa tunnisteet voivat sisältää myös heittomerkkejä ja yhdysmerkkejä kirjainten, numeroiden ja alaviivojen lisäksi, kunhan niiden perässä on kirjaimia. Kirjaimet sisältävät "vastaavia" (joka on toteutuksesta riippuvaisia) Unicode-merkkejä , jotka on määritelty Rakudossa ja MoarVM:ssä kuin kaikki "L"-luokan Unicode-merkit. [70]

Tavuviivojen käyttöä alaviivojen sijasta kutsutaan " kebabkoteloksi ". [71] [72] [73]

Meta-operaattorit

Metaoperaattorit ovat operaattoreita, joita muut operaattorit voivat parametroida, aivan kuten funktiot voivat ottaa muita toimintoja parametreiksi. [74]

Tehtävän meta-operaattori

Perl on perinyt C-kielen operaattorit, kuten +=, *=ja niin edelleen. Raku yleistää ne meta-operaattoriksi. Jokaiselle binäärioperaattorille opvoimme kirjoittaa:

$x op = $y ; # tai $x [op]= $y

Mitä tarkoittaa:

$x = $x op $y ;

Lisäksi tämä toimii myös käyttäjän määrittämillä operaattoreilla.

Hyperoperaattorit

Ne ovat samanlaisia ​​kuin mapPerlin operaattori. Pakota operaattorit käyttämään kaikkia taulukkoarvoja. Voidaan soveltaa sekä binääri- että unaarioperaattoreihin. [75]

Esimerkiksi seuraava koodi luo taulukon, joka sisältää kaikki taulukon elementit @alisättynä yhdellä:

minun @aPlusOne = @a  "+" 1 ; # tai @a >>+>> 1

Kulmasulkujen suunta vaikuttaa käyttäytymiseen, kun eripituisia taulukoita välitetään parametreina. [75] Nämä "nuolet" osoittavat, mistä operaation tuloksen pituus tulee.

Esimerkki hyperoperaattorin käyttämisestä unaarioperaattorin kanssa:

minun @a = 1 , 2 , - 3 ; minun @b = -<< @a ; # [-1 -2 3]

Hyperoperaattorit eivät toimi vain litteille taulukoille, vaan myös sisäkkäisille taulukoille. [76]

Vähennyksen meta-operaattori

Reduktiometa-operaattoria voidaan käyttää minkä tahansa infix -operaattorin kanssa, jolloin se muunnetaan luettelon vähennysoperaattoriksi . On kuin operaattoria sovellettaisiin kahteen ensimmäiseen elementtiin, sitten tuloksena olevaan arvoon ja kolmanteen elementtiin ja niin edelleen, kunnes jäljellä on vain yksi arvo. Summa, tulo, maksimi, minimi jne. voivat toimia operaattoriparametrina. Tämä on erittäin tehokas mekanismi, joka esimerkiksi muuntaa operaattorin +listasummaoperaattoriksi, kuten alla olevassa esimerkissä.

sano "kokonaislukujen summa välillä 0 - 99 on: " , [+] ^ 100 ; Ristioperaattori

Se käyttäytyy sekä operaattorina että meta-operaattorina. [77]

Ristioperaattori [75] löytää listojen suoran tulon, joka on järjestetty siten, että elementtien numerointi oikeasta operandista on nopeampaa kuin vasemmasta operandista, [77] palauttaen listasarjan:

1 .. 3 X <ab c> X <de f> ; # ((1 ad) (1 ad) (1 af) # (1 bd) (1 be) (1 bf) # (1 cd) (1 ce) (1 cf) # (2 ad) (2 ae) ( 2 af) # (2 bd) (2 be) (2 bf) # (2 cd) (2 ce) (2 cf) # (3 ad) (3 ae) (3 af) # (3 bd) (3 be ) (3 bf) # (3 cd) (3 ce) ​​(3 cf))

Meta-operaattori tiivistää sisäiset luettelot käyttämällä parametrioperaattoria: [77]

1 .. 3 X ~ <ab c> X ~ <de f> ; # (1ad 1ae 1af 1bd 1be 1bf 1cd 1ce 1cf # 2ad 2ae 2af 2bd 2be 2bf 2cd 2ce 2cf # 3ad 3ae 3af 3bd 3be 3bf 3cdf3) Zip-operaattori

Englannista  . vetoketju  - vetoketju . [78]

Ristioperaattorin tavoin yhdistää listan elementtejä, [75] mutta palauttaa sekvenssin, joka sisältää ensin kunkin luettelon ensimmäiset elementit, sitten kunkin luettelon toiset elementit ja niin edelleen. [79]

<ab c> Z <1 2 3 4> ; # ((a 1) (b 2) (c 3)) 100 , 200 Z + 42 , 23 ; # (142 223) Käänteisoperaattorit

Meta-operaattorilla R( eng.  reverse ) voit vaihtaa alkuperäisen operaattorin argumentteja.

sano "yksi jaettuna kolmella on yhtä suuri" , 3 R / 1 ; Metaoperaattoreiden sisäkkäisyys

Tuloksena meta-operaattorin soveltamisesta operaattoriin on toinen operaattori, johon meta-operaattoria voidaan soveltaa uudelleen ja niin edelleen. Syntaksin yksiselitteistämiseksi hakasulkeet ovat sallittuja. [80]

minun @a = 1 , 2 , 3 ; minun @b = 5 , 6 , 7 ; @a >>>>> @b ; # Jäsennysvirhe. @a >>[>]>> @b ; # [False False False] # Tässä hyper-operaattoria >> >> sovelletaan vertailuoperaattoriin. # Cross-meta-operaattori käyttää # meta- osoitusoperaattoria #, joka on parametroitu additiooperaattorilla: @a X [+=] @b ; # (6 12 19 7 13 20 8 14 21) # Cross-meta-operaattorin vuoksi määritys tehtiin # jokaiselle taulukon @a elementille taulukon @b jokaisella elementillä, # mikä vastaa taulukon @a # elementtien summan lisäämistä taulukon jokaiseen elementtiin @b: sano [+] @b ; #18 sano @a ; # [19 20 21]

Samanaikaisuus ja samanaikaisuus

Kuten muutkin modernit kielet, Raku on suunniteltu tukemaan samanaikaisuutta ja asynkronista ohjelmointia.

Raku tarjoaa yksinkertaisen, modulaarisen , korkean tason API :n samanaikaisen koodin kirjoittamiseen riippumatta siitä, kuinka virtuaalikone toteuttaa tämän API:n. Lisäksi jotkin kieliominaisuudet voivat implisiittisesti toimia asynkronisesti. Näiden toimintojen hallittavuuden ja yhteensopivuuden varmistamiseksi käyttäjäkoodin tulisi mahdollisuuksien mukaan välttää matalan tason rajapintojen käyttöä ( säikeet , aikataulut, lukot ). [81]

Lupaukset [82] [83] ovat keskeinen korkean tason mekanismi ,   jotka ovat laskelmien tuloksia, jotka on saatu ennen niiden varsinaista valmistumista. Niitä voidaan antaa, suorittaa ja rikkoa. Siten niillä on kolme mahdollista tilaa. Tämän mekanismin vahvuus on kyky yhdistää ne ja yhdistää ne ketjuihin:

minun $p1 = Lupaus . uusi (); minun $p2 = $p1 . then ({ sano "Toisen lupauksen tulos." });

Täällä thense varmistaa suorituksen $p2vasta :n suorittamisen jälkeen $p1.

Siellä on myös englantia.  Tarvikkeet ("varastot") ja  eng.  Toimittajat ("toimittajat") - mekanismi asynkronisten tietovirtojen luomiseksi , ja se pystyy käsittelemään useiden vastaanottajien jokaisen viestin kerralla samalla tavalla kuin tapahtumakäsittelijät toimivat muilla ohjelmointikielillä . [81] Tätä mekanismia voidaan käyttää tapahtumalähtöiseen ohjelmointiin .

Lopuksi kanavat ( English  Channels ) ovat säikeen turvallisia FIFO - jonoja , jotka ovat samanlaisia ​​kuin nimetyt liukuhihnat käyttöjärjestelmissä, mutta toimivat nykyisessä prosessissa. Keskeinen ero  Supplyon se, että putkesta lukeminen on jonon purkamista, [81] ts . yksi arvo voidaan lukea vain kerran.

Esimerkkejä

hei maailma

Ohjelma "Hei maailma!" käytetään usein osoittamaan kielen perussyntaksia. Rakussa se näyttää tältä:

sano 'Hei, maailma' ;

Vaikka tietysti on enemmän kuin yksi tapa ilmaista se. [84]

Factorial

Factorial laskenta , määritelty useilla tavoilla:

# Rekursion käyttö "if-else"-konstruktion kanssa. osafakta ( UInt $n --> UInt ) { if $n == 0 { 1 } else { $ n * fakta ( $n-1 ) } } # Rekursion käyttö "if" #:n kanssa lausekkeen muokkaajana. osafakta ( UInt $n --> UInt ) { return 1 if $ n == 0 ; palauttaa $n * tosiasia ( $n-1 ); } # Rekursion käyttö "kun"-konstruktion kanssa. osafakta ( UInt $n --> UInt ) { kun $n == 0 { 1 } oletusarvo { $n * fakta ( $n-1 ) } } # Kolmen operaattorin käyttäminen. osafakta ( UInt $n --> UInt ) { $n == 0  ?? 1  !! $n * tosiasia ( $n-1 ) } # Usean lähetyksen käyttäminen. multi fact ( 0 ) { 1 } moni tosiasia ( UInt $n --> UInt ) { $n * tosiasia ( $n - 1 ) } # Vähennysmeta-operaattorin käyttäminen. osafakta ( UInt $n --> UInt ) { [*] 1 .. $n } # Tekijäoperaattorin määritelmä, # toteutettu pelkistysmeta-operaattorin kautta. sub postfix: <!>( UInt $n --> UInt ) { [*] 1 .. $n } # Käytä "state"-avainsanaa muistiinpanoon. osafakta ( UInt $n --> UInt ) { tila % tunnettu = 0 => 1 ; palauttaa %tunnettu { $n } , jos %tunnettu { $n }: olemassa ; %tunnettu { $n } = $n * tosiasia ( $n-1 ); palauttaa %tunnettu { $n }; }

QuickSort

QuickSort  on hyvin tunnettu lajittelualgoritmi. Sen toteutus toiminnallisen paradigman avulla voidaan kirjoittaa ytimekkäästi [a] näin:

# Lajiteltu tyhjä lista on tyhjä lista. moni pikalajittelu ([]) { () } # Muussa tapauksessa ota ensimmäinen elementti pivotiksi... moni pikalajittelu ([ $pivot , * @rest ]) { # Jaa elementit luetteloon niistä #, jotka ovat pienempiä kuin pivot ja ne # suuremmat kuin pivot. minun @ennen = @lepot . grep (* ennen $pivot ); my @after = @lepot . grep (* $pivot :n jälkeen ); # Lajittele nämä aliluettelot ja ketjuta tulos. tasainen ( pikalajittelu ( @ennen ), $pivot , pikalajittelu ( @jälkeen )) }
  1. Ellei kääntäjä tee jotain salaperäistä kulissien takana, rekursion suurin syvyys tässä on listan pituus, mikä tekee tästä toteutuksesta sopimattoman suurdatalle. Rekursion syvyys voidaan pienentää arvoon  log2(длина_списка)käyttämällä rekursiota vain pienten aliluetteloiden kanssa beforeja  after, ja muuten silmukoita. Myös tässä toteutuksessa alkuperäisen luettelon päällekkäiset arvot näkyvät tulosteessa vain kerran, koska molemmat vertailut menetelmäparametreissa ovat greptiukkoja.

Tower of Hanoi

Tätä palapeliä käytetään usein esittelemään rekursio  tietotekniikassa . Tämä toteutus käyttää monia menetelmiä , joissa  on osana . 0

multi sub hanoi ( 0 , $, $, $) { } # Ei levyjä. Ei ole mitään siirrettävää. multi sub hanoi ( $n , $a = 'A' , $b = 'B' , $c = 'C' ) { # $n levyä ja kolme sauvaa: A, B, C. hanoi $n - 1 , $ a , $c , $b ; # Siirrä ($n - 1) asemaa paikasta A paikkaan B sano "Move drive $n from $a to $c." ; # Siirrä viimeinen levy paikasta A paikkaan C. hanoi $n - 1 , $b , $a , $c ; # Siirrä ($n - 1) levyt paikasta B paikkaan C. } hanoi ( 5 ); # Ratkaisu viidelle levylle.

Katso myös

Muistiinpanot

  1. Rakudon virallinen  verkkosivusto . - "楽土". Haettu: 26.7.2022.
  2. 楽土(らくど) の意味 (japani) . goo国語辞書. - "心配や苦労がなく楽しい生活ができる土地。". Haettu 27. elokuuta 2021. Arkistoitu alkuperäisestä 27. elokuuta 2021.
  3. Perl 6:sta tulee Raku - mutta mitä tämä tarkoittaa?  (englanniksi) . Koulutus . - "Se tarkoittaa "mukavuutta" tai "helppoutta" japaniksi, mikä heijastaa hienosti kielen tavoitteita olla mukava ohjelmointikokemus - kuten aiemmin mainittiin, usein kielen toteuttajien kustannuksella! Suosituin kielen kääntäjä on nimeltään "Rakudo", joka tarkoittaa suunnilleen "kamelin tietä" (kameli on symboli, joka liittyy yleisesti Perliin) ja myös "paratiisia". Näin ollen voimme nähdä sen tapana "tehdä" Raku-kieli. Haettu 27. elokuuta 2021. Arkistoitu alkuperäisestä 27. elokuuta 2021.
  4. Sanan 楽määritelmä  . JapanDict: Japanin sanakirja . - "Buddhalaisuus: sukha (onnellisuus)". Haettu 30. elokuuta 2021. Arkistoitu alkuperäisestä 30. elokuuta 2021.
  5. Perl 6  FAQ . — "Perl 6 tarjoaa "Perl 5 -yhteensopivuustilan", jolloin kääntäjä voi suorittaa suoraan minkä tahansa koodin, jonka se tunnistaa olevan kirjoitettu Perl 5:ssä. [...] Vuoden 2010 toisella neljänneksellä Patrick Michaud julkaisee hyödyllisen ja käyttökelpoisen (mutta ominaisuus ei ole valmis) Perl 6 -kääntäjä...". Haettu 3. syyskuuta 2021. Arkistoitu alkuperäisestä 3. syyskuuta 2021.
  6. 1 2 Larry on hyväksynyt Perl 6:n uudelleennimeämisen Rakuksi . Haettu 18. lokakuuta 2019. Arkistoitu alkuperäisestä 15. lokakuuta 2019.
  7. Perl 6:n yhteenveto 20030713 päättyneeltä viikolta. Perl 6:n säännöt OSCONissa.  (englanniksi) . Perl 6 -arkisto (13. heinäkuuta 2003). - "Damian puhui Perl6::Rulesista, Perl 6:n sääntöjärjestelmän toteuttamisesta puhtaassa Perl 5:ssä. [...] hän kertoi meille [...], että moduuli valmistuu ja vapautetaan CPANille ajan/rahojen salliessa ja olisivat pois jouluna. Hän ei kertonut, mikä joulu." Haettu 27. elokuuta 2021. Arkistoitu alkuperäisestä 27. elokuuta 2021.
  8. ↑ Perl Humor : Perl 6 ja Vapourware  . Perlin aloittelijoille tarkoitettu sivusto . - "<anonuser> Tiedät sen, kun he lopulta päättävät vapauttaa sen ohjelmallisen abortin, jota he kutsuvat perl 6:ksi <rindolf> anonuser: jouluna. <rindolf> anonuser: en tiedä kumpi.". Arkistoitu alkuperäisestä 8. huhtikuuta 2012.
  9. Perl 6 julkaistaan ​​- Larry Wall Twitterissä . Käyttöpäivä: 27. joulukuuta 2015. Arkistoitu alkuperäisestä 8. maaliskuuta 2016.
  10. OpenNET: Perl 6:n (kielen ensimmäinen julkaisu) joulujulkaisu julkaistiin . Haettu 15. heinäkuuta 2021. Arkistoitu alkuperäisestä 15. heinäkuuta 2021.
  11. Joulu on täällä Arkistoitu 27. joulukuuta 2015 Wayback Machinessa .
  12. Federico Biancuzzi. Ohjelmoinnin päämiehiä: keskusteluja tärkeimpien ohjelmointikielten luojien kanssa / Federico Biancuzzi, Shane Warden. - 2009. - ISBN 978-0596515171 .
  13. Kline, Joe. Raportti Perl-konferenssista (21. elokuuta 2000). Haettu 26. heinäkuuta 2021. Arkistoitu alkuperäisestä 4. kesäkuuta 2009.
  14. Seinä, Larry. Sipulin tila 2000 . O'Reilly Network (23. lokakuuta 2000). Haettu 26. heinäkuuta 2021. Arkistoitu alkuperäisestä 6. kesäkuuta 2010.
  15. Perl-säätiö. Tietoja Perl 6 RFC:stä . Haettu 26. heinäkuuta 2021. Arkistoitu alkuperäisestä 26. heinäkuuta 2021.
  16. Seinä, Larry. Apocalypse 1: The Ugly, the Bad, and the Good (2. huhtikuuta 2001). Haettu 26. heinäkuuta 2021. Arkistoitu alkuperäisestä 26. heinäkuuta 2021.
  17. Raku-testisarja . Haettu 26. heinäkuuta 2021. Arkistoitu alkuperäisestä 26. heinäkuuta 2021.
  18. Larry Wall ja Perl 6 -suunnittelijat. Perl 6 suunnitteluasiakirjat . Haettu 26. heinäkuuta 2021. Arkistoitu alkuperäisestä 26. heinäkuuta 2021.
  19. Perl-säätiö. Ekseesit . Haettu 26. heinäkuuta 2021. Arkistoitu alkuperäisestä 26. heinäkuuta 2021.
  20. Barewords - paljaat sanat Perlissä . Haettu 14. elokuuta 2021. Arkistoitu alkuperäisestä 14. elokuuta 2021.
  21. FIO00-PL. Älä käytä bareword-tiedostokahvoja.  (englanniksi) . SEI CERT Perl -koodausstandardi . Carnegie Mellon University (16. marraskuuta 2017). Haettu 14. elokuuta 2021. Arkistoitu alkuperäisestä 14. elokuuta 2021.
  22. Seinä, Larry. Apocalypse 3: Operators  (englanniksi) . Perl 6 -arkisto (2. lokakuuta 2001). Haettu 29. elokuuta 2021. Arkistoitu alkuperäisestä 29. elokuuta 2021.
  23. Seinä, Larry. Apocalypse 4: Syntaksi  (englanniksi) . Perl 6 -arkisto (18. tammikuuta 2002). Haettu 29. elokuuta 2021. Arkistoitu alkuperäisestä 29. elokuuta 2021.
  24. Seinä, Larry. Apocalypse 12: Objects  (englanniksi) . Perl 6 -arkisto (13. huhtikuuta 2004). Haettu 29. elokuuta 2021. Arkistoitu alkuperäisestä 29. elokuuta 2021.
  25. Simon Proctor (‎Scimon‎). Päivä 19 - Toiminnallinen ohjelmointi  Rakun kanssa . Rakun adventtikalenteri (19.12.2019). Haettu 29. elokuuta 2021. Arkistoitu alkuperäisestä 29. elokuuta 2021.
  26. Suunnitelma  mopsille . Perl.com (3. maaliskuuta 2005). — Haastattelu Autrijus Tangin (Audrey Tang) kanssa. - "kromaattinen: Oletko alkanut antaa Haskell-opetusohjelmia? Tiedän, että Larry ja Patrick ovat alkaneet poimia siitä. Olen melko varma, että Luke ja Damian ovat jo tutkineet sitä (tai jotain samasta sukupuusta). Autrijus: Luulen lukeneeni Damianin artikkelin, jossa sanotaan, että hän opetti Haskellia monashissa. Se on kuitenkin ennen monadista vallankumousta. kromaattinen: Jos ei Haskell, niin varmasti jotain ML-perheestä. Autrijus: Aivan. Olen siis osoittanut ihmisiä YAHTiin ja #Haskelliin. kromaattinen: Kuulostaa siltä, ​​että houkuttelet ihmisiä aidan molemmilta puolilta. Autrijus: Todellakin on. Saan svn/svk- ja darcs-paikat." Haettu 29. elokuuta 2021. Arkistoitu alkuperäisestä 29. elokuuta 2021.
  27. Camelia  . _ Haettu 14. elokuuta 2021. Arkistoitu alkuperäisestä 14. toukokuuta 2021.
  28. Larry Wall IRC-chat-lokissa (downlink) (15. tammikuuta 2016). Haettu 10. marraskuuta 2017. Arkistoitu alkuperäisestä 8. huhtikuuta 2016.   (katso sivukoodi)
  29. Arkistoitu "Logo-näkökohtia" -sähköposti Larry Wallilta (24. maaliskuuta 2009). Haettu: 10.11.2017.
  30. Lataa Raku Arkistoitu 12. elokuuta 2021 Wayback Machinessa : "Rakudo on tällä hetkellä aktiivisimmin kehitetty ja kypsin Rakun toteutus".
  31. 12 Wall, Larry . Tiivistelmä 1: Yleiskatsaus (10. elokuuta 2004). Haettu 15. elokuuta 2021. Arkistoitu alkuperäisestä 15. elokuuta 2021.
  32. GitHub-ongelmat: käännös jar-tiedostoiksi / moarvm-tiedostoiksi Arkistoitu 15. heinäkuuta 2021 Wayback Machinessa - keskustellaan mahdollisuudesta levittää käännetty tavukoodi.
  33. Node.js:n rakudo.js:n käytön aloittaminen . Haettu 15. heinäkuuta 2021. Arkistoitu alkuperäisestä 15. heinäkuuta 2021.
  34. Worthington, Jonathan MoarVM: Virtuaalikone NQP:lle ja Rakudolle . 6 guts . Käyttöpäivä: 24. heinäkuuta 2013. Arkistoitu alkuperäisestä 9. heinäkuuta 2013.
  35. MoarVM . MoarVM-tiimi. Haettu 8. heinäkuuta 2017. Arkistoitu alkuperäisestä 6. kesäkuuta 2017.
  36. Kehitysjulkaisu #85 ("Berliini") Arkistoitu 15. heinäkuuta 2021 Wayback Machinessa : "tämä on viimeinen Rakudon julkaisu, joka tukee Parrot-taustaohjelmaa lähitulevaisuudessa".
  37. YAPC::Europe 2013 “Future Perl”: MoarVM: metamallikeskeinen ajonaika NQP:lle ja Rakudolle, Jonathan Worthington (‎jnthn‎) Arkistoitu 16. heinäkuuta 2021 Wayback Machinessa : "Me tiedämme, mitä tarvitsemme nyt" (sixth) dia)
  38. YAPC::Europe 2013 "Future Perl": MoarVM: metamallikeskeinen ajonaika NQP:lle ja Rakudolle, Jonathan Worthington (‎jnthn‎) Arkistoitu 16. heinäkuuta 2021 Wayback Machinessa - keskustelusivu konferenssin verkkosivustolla videolla
  39. Mopsit - Perl 6 -käyttäjän golfjärjestelmä.
  40. Perl 6 -kääntäjien ominaisuuksien vertailu . Arkistoitu alkuperäisestä 7. helmikuuta 2019.
  41. Pugs-testisarjan integrointi Synopseihin  ( 22. elokuuta 2006). "No, lyhyesti sanottuna, olemme jakaneet Pugs-testipaketin .t-tiedostot osiin ja lisänneet jokaisen tuloksena olevan katkelman Synopseiden vastaavan kappaleen jälkeen." Haettu 28. elokuuta 2021. Arkistoitu alkuperäisestä 28. elokuuta 2021.
  42. agentz. Raku / mu: [t/statements/do.t ]  (englanniksi) . GitHub (16. elokuuta 2006). Haettu 28. elokuuta 2021. Arkistoitu alkuperäisestä 28. elokuuta 2021.
  43. [gsoc_spectest siirretty do.t spesifikaatioon, lisätty testejä, fudged rakudoa varten (lisätty 3 testiä)  ] . GitHub . Haettu 28. elokuuta 2021. Arkistoitu alkuperäisestä 28. elokuuta 2021.
  44. Hae osoitteesta pugscode.org  . GitHub . - "4 590 sitoutumistulosta Rakussa/paisti". Haettu 31. elokuuta 2021. Arkistoitu alkuperäisestä 31. elokuuta 2021.
  45. ↑ Audrey Tangin haastattelu  . Andrew Shitov (5. toukokuuta 2015). - "Elokuussa 2006 Yichun Zhang paransi jatkuvaa integrointijärjestelmää näyttämällä testit tekniset tiedot, kuten tässä kirjoituksessa on kuvattu. Tämä tekee testeistä osan spesifikaatiota, ei erityisesti Mopsille. Tammikuussa 2008 Larry otti käyttöön fudge-ohjelman, joka mukauttaa testisarjan toimimaan uusissa toteutuksissa, kuten SMOP ja Rakudo. Helmikuussa 2015 yhteisö julisti perl6/roast-testit todelliseksi spesifikaatioksi...”. Haettu 28. elokuuta 2021. Arkistoitu alkuperäisestä 28. elokuuta 2021.
  46. 12 Wall, Larry . Tiivistelmä 2: Bits and Pieces (20. toukokuuta 2009). Haettu 15. elokuuta 2021. Arkistoitu alkuperäisestä 8. toukokuuta 2021.
  47. WDH: PERL - Aliohjelmat (6.6.7. Prototyypit) . Haettu 15. elokuuta 2021. Arkistoitu alkuperäisestä 23. huhtikuuta 2022.
  48. 1 2 3 Seinä, Larry. Tiivistelmä 6: Aliohjelmat (21. maaliskuuta 2003). Haettu 15. elokuuta 2021. Arkistoitu alkuperäisestä 15. elokuuta 2021.
  49. 12 Wall, Larry . Tiivistelmä 4: Lohkot ja lausunnot (20. toukokuuta 2009). Haettu 15. elokuuta 2021. Arkistoitu alkuperäisestä 15. elokuuta 2021.
  50. Olio-ohjelmointi Perl 5:ssä . Ohjelmoijan muistiinpanot (7. huhtikuuta 2011). Haettu 21. elokuuta 2021. Arkistoitu alkuperäisestä 21. elokuuta 2021.
  51. Seinä, Larry. Tiivistelmä 12: Esineet (18. elokuuta 2006). Haettu 21. elokuuta 2021. Arkistoitu alkuperäisestä 21. elokuuta 2021.
  52. Luokat ja objektit. rakentajat.  (englanniksi) . Raku - dokumentaatio . Haettu 21. elokuuta 2021. Arkistoitu alkuperäisestä 21. elokuuta 2021.
  53. JavaScript-selaimien väliset lisälaitteet . Habr (20. huhtikuuta 2011). Haettu 22. elokuuta 2021. Arkistoitu alkuperäisestä 22. elokuuta 2021.
  54. Objektisuuntaus. luokat. attribuutteja.  (englanniksi) . Raku - dokumentaatio . Haettu 21. elokuuta 2021. Arkistoitu alkuperäisestä 21. elokuuta 2021.
  55. Ohjelmiston kokoonpanoryhmä. piirteitä . Haettu 22. syyskuuta 2006. Arkistoitu alkuperäisestä 11. elokuuta 2006.
  56. Jonathan Worthington. Päivä 18: Roolit . Haettu 21. elokuuta 2021. Arkistoitu alkuperäisestä 21. elokuuta 2021.
  57. Roolit . Rakun esittely . Haettu 15. heinäkuuta 2021. Arkistoitu alkuperäisestä 15. heinäkuuta 2021.
  58. kromaattinen. Perl-roolien syy . Haettu 21. elokuuta 2021. Arkistoitu alkuperäisestä 16. heinäkuuta 2021.
  59. Objektisuuntaus . docs.raku.org . Haettu 22. elokuuta 2021. Arkistoitu alkuperäisestä 21. elokuuta 2021.
  60. Parlante, Nick. Essential Perl: merkkijonojen käsittely säännöllisillä lausekkeilla . Haettu 21. elokuuta 2021. Arkistoitu alkuperäisestä 21. huhtikuuta 2012.
  61. Christiansen, Tom. PERL5 Säännöllisen lausekkeen kuvaus . - "Perlin säännölliset lausekkeet "eivät ole" - eli ne eivät ole "säännöllisiä", koska myös backviittaukset per sed ja grep ovat tuettuja, mikä tekee kielestä enää täysin säännöllisen." Haettu 25. maaliskuuta 2010. Arkistoitu alkuperäisestä 31. maaliskuuta 2010.
  62. Kieliopit. säännöt.  (englanniksi) . Raku - dokumentaatio . Haettu 22. elokuuta 2021. Arkistoitu alkuperäisestä 22. elokuuta 2021.
  63. Seinä, Larry. Tiivistelmä 5: Säännöt ja säännöt (20. toukokuuta 2009). Haettu 22. elokuuta 2021. Arkistoitu alkuperäisestä 22. elokuuta 2021.
  64. Seinä, Larry. Apocalypse 5: Pattern Matching (4. kesäkuuta 2002). Haettu 22. elokuuta 2021. Arkistoitu alkuperäisestä 22. elokuuta 2021.
  65. 1 2 3 Seinä, Larry. Tiivistelmä 9: Tietorakenteet (13. syyskuuta 2004). Haettu 22. elokuuta 2021. Arkistoitu alkuperäisestä 22. elokuuta 2021.
  66. ↑ Ohjaa virtausta : kerää/ota  . Raku - dokumentaatio . - "Kerää/ota-yhdistelmä voi luoda arvoja laiskasti kontekstista riippuen. Jos haluat pakottaa laiskan arvioinnin, käytä laiska-alirutiinia tai -menetelmää. Sitoutuminen skalaariin tai sigillettömään säiliöön pakottaa myös laiskuuteen." Haettu 22. elokuuta 2021. Arkistoitu alkuperäisestä 21. elokuuta 2021.
  67. 8.6. Ylitys . Rakun esittely . Haettu 15. heinäkuuta 2021. Arkistoitu alkuperäisestä 15. heinäkuuta 2021.
  68. 1 2 luokan risteys  . Raku - dokumentaatio . Haettu 23. elokuuta 2021. Arkistoitu alkuperäisestä 23. elokuuta 2021.
  69. Lamkins, David B. Menestyksekäs Lisp: Kuinka ymmärtää ja käyttää yleistä Lispia . - bookfix.com, 2004-12-08. Arkistoitu 12. syyskuuta 2006 Wayback Machinessa
  70. syntaksitunnisteet . _  Raku - dokumentaatio . Haettu 23. elokuuta 2021. Arkistoitu alkuperäisestä 23. elokuuta 2021.
  71. Lodash “Array” Methods:  kebabCase . Haettu 23. elokuuta 2021. Arkistoitu alkuperäisestä 14. elokuuta 2021.
  72. Prop-kotelo (camelCase vs kebab-kotelo  ) . vue.js. _ Haettu 23. elokuuta 2021. Arkistoitu alkuperäisestä 12. elokuuta 2021.
  73. Ivan Grishaev. Konfigurointi Clojuressa. Ympäristömuuttujat Clojuressa.  (englanniksi) (6. toukokuuta 2021). Haettu 23. elokuuta 2021. Arkistoitu alkuperäisestä 23. elokuuta 2021.
  74. ↑ Operaattorit : Metaoperaattorit  . Haettu 24. elokuuta 2021. Arkistoitu alkuperäisestä 3. elokuuta 2021.
  75. 1 2 3 4 Andrey Shitov. Meta-operaattorit Perlissä 6 . Pragmatic Perl (27. toukokuuta 2015). Haettu 23. elokuuta 2021. Arkistoitu alkuperäisestä 23. elokuuta 2021.
  76. Hyper- operaattorit  . Raku - dokumentaatio . Haettu 24. elokuuta 2021. Arkistoitu alkuperäisestä 3. elokuuta 2021.
  77. 1 2 3 Operaattorit.  Listaa infixin etusija: infix X. Raku - dokumentaatio . Haettu 24. elokuuta 2021. Arkistoitu alkuperäisestä 3. elokuuta 2021.
  78. Kurt Normark. Toiminnallinen ohjelmointi kaaviossa.  pienennys ja vetoketju . Tietojenkäsittelytieteen laitos, Aalborgin yliopisto, Tanska . - "Vetoketjutoiminto on nimetty vetoketjun mukaan, kuten housuista ja paidoista tunnetaan." Haettu 24. elokuuta 2021. Arkistoitu alkuperäisestä 24. elokuuta 2021.
  79. Operaattorit.  Listaa infixin etusija: infix Z. Haettu 24. elokuuta 2021. Arkistoitu alkuperäisestä 3. elokuuta 2021.
  80. Operaattorit. metaoperaattoreita. Metaoperaattoreiden sisäkkäisyys.  (englanniksi) . Raku - dokumentaatio . Haettu 24. elokuuta 2021. Arkistoitu alkuperäisestä 3. elokuuta 2021.
  81. 1 2 3 Samanaikaisuus  _ _ Raku - dokumentaatio . Haettu 25. elokuuta 2021. Arkistoitu alkuperäisestä 21. elokuuta 2021.
  82. Lupaukset . Moderni JavaScript-opetusohjelma (15. heinäkuuta 2020). Haettu 27. elokuuta 2021. Arkistoitu alkuperäisestä 27. elokuuta 2021.
  83. Lupaus . MDN . — "Lupauksen toteutuminen kirjataan käyttämällä p1.then jatkoa. Tämä osoittaa, kuinka menetelmän synkroninen osa on irrotettu lupauksen asynkronisesta toteuttamisesta." Haettu 27. elokuuta 2021. Arkistoitu alkuperäisestä 26. elokuuta 2021.
  84. Raku - Ero print, put and say?  (englanniksi) . pinon ylivuoto . Haettu 1. syyskuuta 2021. Arkistoitu alkuperäisestä 1. syyskuuta 2021.
  85. ↑ Perl 6 :n ihmiset: Carl Mäsak  . Perl.com (31. elokuuta 2010). — Haastattelu Rakudo-kehittäjän kanssa nimeltä Carl Mäsak.. — "Olen myös saanut uuden kunnioituksen sitä kohtaan, kuinka "kokonaisvaltainen" prosessi Perl 6:n kaltaisen kielen suunnittelu voi joskus olla. Se, osoittautuuko jokin ominaisuus hyväksi ideaksi, määräytyy kymmenien minuuttisten vuorovaikutusten perusteella teknisissä tiedoissa, jotka eivät kaikki ole "paikallisia", ja jotkut niistä ovat suoraan esiin nousevia. Haettu 29. elokuuta 2021. Arkistoitu alkuperäisestä 29. elokuuta 2021.
  86. Larry Wall. Perl, ensimmäinen postmoderni tietokonekieli  . Perl.com (9. maaliskuuta 1999). - Teksti Larry Wallin puheesta Linux Worldissä 3. maaliskuuta 1999. Haettu 30. elokuuta 2021. Arkistoitu alkuperäisestä 11. elokuuta 2021.

Kirjallisuus

Kirjat, jotka on julkaistu ennen kielen julkaisua (ennen versiota 6.c)

Linkit