Flix (programming language): Difference between revisions

Content deleted Content added
JorKadeen (talk | contribs)
JorKadeen (talk | contribs)
No edit summary
Line 14:
'''Flix''' is a [[functional programming|functional]], [[imperative programming|imperative]], and [[logic programming|logic]] [[programming language]] developed at [[Aarhus University]] with funding from the [[Danish_Council_for_Independent_Research|Independent Research Fund Denmark]]<ref>{{cite web |title=Forskningsprojekter |url=https://dff.dk/forskningsprojekter?SearchableText=functional+and+declarative+logic+programming&period%3Alist=all&instrument%3Alist=all&filed_method%3Alist=all |website=Danmarks Frie Forskningsfond |language=da}}</ref> and by a community of [[open source]] contributors. Flix supports [[algebraic data types]], [[pattern matching]], [[parametric polymorphism]], [[currying]], [[higher-order functions]], [[extensible records]]<ref>{{cite journal |last1=Leijen |first1=Daan |title=Extensible records with scoped labels |journal=Trends in Functional Programming}}</ref>, [[Communicating_sequential_processes|channel and process-based concurrency]], and [[tail call elimination]].
 
Flix supports [[Datalog]] constraints as first-class values entities. A Datalog constraint set, i.e. a set of Datalog facts and rules, can be passed to and returned from functions, stored in data structures, and composed with other Datalog constraint sets. The [[minimal model]] of a Datalog constraint set can be computed which is itself another Datalog constraint set. In this way, Flix can be used as a statically-typed meta-programming language for Datalog where Datalog programs are constructed and solved at run-time. Flix also supports [[stratified negation]] and its type system ensures that such programs are stratified at compile-time.
Flix supports [[Datalog]] constraints as first-class values that can be passed around, compose with other constraints, and solved.
 
The Flix type and effect system supports [[Hindley–Milner_type_system|Hindley-Milner]]-style type inference. TheIn addition to ensuring standard type safety, the type and effect system separates pure and impure code.: Ifif an expression is typed as pure then it cannot produce an effect. Higher-order functions can enforce that they are given pure function arguments. orHigher-order alternativelyfunctions theythat accept both pure and impure function values can be declared as effect polymorphic in the effect of their arguments. The effect inference algorithm is based on [[unification_(logic)|Boolean unification]].
 
== Features ==