Кіріспе
Компьютерлік бағдарламалардың есептеу әсерлерін сипаттайтын жүйе. Есептеуде эффект жүйесі – компьютерлік бағдарламалардың, мысалы, жанама әсерлер сияқты есептеу әсерлерін сипаттайтын формалды жүйе. Эффект жүйесі бағдарламаның мүмкін болатын әсерлерін компиляция уақытында тексеру үшін қолданылуы мүмкін. Эффект жүйесі тип ұғымын "эффект" компонентімен кеңейтеді, ол эффект түрін және аймақты қамтиды. Эффект түрі не істеліп жатқанын сипаттайды, ал аймақ немен (параметрлермен) істеліп жатқанын сипаттайды. Эффект жүйесі әдетте типтік жүйенің кеңейтімі болып табылады. Мұндай жағдайда кейде "тип және эффект жүйесі" термині қолданылады. Көбінесе, мәннің типі оның эффектымен бірге тип! эффект ретінде көрсетіледі, онда тип компоненті де, эффект компоненті де белгілі бір аймақтарды көрсетеді (мысалы, өзгертілетін жад жасушасының типі жад аймағының атауымен параметрленеді, онда жасуша орналасқан). "Алгебралық эффект" термині типтік жүйеден туындайды. Эффект жүйелері кейбір ішкі жағынан таза емес анықтамалардың сыртқы тазалығын дәлелдеу үшін қолданылуы мүмкін: мысалы, егер функция жад аймағын бөліп, өзгертетін болса, бірақ функцияның типі аймақты көрсетпесе, онда тиісті эффект функцияның эффектынен жойылуы мүмкін.
In computing, an effect system is a formal system that describes the computational effects of computer programs, such as side effects. An effect system can be used to provide a compile time check of the possible effects of the program. The effect system extends the notion of type to have an "effect" component, which comprises an effect kind and a region. The effect kind describes what is being done, and the region describes with what (parameters) it is being done. An effect system is typically an extension of a type system. The term "type and effect system" is sometimes used in this case. Often, a type of a value is denoted together with its effect as type ! effect, where both the type component and the effect component mention certain regions (for example, a type of a mutable memory cell is parameterized by the label of the memory region in which the cell resides). The term "algebraic effect" follows from the type system. Effect systems may be used to prove the external purity of certain internally impure definitions: for example, if a function internally allocates and modifies a region of memory, but the function's type does not mention the region, then the corresponding effect may be erased from the function's effect.
Негізгі ерекшелігі
Koka – алгебралық эффекттерді негізгі мүмкіндік ретінде ұсынатын статикалық типтеулі функционалдық бағдарламалау тілі. Eff – алгебралық эффекттерді басқарушылар арқылы қолдайтын статикалық типтеулі функционалдық бағдарламалау тілі. Unison – типтік жүйенің құрамдас бөлігі ретінде алгебралық эффекттерді (тілде "қабілеттер" деп аталады) ұсынатын статикалық типтеулі функционалдық бағдарламалау тілі. Effekt – эффекттер және полиморфты эффекттерге бағытталған зерттеу тілі.
Толық қолдау
Haskell – эффекттерді кодтауға мүмкіндік беретін бірнеше пакеттері бар, статикалық түрде тексерілетін функционалдық бағдарламалау тілі. Дегенмен, Haskell көбінесе монадтарға бағытталған. OCaml 5.0 эффекттерді өңдеуге арналған эксперименталды қарапайым құралдарды қолдауды енгізді, ал болашақта жоғары деңгейдегі синтаксис енгізу жоспарлануда.
Ішінара қолдау және прототиптер
Scala 3.1 – CanThrow мүмкіндігі түріндегі ерекшеліктермен шектелген эксперименталды әсерлерді қолдайтын, статикалық типтелген, функционалды және объектіге бағытталған бағдарламалау тілі. Java – статикалық типтелген, объектіге бағытталған бағдарламалау тілі; оның тексерілген ерекшеліктері – эффект жүйесінің салыстырмалы түрде шектеулі мысалы. Тек бір эффект түрі – лақтыру (throws) қолжетімді, мәнмен қайта жалғастыру мүмкіндігі жоқ, және оларды функциялармен (тек әдістермен) пайдалануға болмайды, егер функция арнайы @FunctionalInterface интерфейсін іске асырмаса. JavaScript – динамикалық типтелген тіл, алгебралық эффекттерді іске асыратын ұсынысы бар.