Perl 6

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Perl 6
limbaj de programare
Camelia.svg
Camelia, logo-ul
Autor Larry Wall
Data de origine 25 decembrie 2015
Ultima versiune Rakudo stele 2017.07, 24 iulie 2017
Utilizare general
Paradigme multi-paradigmă
Tastare dinamică, progresivă
Extensii comune .p6, .pl6, .pm6
Influențată de Perl5 , Python , Haskell , JavaScript , Smalltalk
Implementare referință
Implementare Rakudo Perl 6
Sistem de operare cross-platform
Licență GNU General Public License sau Licența artistică
Site-ul web raku.org/

Raku (Perl 6) este unul dintre membrii Perl familiei de limbaje de programare . [1]

Acesta introduce elemente de mai multe limbi, de cele mai moderne pentru cele mai stabilite.

Compatibilitatea cu Perl 5 nu este considerat un obiectiv, cu toate că există un mod compatibil în caietul de sarcini limba. Dezvoltarea acestei limbi a început în anul 2000.

În februarie 2015 , un post de la Fundația Perl a declarat că „echipa Perl 6 va încerca să livreze o versiune de dezvoltare 1.0 de Larry Wall ziua de naștere în septembrie și unul definitiv de Crăciun.“, [2] și la 25 decembrie 2015 primul versiune stabilă a fost anunțată. [3]

Punerea în aplicare în primul rând într - adevăr de conducere, sa întâmplat datorită dezvoltării pe Pug , a început în 2005 și de atunci au existat mai multe proiecte pentru a pune în aplicare Perl 6. Rakudo Perl 6 se bazează pe NQP (nu destul Perl) și se pot folosi MoarVM sau Java Virtual Machine ca medii de rulare; Rakudo lansează o versiune nouă în fiecare lună; în iulie 2010, proiectul a lansat prima distribuție Rakudo Star, [4] . Este o colecție care grupează o implementare de Perl 6 și materialul util și utilizabil legat de acesta. Larry Wall continuă să actualizeze o gramatica de referință, cunoscut sub numele de STD.pm6, scrise în Perl 6 și care rulează cu Perl 5.

Istorie

„În Perl 6 am decis că ar fi mai bine să corecteze limba decât pentru a corecta utilizatorul“

(Larry Wall [5] )

Plecarea proiectului Perl 6 a fost anunțată pentru prima dată la 19 iulie 2000, în a patra zi a acestui an Perl Conferința [6] de Larry Wall însuși, în timpul său de stat a conferinței ceapa 2000. [7] La acel moment, primele obiective au fost de a elimina „problemele istorice“ ale limbajului; citatul de referință a fost aceasta: „lucruri simple, trebuie să rămână simplu, lucrurile dificile trebuie să devină mai simple și lucruri imposibile ar trebui să devină dificilă;“ O curățenie generală a structurii interne și API - uri . Procesul a început cu o serie de solicitări de sugestii numite „RFCs“ în limba engleză. Acest proces a fost deschis tuturor și nu a lăsat deoparte orice aspect al limbii. [8]

Când procesul RFC a fost făcut, Wall revizuit și clasificat fiecare solicitare, în timp ce obiectivul final a fost de a scrie o directivă pentru fiecare capitol de programare Perl. Procedura a fost foarte simplu, care este, de îndată ce un capitol a fost scris, directivele anterioare au fost invalidate de modificările ulterioare. Din acest motiv, au fost publicate o serie de rezumate, fiecare cu privire la conținutul unei directive, de asemenea, conține toate actualizările ulterioare. Astăzi spec Perl 6 continuă aproape în întregime în cadrul acestor rezumate. [9]

Există, de asemenea , o serie de interpretări scrise de Damian Conway care explică conținutul fiecărei directive în ceea ce privește utilizarea practică. Fiecare interpretare este format din exemple de cod, împreună cu discuții privind utilizarea și implicațiile exemplelor. [10]

