Difference between revisions of "Ro/Haskell"

From HaskellWiki
Jump to navigation Jump to search
Line 2: Line 2:
   
 
<center>
 
<center>
  +
Haskell este un limbaj de uz general, din categoria limbajelor functionale pure (fara instructiuni imperative sau producatoare de efecte laterale). Foloseste Lazy Evaluation.Beneficiaza de un sistem de tipuri revolutionar, cu tipuri polimorfice si clase de tipuri. Permite programarea cu clase si instante de clase definite utilizator. Are o sintaxa bidimensionala (bazata pe notiunea de Layout). Sintaxa bidimensionala face programele mult mai clare decat echivalentele lor in LISP (netipizat si cu multe paranteze: LISP = Limbajul InSuportabilelor Paranteze) sau cele in Scheme or ML. Alte plusuri sunt tipizarea stricta, existenta monadelor si a do-notatiei (o scriere cvasi imperativa posibila intr-un limbaj functional pur) precum si existenta listelor infinite si a "multimilor ordonate" definite descriptiv, numite in manualele de Haskell (in limba engleza) "list comprehensions".
Haskell este un limbaj de uz general, din categoria limbajelor functionale pure (fara instructiuni imperative sau producatoare de efecte laterale).
 
Beneficiaza de un sistem de tipuri revolutionar, cu tipuri polimorfice. Permite programarea cu clase si instante de clase.
 
   
 
Productivitatea programarii in Haskell este net superioara altor limbaje, un algoritm Quicksort scriindu-se in doar 3-4 linii de program.
 
Productivitatea programarii in Haskell este net superioara altor limbaje, un algoritm Quicksort scriindu-se in doar 3-4 linii de program.
Line 19: Line 18:
 
