Care este justificarea teoretica pentru faptul ca programarea functionala monadica asigura modularitatea?

From HaskellWiki
Revision as of 15:18, 6 February 2021 by Gwern (talk | contribs) (Reverted edits by Tomjaguarpaw (talk) to last revision by Ha$kell)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Care este justificarea teoretica pentru faptul ca programarea functionala monadica asigura modularitatea?

Exista o serie mai mare de raspunsuri la aceasta intrebare dupa cum exista mai multe feluri de modularitate:

Modularitate:

  • Din punct de vedere ale aspectelor limbajului.(Putem include in monada care sta la baza semantici unui limbaj - cum a aratat Philip Wadler - diverse aspecte, stari, string de iesire etc.) Construirea unor monade cu diferite proprietati se face din combinarea unor morfisme categoriale evidentiate de E.Moggi si ulterior implementate si cunoscute ca "Monad Transformers" - transformatorii de monade. Proiecte actuale cum este DSL-ul didactic Rodin

beneficiaza de monada construita din acesti "transformatori".

  • Exista o proprietate numita Separabilitate a semanticilor modulare monadice care ne asigura ca putem modifica monada de la baza semantici unui limbaj fara sa schimbam specificatiile semantice ale instrctiunilor care nu folosesc evident aspectul nou introdus.

Pe scurt: Descrierea monadica a semanticii unui limbaj separa descrierea succesiunii de calcule de calculele in sine. Se spune ca se separa descrierea semantcii limbajului de denotatia sa. Specialistii (de adaugat la bibliografie) care au studiat semantici denotationale stiu ca o schimbare a structurilor de date cu care opereaza semantica - ceruta de adaugarea unor noi instructiuni - punea in pericol intrega semantica a altora care trebuia rescrisa. Semanticile monadice nu sufera de acest dezavantaj.

  • Atunci cand semanticile modulare monadice sunt definite peste Arbori modulari iar sintaxa este implementata folosind parserele modulare din monada parserelor apare o noua posibilitate de modularizare care consta intr-o impartire pe orizontala a interpretorului in module care contin:
    • parserul instructiunii
    • descrierea partii din arborele sintactic care e produsa de parser
    • semantica acelei instructiuni

O solutie partiala a acestei probleme, a fost incercata de un student / masterand (?) din fosta Yugoslavie. Lucrarea acestuia contine insa o diagrama generala a interpretorului decupat in randuri si coloane de module.

  • Haskell este el insusi un limbaj modular care permite impartirea unui program in module. (banal)

Bibliografia: In curs de elaborare.

Autori care s-au ocupat: Philip Wadler Eugenio Mogggi Y.K. (?) - Yugoslavia (?). .... un doctorand din Germania ... lista este lunga.