Există trei modalități principale de comunicare utilizate în ciclul de dezvoltare Perl 6 astăzi. Primul este Format: Freenode canal IRC pe Freenode . Al doilea este o colecție de liste de discuții , care stau pe Fundația Perl servere la perl.org . [11] Al treilea este Git , care este un depozit de colectare de cod sursă, care se află aici https://github.com/perl6 .

Obiective

Compatibilitatea de rupere a fost forțată de la începutul proiectului; a permis pentru unele dintre schimbările Larry Wall sugerate în discursul său. „Tarele istorice“ , cum ar fi confuzia care planat în jurul sigiliilor utilizate ca recipiente; ambiguitatea dintre select funcții; impactul sintactică cuvintelor nesigilate folosite pentru fișiere mâner și multe alte probleme pe care programatori Perl a fost discutat, de gândire despre modul în care acestea ar putea fi rezolvate, dar rămase nerezolvate de ani de zile.

De-a lungul anilor, Perl 6 a suferit multe schimbări în direcția de deplasare. Introducerea de concepte din Python și Ruby a influențat , dar ca Pugs interpret a fost scris folosind limbajul de programare Haskell , atât de multe de programare funcțională influente au fost absorbite de către echipa de dezvoltare Perl 6.

Mascotă

Larry Wall și Camelia

Mascota limbii este „Camelia, Perl 6 bug-ul“. [12] Acest nume este o ușoară referire la cămilă, Perl mascota, și forma acesteia, în tradiția jocurilor de cuvinte atât de iubit de către comunitatea Perl, este o referință glumă la „ bug - ul de software “. Spirala modele din interiorul aripilor de fluture seamănă cu P6, pseudonimul Perl 6.

Schimbări majore de la Perl5 la Perl6

Cele două limbi diferă în fundamentele lor de bază, deși intenția generală este de a menține Perl 6 în termen de Perl, astfel că Perl 6 este în mod clar un limbaj de programare perl. Cele mai multe dintre modificările sunt menite să normalizeze limba, pentru a face mai simplu, pentru a da consistență, pentru a elimina ambiguitățile că soluțiile euristice obligă.

Nu există specificații scrise sau standarde pentru Perl 5 și nici nu există nici o intenție de a le scrie. A existat doar o implementare a interpretului și limba a evoluat cu ea. Este acest interpret, împreună cu testele funcționale, care oferă un standard de facto a limbii. Perl 6 este total diferit în acest sens; a început cu un caiet de sarcini [13] și mai multe proiecte care au ca scop să - l pună în aplicare [14] .

Implementare

Nici o implementare va fi definit ca fiind oficial pentru Perl 6, mai degrabă „Perl 6 este ceva care se termină cu succes suita de test oficial“.

Astăzi Rakudo Perl 6 [15] este singura implementare activă, în timp ce diverse implementări au fost dezvoltate în trecut, atât ca interpret și ca un compilator .

Rakudo Perl 6 [16] [17] abordează o serie de mașini virtuale, cum ar fi MoarVM , The Java Virtual Machine și JavaScript . MoarVM este o mașină virtuală construit special pentru Rakudo Perl 6 [18] și lanțul NQP construi. [19] Există un strat între Perl 6 și mașina virtuală numit Nu este destul de Perl 6, sau NQP, care implementează regulile Perl 6 pentru citirea Perl 6 ca un copac Parse abstract și backend-specifice compilator . O mare parte din Rakudo au fost scrise prin intermediul Perl 6 în sine sau prin intermediul subcategoriei NQP. Rakudo Cu toate acestea, nu este o implementare complet consecventă (adică scris complet cu Perl 6) și nici nu există nici un plan pentru a face acest lucru.

implementările istorice

Pugs a fost implementarea inițială pentru Perl 6 și a fost scris în Haskell . Pug a implementat mai avansate caracteristici ale Perl 6, dar a fost în stare latentă la mijlocul anului 2007. Începând cu noiembrie 2014 Pug este revizuită nu mai este activ. [20]

