funkcionálně.cz

Přední český blog o funkcionálním programování, kde se o funkcionálním programování nepíše
««« »»»

Out of the Tar Pit

3. 12. 2012 — k47

Pokud jste ještě ne­četli paper Out of the Tar Pit, měli byste tento ne­do­sta­tek co nej­rych­leji na­pra­vit. Out of the Tarpit se věnuje zdro­jům kom­plex­nosti pro­gramů a na­vr­huje ně­ko­lik po­měrně ra­di­kál­ních způ­sobů, jak se této kom­plex­nosti zbavit.

Právě tento paper in­spi­ro­val Riche Hic­keyho při návrhu pro­gra­mo­va­cího jazyka Clo­jure a da­ta­báze Da­to­mic. Můžete se pře­svěd­čit sami, že po­sel­ství paperu je jasně cítit v každé z jeho skvě­lých před­ná­šek: Simple made easy, Value of Values, The Da­ta­base as a Value.

Out of the Tar Pit se za­kládá na po­znatku, že hlavní zdroj kom­ple­xity pro­gramů je stavkon­t­rola (state and con­t­rol). Stavem je myšlen mě­ni­telný (mu­table) stav o který se musíme ex­pli­citně starat ite­ra­tiv­ními al­go­ritmy. Paper roz­li­šuje mezi ne­zbyt­ným a ve­d­lej­ším (es­sen­tial a acci­den­tal) stavem a z toho vy­plý­va­jící ne­zbyt­nou a ve­d­lejší kom­ple­xi­tou. Ne­zbytný stav a kom­ple­xita je to, co zajímá uži­va­tele soft­ware. Všechno ostatní jsou jenom ve­d­lejší a ne­dů­le­žité im­ple­men­tační de­taily. Kom­ple­xitu (a tím pádem i délku a cenu vývoje a počet chyb v pro­gra­mech) by dras­ticky zre­du­ko­valo po­u­žití funk­ci­o­nál­ního a lo­gic­kého pro­gra­mo­vání, re­lač­ního modelu dat a de­kla­ra­tiv­ních con­stra­ints, která vy­me­zují kon­zis­tentní stav apli­kace. Všechna zá­sadní logika pro­gramu by byla vy­já­d­řena de­kla­ra­tivně pomocí funk­ci­o­nálně re­lač­ního pro­gra­mo­vání (FRP).

Další zá­sadní myš­len­kou je, že snaha zre­du­ko­vat kom­ple­xitu by měla být nad­řa­zena všemu ostat­nímu. Pokud je po­třeba do pro­gramu zavést kom­ple­xitu ne­zá­sad­ních částí (na­pří­klad kvůli výkonu), je od sebe třeba zá­sadní a ne­zá­sadní části jasně od­dě­lit tak, že i když budou všechny ne­zá­sadní části od­stra­něny, pro­gram bude stále ko­rektně pra­co­vat – cho­vání je plně spe­ci­fi­ko­váno v zá­sadní lo­gické části.

V závěru paperu autoři uka­zují jak by mohla vy­pa­dat FRP apli­kace zba­vená vší kom­ple­xity. Nej­prve de­fi­nují bázové relace, od­vo­zené relace, všechny con­stra­ints (klíče, cizí klíče, pod­mínky kon­zis­tence vy­já­řené re­lač­ními výrazy), pak (opet de­kla­ra­tivně) při­dají ně­ko­lik vo­dí­tek, jak má systém na­klá­dat s re­la­cemi aby pra­co­val efek­tivně, jak a které uklá­dat a které od­vo­zené relace ma­te­ri­a­li­zo­vat a to všechno bez toho, aby kde­koli pro­gra­mo­vali jak se má co dělat.

@kaja47, kaja47@k47.cz, deadbeef.k47.cz, starší články