Pseudoconstructors over monadic values

From HaskellWiki
Revision as of 11:25, 20 July 2009 by Ha$kell (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

. Introducere

Uzual, constructia DSL-urilor - mici limbaje de programare specializate - se face pornind de la o semantica bazata pe sintaxa. Sintaxa abstracta este de ajuns, nu e nevoie de o sintaxa concreta.

Ori sintaxa abstracta este strans legata de arborii sintactici abstracti si de arborii operatoriali.

In Haskell, de obicei, acesti arbori sunt declarati folosind: data.

Dezavantajul este ca aceste declaratii data nu sunt modulare. Efect: este greu sa implementam limbaje extensibile din cauza dificultatii de a extinde , printre altele, tipul de date al arborilor din reprezentarea intermediara.

Solutii diverse au fost, de-a lungul timpului, propuse:

- Structuri compuse cu ajutorul tipului MayBe Referinte:... se vor adauga

- Structuri de date compuse cu operatori din teoria categoriilor. Referinte: se vor adauga

- Turnuri de date utilizate impreuna cu pseudomonade Referinte: ... se vor adauga

- Extinderea limbajului Haskell cu un nou fel de declaratii de arbori. Asa numitele Open Data Types - Tipuri de date deschise Referinte: ... se vor adauga

Toate aveau dezavantaje cum ar fi: - complexitatea declaratiilor structurilor de date mai mare ca la arbori (ca lungime a programului) - operatii si operatori care presupuneau cunostinte in plus - dificultati de traducere de la arbori uzuali la noile date (nu era evidenta transformarea) - deci si dificultati de adaptare a software-ului existent

. Noutatea: Pseudoconstructorii sunt functii

Toate abordarile anterioare propuneau structuri de date omitand cateva aspecte importante: - Haskell este un limbaj FUNCTIONAL deci putem opera cu functii - Constructorii tipurilor data sunt similari unor functii - au si semnatura / tip - Haskell fiind limbaj cu LAZY-EVALUATION - un set de apeluri de functii succesive (sau compuse explicit) va ramane in acea forma - arborescenta - sau intr-o forma izomorfa pina va fi absoluta nevoie sa fie evaluat. Deci va fi practic un arbore stocat.

Concluzia: se pot inlocui CONSTRUCTORII de date ai declaratiilor data cu un simplu set de functii. Concluzia a II-a: Atunci cand se implementeaza semantici monadice modulare aceste functii vor manipula valori monadice.

. Sintaxa

Pseudoconstructorii se folosesc ca si constructorii. Singura diferenta SINTACTICA este faptul ca fiind functii se vor scrie cu minuscula in loc de M'ajuscula.

. Transformarea Constrcutorilor in Pseudoconstructori

Simplu: Scrieti minuscula in loc de majuscula. Atat. La semantici monadice: Scrieti minuscula in loc de majuscula in instructiunile return. Atat.

Si, fireste nu uitati sa declarati functiile respective.

. Avantaje

Deoarece au sintaxa cvasi-similara cu a Constructorilor rezulta: - complexitatea declaratiilor in aplicatie a structurilor de date ESTE EXACT ca la arbori (ca lungime a programului). - alte cunostinte in plus decat notiunea de fiunctie nu se cer - Transformarea de la arbori uzuali la noile date / structuri este banala, vedeti mai sus, se schimba o litera. - lipsesc dificultatile de adaptare a software-ului existent

Detalii in lucrarea:


Dan Popa Pagina creata pe 20 iulie 2009 dupa o lucrare din ....


Pagina in dezvoltare... inca.