În 2007, un v6-MiniPerl6 ( "MP6") și re-punerea sa în aplicare v6-KindaPerl6 ( "KP6") au fost scrise ca un mijloc de compilare a Perl-STD 6.0.0 folosind Perl 5. DTS este o gramatica complet pentru Perl 6 și a fost scris în Perl 6. în teorie, orice software capabil de interpretare DTS și generarea de cod executabil este un compilator valabil pentru Perl 6. KP6 este compilat de MP6 astăzi și poate lucra cu mai multe backend. [21] [22] MP6 și KP6 nu sunt implementări complete ale Perl 6 și sunt destinate numai pentru a implementa funcționalitatea minimă necesară pentru a compila un compilator complet pentru Perl 6.

Yapsi este un compilator Perl 6 și simulator, scris în întregime în Perl 6. Deci, este nevoie de un interpret Perl 6 la locul de muncă, ca unul dintre versiuni Rakudo Star. [23]

Niecza, a fost un alt proiect major pentru a pune în aplicare Perl 6; sa axat pe optimizarea si eficienta. Acesta abordează infrastructura limbă comună . [24]

Obiecte

În Perl 6, totul este un obiect și nu există mai multe indicații. [25] Nu trebuie să ne gândim la indicii ca trimiteri la structuri de date (tablouri, ...) ca hash - uri în Perl 5, dar perspectiva schimbării prin gândire că un obiect sau pointerul să - l confuz; O idee este aceea a conceptului de indicii de grăsime, care transporta toate identitatea unui obiect cu ei, sau dacă ne interogheze (cu o metodă adecvată introspectivă) obiectul sau indicatorul său, răspunsurile sunt aceleași.

De exemplu:

Dacă luăm un $ scalar vechi, care poate fi un pointer la o matrice sau un element al matrice, în timp ce în Perl 5 trebuie să distingem cele două posibilități, în Perl 6 acest lucru nu este necesar, iar alocarea este validă.

 Perl 5: @new = (ref $ veche eq 'ARRAY')? @ $ Vechi: ($ vechi);
 Perl 6: @new = @ $ vechi;

Corolar: care trece prin argumente de referință sau de valoare? Această distincție tipic de limbi ca „C“ pierde acum sens: sub capota va fi întotdeauna prin referință, singura cale de a trece o întreagă structură de date cu un singur parametru. Pentru programator, prin atributul rw putem permite efecte secundare asupra obiectului, care, în mod implicit, este read-only.

Exemplu:

 Perl 5: sub foo {...}; # Decl.
 Perl 5: foo (\ $ bar); # apel
 Perl 6: sub foo ($ bar este rw); # decl.
 Perl 6: foo ($ bar); # apel

Formulare

Modulele sunt porțiuni de cod pregătite pentru a fi reutilizate. Din moment ce acestea au fost introduse în Perl 5 au permis stabilizarea miezului limbii și, în același timp, să permită o nouă flexibilitate.

De asemenea, în Perl 6 module sunt prezente. Caietul de sarcini Perl 6 impune ca modulele să fie identificate după nume, versiune și autor. [26] Este posibil să se încarce doar o versiune specifică a unui modul, sau chiar două module cu același nume , dar care diferă în versiunea sau autor. Pentru comoditate și confort, este permis aliasing cu nume scurte.

CPAN , sistemul de distribuție Perl 5 modul, nu este încă disponibil pentru Perl 6. Se folosește prototipul unui nou sistem. [27]

