Кіріспе

Компьютерлік бағдарламалардың есептеу әсерлерін сипаттайтын жүйе. Есептеуде эффект жүйесі – компьютерлік бағдарламалардың, мысалы, жанама әсерлер сияқты есептеу әсерлерін сипаттайтын формалды жүйе. Эффект жүйесі бағдарламаның мүмкін болатын әсерлерін компиляция уақытында тексеру үшін қолданылуы мүмкін. Эффект жүйесі тип ұғымын "эффект" компонентімен кеңейтеді, ол эффект түрін және аймақты қамтиды. Эффект түрі не істеліп жатқанын сипаттайды, ал аймақ немен (параметрлермен) істеліп жатқанын сипаттайды. Эффект жүйесі әдетте типтік жүйенің кеңейтімі болып табылады. Мұндай жағдайда кейде "тип және эффект жүйесі" термині қолданылады. Көбінесе, мәннің типі оның эффектымен бірге тип! эффект ретінде көрсетіледі, онда тип компоненті де, эффект компоненті де белгілі бір аймақтарды көрсетеді (мысалы, өзгертілетін жад жасушасының типі жад аймағының атауымен параметрленеді, онда жасуша орналасқан). "Алгебралық эффект" термині типтік жүйеден туындайды. Эффект жүйелері кейбір ішкі жағынан таза емес анықтамалардың сыртқы тазалығын дәлелдеу үшін қолданылуы мүмкін: мысалы, егер функция жад аймағын бөліп, өзгертетін болса, бірақ функцияның типі аймақты көрсетпесе, онда тиісті эффект функцияның эффектынен жойылуы мүмкін.

Негізгі ерекшелігі

Koka – алгебралық эффекттерді негізгі мүмкіндік ретінде ұсынатын статикалық типтеулі функционалдық бағдарламалау тілі. Eff – алгебралық эффекттерді басқарушылар арқылы қолдайтын статикалық типтеулі функционалдық бағдарламалау тілі. Unison – типтік жүйенің құрамдас бөлігі ретінде алгебралық эффекттерді (тілде "қабілеттер" деп аталады) ұсынатын статикалық типтеулі функционалдық бағдарламалау тілі. Effekt – эффекттер және полиморфты эффекттерге бағытталған зерттеу тілі.

Толық қолдау

Haskell – эффекттерді кодтауға мүмкіндік беретін бірнеше пакеттері бар, статикалық түрде тексерілетін функционалдық бағдарламалау тілі. Дегенмен, Haskell көбінесе монадтарға бағытталған. OCaml 5.0 эффекттерді өңдеуге арналған эксперименталды қарапайым құралдарды қолдауды енгізді, ал болашақта жоғары деңгейдегі синтаксис енгізу жоспарлануда.

Ішінара қолдау және прототиптер

Scala 3.1 – CanThrow мүмкіндігі түріндегі ерекшеліктермен шектелген эксперименталды әсерлерді қолдайтын, статикалық типтелген, функционалды және объектіге бағытталған бағдарламалау тілі. Java – статикалық типтелген, объектіге бағытталған бағдарламалау тілі; оның тексерілген ерекшеліктері – эффект жүйесінің салыстырмалы түрде шектеулі мысалы. Тек бір эффект түрі – лақтыру (throws) қолжетімді, мәнмен қайта жалғастыру мүмкіндігі жоқ, және оларды функциялармен (тек әдістермен) пайдалануға болмайды, егер функция арнайы @FunctionalInterface интерфейсін іске асырмаса. JavaScript – динамикалық типтелген тіл, алгебралық эффекттерді іске асыратын ұсынысы бар.