O prezentare a limbajului Haskell din punctul de vedere al unui specialist in Limbaje Formale.<br> Un capitol dintr-o viitoare carte de Dan Popa. (166643 bytes) [http://www.haskell.org/sitewiki/images/9/97/De_ce_Haskell.pdf - download "De ce Haskell ?"]
 
O prezentare a limbajului Haskell din punctul de vedere al unui specialist in Limbaje Formale.<br> Un capitol dintr-o viitoare carte de Dan Popa. (166643 bytes) [http://www.haskell.org/sitewiki/images/9/97/De_ce_Haskell.pdf - download "De ce Haskell ?"]
 
* Alte capitole de manual - in pregatire
 
* Alte capitole de manual - in pregatire
  +
* Utilizarea ca instrument de realizare a interpretoarelor: Datorita modului atat de simplu in care se pot defini in Haskell elementele unui translator limbajul Haskell se recomanda de la sine ca un DSL (domain specific language) pentru realizarea interpretoarelor si compilatoarelor. Astfel, in Haskell se definesc foarte usor:
* Utilizarea ca instrument de realizare a interpretoarelor - in pregatire
 
  +
** Textul de intrare vazut ca string si simultan ca lista de caractere (in Haskell tipul String avand ambele semnificatii)
* [[ Intrebarile incepatorului ]]
 
  +
** Atomii lexicali sunt recunoscuti de parsere specializate, deja existente in biblioteci cum sunt ParseLib si Parsec (sau altele ...)
  +
** Gramaticile, inclusiv cele ambigue sunt imediat transcrise (in asa-zisa do-notatie) sub forma unor secvente de parsere corespunzatori neterminalelor gramaticii. Alternativa "|" beneficiaza de un operator special (+++ in ParseLib) Suportul teoretic, structura algebrica ce permite combinarea efectelor parserelor este Monada Parserelor.
  +
** Arborii sintactici, inclusiv cei polimorfici, se transcriu imediat in Haskell folosind declaratia "data" (destinata tipurilor utilizator). Descrierea structurilor de date pentru reprezentarea arborilor sintactici se poate face pe unul - doua -trei randuri. Deoarece in Haskell la o declaratie "data" se poate adauga "deriving Show", noul tip de date va fi implicit inzestrat cu functie de afisare, pe care programatorul nu mai este obligat s-o scrie el. Simpla modificare a declaratiei "data" a arborilor modifica automat (transparent) functia de afisare. Ideal pentru realizarea prototipurilor.
  +
** Semantica se poate transcrie in do-notatie, dar folosind de obicei o alta monada decat monada parserelor. Draft-ul unui capitol de carte despre acest subiect il veti putea descarca de aici. Nu sunt necesari operatori specializati pentru lifting-ul functiilor uzuale in universul monadei, asa cum se proceda pe vremea cand Espinosa scria la teza sa de doctorat, celebra teza despre "Semantic Lego".
  +
** Prelucrarile recursive de arbori atat de necesare la parcurgerea arborilor, la listarea unui arbore sintactic (pretty printing) se scriu imediat deoarece Haskell permite definirea de functii recursive, ca succesiuni de ecuatii.
 
* [[ Intrebarile incepatorului ]]
   
 
== Interpretoare si compilatoare disponibile ==
 
== Interpretoare si compilatoare disponibile ==
Line 28: Line 33:
   
 
==Lucrari in limba romana==
 
==Lucrari in limba romana==
* Descarcati slide-urile lucrarii [http://www.haskell.org/sitewiki/images/5/54/Building_an_interpreter.pdf "Cum sa construiesti un interpretor adaptabil intr-o singura zi!" de Dan Popa], de la Universitatea Bacau care descrie pas cu pas cum se poate<br> construi un interpretor pentru un mic while-language in Haskell.Autorul a <br> folosit in experimente versiunea Hugs din distributia Mandriva Linux 10.0. <br> Lucrarea a fost prezentata la Conferinta ICMI 45. [http://www.haskell.org/sitewiki/images/5/54/Building_an_interpreter.pdf Descarcati slide-urile lucrarii in format pdf in engleza cu comentarii romanesti]
+
* Descarcati slide-urile lucrarii [http://www.haskell.org/sitewiki/images/5/54/Building_an_interpreter.pdf "Cum sa construiesti un interpretor adaptabil intr-o singura zi!" de Dan Popa], de la Universitatea Bacau care descrie pas cu pas cum se poate<br> construi un interpretor pentru un mic while-language in Haskell.Autorul a <br> folosit in experimente versiunea Hugs din distributia Mandriva Linux 10.0. <br> Lucrarea a fost prezentata la Conferinta ICMI 45. [http://www.haskell.org/sitewiki/images/5/54/Building_an_interpreter.pdf Slide-urile lucrarii sunt in format pdf cu titluri in engleza dar au comentariile in limba romana.]
   
 
*Cum puteti scrie un mic asamblor adaptabil in Haskell 98:[http://www.haskell.org/sitewiki/images/2/2f/Cap8-nou-Assembler.pdf Popa, Dan; An assembler in a nutshell ] - Proceedings of the 30th annual Congress of The American-Romanian <br> Academy of Art and Sciences (ARA), Academia de Studii Economice din Moldova,<br> 2005, p. 196-198 x 2 coloane, ISBN 9975-75-313-2 Versiunea in limba romana a lucrarii, in format de capitol de carte. Bibliografia nu este inclusa dar notiunile <br> folosite sunt notiuni fundamentale de teoria categoriilor care pot fi gasite <br> in orice carte de Teoria Categoriilor.
 
*Cum puteti scrie un mic asamblor adaptabil in Haskell 98:[http://www.haskell.org/sitewiki/images/2/2f/Cap8-nou-Assembler.pdf Popa, Dan; An assembler in a nutshell ] - Proceedings of the 30th annual Congress of The American-Romanian <br> Academy of Art and Sciences (ARA), Academia de Studii Economice din Moldova,<br> 2005, p. 196-198 x 2 coloane, ISBN 9975-75-313-2 Versiunea in limba romana a lucrarii, in format de capitol de carte. Bibliografia nu este inclusa dar notiunile <br> folosite sunt notiuni fundamentale de teoria categoriilor care pot fi gasite <br> in orice carte de Teoria Categoriilor.
Line 39: Line 44:
 
 
 
* O introducere agreabila in Haskell traducerea celebrului "A Gentle Introduction In Haskell - o lucrare clasica pe care incercam <br>sa v-o oferim in traducere. <br>
 
* O introducere agreabila in Haskell traducerea celebrului "A Gentle Introduction In Haskell - o lucrare clasica pe care incercam <br>sa v-o oferim in traducere. <br>
NOU : Datorita felului cum se puncteaza asemenea <br> activitati la Universitatea Bacau, impartind punctajul la numarul autorilor si <br>netinind cont de faptul ca versiunea romaneasca a unei carti libere trebuie <br>integral rescrisa probabil acest proiect va fi amanat ca fiind neprioritar. <br>
+
NOU : Datorita felului cum se puncteaza asemenea <br> activitati la Universitatea Bacau, impartind punctajul la numarul autorilor si <br> netinind cont de valoarea cartii sau de faptul ca versiunea romaneasca a unei carti libere trebuie <br> integral rescrisa probabil acest proiect va fi amanat ca fiind neprioritar. <br> Pacat :(
 
   
 
</center>
 
</center>

Revision as of 20:16, 11 December 2006

Haskell - Un limbaj functional pur

Haskell este un limbaj de uz general, din categoria limbajelor functionale pure (fara instructiuni imperative sau producatoare de efecte laterale). Foloseste Lazy Evaluation.Beneficiaza de un sistem de tipuri revolutionar, cu tipuri polimorfice si clase de tipuri. Permite programarea cu clase si instante de clase definite utilizator. Are o sintaxa bidimensionala (bazata pe notiunea de Layout). Sintaxa bidimensionala face programele mult mai clare decat echivalentele lor in LISP (netipizat si cu multe paranteze: LISP = Limbajul InSuportabilelor Paranteze) sau cele in Scheme or ML. Alte plusuri sunt tipizarea stricta, existenta monadelor si a do-notatiei (o scriere cvasi imperativa posibila intr-un limbaj functional pur) precum si existenta listelor infinite si a "multimilor ordonate" definite descriptiv, numite in manualele de Haskell (in limba engleza) "list comprehensions".

Productivitatea programarii in Haskell este net superioara altor limbaje, un algoritm Quicksort scriindu-se in doar 3-4 linii de program.

Exista o multime de compilatoare si interpretoare pentru Haskell si sunt disponibile gratuit: Hugs (interpretor), GHC (compilator), Hellium (mediu de instruire) si altele.

Despre Haskell dorim sa prezentam

O prezentare a limbajului Haskell din punctul de vedere al unui specialist in Limbaje Formale.
Un capitol dintr-o viitoare carte de Dan Popa. (166643 bytes) - download "De ce Haskell ?"

  • Alte capitole de manual - in pregatire
  • Utilizarea ca instrument de realizare a interpretoarelor: Datorita modului atat de simplu in care se pot defini in Haskell elementele unui translator limbajul Haskell se recomanda de la sine ca un DSL (domain specific language) pentru realizarea interpretoarelor si compilatoarelor. Astfel, in Haskell se definesc foarte usor:
    • Textul de intrare vazut ca string si simultan ca lista de caractere (in Haskell tipul String avand ambele semnificatii)
    • Atomii lexicali sunt recunoscuti de parsere specializate, deja existente in biblioteci cum sunt ParseLib si Parsec (sau altele ...)
    • Gramaticile, inclusiv cele ambigue sunt imediat transcrise (in asa-zisa do-notatie) sub forma unor secvente de parsere corespunzatori neterminalelor gramaticii. Alternativa "|" beneficiaza de un operator special (+++ in ParseLib) Suportul teoretic, structura algebrica ce permite combinarea efectelor parserelor este Monada Parserelor.
    • Arborii sintactici, inclusiv cei polimorfici, se transcriu imediat in Haskell folosind declaratia "data" (destinata tipurilor utilizator). Descrierea structurilor de date pentru reprezentarea arborilor sintactici se poate face pe unul - doua -trei randuri. Deoarece in Haskell la o declaratie "data" se poate adauga "deriving Show", noul tip de date va fi implicit inzestrat cu functie de afisare, pe care programatorul nu mai este obligat s-o scrie el. Simpla modificare a declaratiei "data" a arborilor modifica automat (transparent) functia de afisare. Ideal pentru realizarea prototipurilor.
    • Semantica se poate transcrie in do-notatie, dar folosind de obicei o alta monada decat monada parserelor. Draft-ul unui capitol de carte despre acest subiect il veti putea descarca de aici. Nu sunt necesari operatori specializati pentru lifting-ul functiilor uzuale in universul monadei, asa cum se proceda pe vremea cand Espinosa scria la teza sa de doctorat, celebra teza despre "Semantic Lego".
    • Prelucrarile recursive de arbori atat de necesare la parcurgerea arborilor, la listarea unui arbore sintactic (pretty printing) se scriu imediat deoarece Haskell permite definirea de functii recursive, ca succesiuni de ecuatii.
  • Intrebarile incepatorului

Interpretoare si compilatoare disponibile

Lucrari in limba romana

  • Cum puteti scrie un mic asamblor adaptabil in Haskell 98:Popa, Dan; An assembler in a nutshell - Proceedings of the 30th annual Congress of The American-Romanian
    Academy of Art and Sciences (ARA), Academia de Studii Economice din Moldova,
    2005, p. 196-198 x 2 coloane, ISBN 9975-75-313-2 Versiunea in limba romana a lucrarii, in format de capitol de carte. Bibliografia nu este inclusa dar notiunile
    folosite sunt notiuni fundamentale de teoria categoriilor care pot fi gasite
    in orice carte de Teoria Categoriilor.


Carti in pregatire

  • Translatoare scrise in Haskell 98 pentru securizarea sistemelor on-line
   DRAFT-ul unui manual despre Haskell si folosirea lui la 
scrierea unor translatoare utile in securizarea sistemelor on-line. Util
deocamdata ca manual de initiere in Haskell desi unele capitole necesare (monade , I/O etc)
nu sunt incluse. Erata si alte sugestii de imbunatatire...
  • O introducere agreabila in Haskell traducerea celebrului "A Gentle Introduction In Haskell - o lucrare clasica pe care incercam
    sa v-o oferim in traducere.

NOU : Datorita felului cum se puncteaza asemenea
activitati la Universitatea Bacau, impartind punctajul la numarul autorilor si
netinind cont de valoarea cartii sau de faptul ca versiunea romaneasca a unei carti libere trebuie
integral rescrisa probabil acest proiect va fi amanat ca fiind neprioritar.
Pacat :(