Notă

  1. ^ Despre Perl , la perl.org. Adus la 20 aprilie 2013 .
    ««Perl «este o familie de limbi,» Perl 6»face parte din familie, dar este o limbă separată cu propriul său grup de dezvoltatori. Existența sa nu are un impact semnificativ asupra dezvoltării
    în continuare a Perl 5. " .
  2. ^ Fundația Perl , pe perlfoundation.org (arhivate din original la 30 noiembrie, 2005).
    „Echipa Perl6 va încerca să obțină o versiune
    de dezvoltare a versiunii 1.0 disponibile pentru ziua de naștere a lui Larry , în septembrie și o nouă versiune 1.0 de Crăciun. Deci , se pare ca de Crăciun 2015 a fost de Crăciun care ne așteptam. " .
  3. ^ Crăciunul este aici. , Pe Perl 6 Advent Calendar. Adus pe 27 decembrie 2015 .
  4. ^ Patrick Michaud, anunță: Rakudo Star - o, utilizabilă, "adoptatorul timpurie" distribuție utilă Perl 6 , pe rakudo.org, 29 iulie 2010. Adus de 08 februarie 2015 (arhivate din original la 19 decembrie, 2014).
  5. ^ Federico Biancuzzi și Shane Warden, masterminds de programare: Conversații cu creatorii majore Limbaje de programare, ISBN 978-0-596-51517-1 .
  6. ^ Kline, Joe, Raport al Conferinței Perl , perl.com, 21 august 2000.
  7. ^ Perete, Larry , stat de ceapa 2000 , pe perl.com, O'Reilly Network 2000.
  8. ^ Fundația Perl, Despre Perl 6 RFCs , la dev.perl.org, 2000.
  9. ^ Larry Wall și Perl 6 designeri, Perl 6 Documente de design , pe design.perl6.org 2015.
  10. ^ Fundația Perl, Exegeza , pe dev.perl.org, 2001.
  11. ^ Fundația Perl, Perl Dezvoltare: liste de adrese , la dev.perl.org, 2002.
  12. ^ Ioab Jackson, Perl indicii creator la iminenta lansare a mult-așteptata Perl 6 , la infoworld.com, IDG News Service, 23 iulie 2010. Adus de 08 februarie 2015.
  13. ^ Perl 6 Specification , la perl6.org, Perl 6 Project. Adus pe 27 ianuarie 2011 .
  14. ^ Perl 6 compilatoare , la perl6.org, Perl 6 Project. Adus pe 27 ianuarie 2011 .
  15. ^ Rakudo Perl , la rakudo.org. Adus la 30 iulie 2017 .
  16. ^ Rakudo / rakudo - GitHub , la github.com. Adus pe 21 septembrie 2013 .
  17. ^ Michaud, Patrick, Compilatorul cunoscut anterior ca 'perl6' , Pe use.perl.org, 16 ianuarie 2008 (arhivate de original pe 18 februarie 2012).
  18. ^ Jonathan Worthington, MoarVM: O mașină virtuală pentru NQP și Rakudo , pe 6guts. Adus la 24 iulie 2013 .
  19. ^ MoarVM , pe moarvm.com, echipa MoarVM. Adus la 8 iulie 2017 .
  20. ^ Comparare Perl 6 compilatoare , la perl6.org. Accesat 27 iulie 2017 (arhivate din original la 11 august 2017).
  21. ^ Perete, Larry, Perl 6 STD , github.com 2007.
  22. ^ MP6 / KP6 FAQ , la darcs.pugscode.org, Perl 6 echipa de dezvoltare, 2006.
  23. ^ Yapsi README , pe github.com, 2011.
  24. ^ Stefan O'Rear, Niecza README.pod , github.com, 29 noiembrie 2011. Adus de 12 ianuarie 2012.
  25. ^ Diferențe între Perl 5 și Perl 6 , la design.perl6.org, design. Perl.org. Accesat 30 iulie 2017 (arhivate original la 30 iulie 2017).
  26. ^ Perete, Larry, Sinopsis 11: Module , de design.perl6.org, 2004. Adus de 29 iulie 2017 (arhivate din original la 13 august 2017).
  27. ^ Perl 6 Module Director , la modules.perl6.org. Adus pe 21 septembrie 2013 .

linkuri externe