Hatásrendszer - Effect system

A számítás során az effektusrendszer egy hivatalos rendszer, amely leírja a számítógépes programok számítási hatásait, például a mellékhatásokat . Hatásrendszer használható a program lehetséges hatásainak fordítási időbeli ellenőrzésére.

Az effektusrendszer kiterjeszti a típus fogalmát, hogy "effekt" komponens legyen, amely tartalmaz egy effekt fajtát és egy régiót . A hatásfajta leírja, hogy mi történik, és a régió leírja , hogy milyen paraméterekkel történik.

Az effektus rendszer általában egy típusú rendszer kiterjesztése . Ebben az esetben néha a " típus és hatás rendszer " kifejezést használják. Gyakran egy érték típusát a hatásával együtt típusként jelöljük ! effektus , ahol a típuskomponens és az effektuskomponens is megemlít bizonyos régiókat (például egy mutálható memóriacella típusát annak a memóriaterületnek a címkéje paraméterezi, amelyben a cella található). Az " algebrai hatás " kifejezések a típusrendszerből következnek.

Hatásrendszerek használhatók bizonyos belsőleg szennyezett definíciók külső tisztaságának bizonyítására : például ha egy függvény belsőleg lefoglal és módosít egy memóriaterületet, de a függvény típusa nem említi a régiót, akkor a megfelelő hatás kitörölhető a függvény hatása.

Példák

Néhány példa a hatásrendszerekkel leírható viselkedésre:

  • Memória olvasása, írása vagy lefoglalása: az effektus típusa olvasható , írható , lefoglalható vagy szabad , és a régió annak a programnak a pontja, ahol a kiosztást végrehajtották (azaz minden programhelynek, ahol a kiosztást végzik, egyedi címke és régió van az információ statikusan terjed az adatfolyam mentén). A memóriával dolgozó legtöbb funkció valójában polimorf lesz a régióváltozóban: például annak a függvénynek a típusa lesz, amely két helyet cserél a memóriában forall r1 r2, unit ! {read r1, read r2, write r1, write r2}.
  • Erőforrásokkal, például fájlokkal való munka: például az effektus típusa lehet nyitott , olvasható és bezárható , és ismét a régió a program azon pontja, ahol az erőforrást megnyitják.
  • Vezérlésátvitel folytatásokkal és hosszú ugrásokkal: az effektus fajtája lehet goto (azaz a kódrész ugrást hajthat végre) és comefrom (azaz a kódrész egy ugrás célpontja lehet), a régió pedig a program, ahonnan vagy ahova az ugrás elvégezhető.

Programozói szempontból az effektusok hasznosak, mivel lehetővé teszik az egyes műveletek végrehajtásának ( hogyan ) elválasztását a végrehajtandó műveletek specifikációjától. Például egy ask név effektus olvasható a konzolról, beugrik egy ablakba, vagy csak visszaad egy alapértelmezett értéket. A szabályozási folyamat leírható a hozam (abban az értelemben , hogy a végrehajtás folytatódik) és a dobás keveréke (mivel egy kezeletlen hatás továbbterjed, amíg le nem kezelik).

Végrehajtások

  • A Haskell több olyan csomaggal rendelkezik, amelyek lehetővé teszik az effektusok kódolását.
  • A Java ellenőrzött kivételei példák egy effektus rendszerre: az effektus típusa dobások , a régió pedig a dobott kivétel típusa.
  • A Koka egy effektet szem előtt tartó programozási nyelv.
  • Az ECMAScriptnek van javaslata (és Bábel-passzja), amely algebrai hatásokat valósít meg.

Hivatkozások

Tankönyvfejezetek

  • Hankin, Chris; Nielson, Flemming; Nielson, Hanne Riis (1999). A programelemzés alapelvei . Berlin: Springer. ISBN 978-3-540-65410-0.
  • Gifford, David; Turbak, Franklyn A .; Sheldon, Mark A. (2008). "16". Tervezési koncepciók a programozási nyelvekben . Cambridge, Massachusetts: MIT Press. ISBN 978-0-262-20175-9.

Áttekintő dokumentumok

További irodalom

  1. ^ Abramov, Dan. "Algebrai hatások a többiek számára" . túlreagálta.io .
  2. ^ Vera, Josh (2020. április 18.). "joshvera / freemonad-benchmark" . GitHub . A különböző szabad monád megvalósítások teljesítményét összehasonlító benchmark.
  3. ^ "A Koka kézikönyv" . koka-lang.github.io .
  4. ^ Macabeus, Bruno (2020. szeptember 16.). "macabeus / js-javaslat-algebrai hatások:" Legyen algebrai hatás a JS-ben " . GitHub .