From 343c23d586b42078ef374a19b12a4286bb94d0fc Mon Sep 17 00:00:00 2001
From: Magnus Madsen
+ Flix supports algebraic effects, i.e. user-defined effects and handlers.
+ In particular, Flix supports multi-shot resumptions.
+
+ Effect-oriented programming, with algebraic effects, allow programmers to
+ write pure functions modulo effects. Effect handlers enable program reasoning,
+ modularity, and testability.
+
+ For example, the program expresses a
- Flix is a principled functional, imperative, and logic programming language
- developed at Aarhus University, at the University of Waterloo, and by a community of Aarhus University and by a community of open source contributors.
- Flix aims to offer a unique combination of
- features that no other programming language offers, including: algebraic
- data types and pattern matching (like Haskell, OCaml), extensible records (like Elm), traits (type classes) (like Haskell, Rust), higher-kinded types (like Haskell), typematch (like Scala), type inference (like Haskell, OCaml), structured channel and process-based concurrency (like
- Go), and compilation to JVM bytecode (like Scala).
+ Why Effects? Effects are the next big thing for
+ statically-typed programming languages. Effects — like types — enable
+ programmers to structure and understand their programs. Specifically, effects enable
+ modularity, improved program reasoning, new compiler optimizations, and user-defined
+ effects and handlers allow programmers to implement their own control structures.
- Flix also supports several unique features,
- including: a polymorphic effect system, region-based local mutation, purity reflection, and first-class Datalog constraints.
+ Why Flix? We claim that of all the upcoming
+ effect-oriented programming languages, Flix offers the most complete language implementation, the most extensive standard library, the most detailed documentation, and the best tool support.
+
+ Moreover, Flix builds on proven programming language technology, including: algebraic data types and pattern matching, extensible records, traits, higher-kinded types, associated types and effects, structured channel and process-based concurrency,
+ and more.
+
+ Flix comes with excellent and extensive Visual Studio Code support.
From 348c82ceeb05fe8f5b0b81e391da0b84d5b6cec0 Mon Sep 17 00:00:00 2001
From: Magnus Madsen
-
3,800+
+ 4,900+
Merged Pull Requests (PRs)
-
2,500+
+ 3,100+
Resolved Issues (Tickets)
-
60+
+ 70+
Contributors
-
From c7bc3a69a6515e94766d84b2eaea151b1f4aa2d4 Mon Sep 17 00:00:00 2001
From: Magnus Madsen 244,000+
+ 272,000+
Lines in Compiler Codebase
Throughput (entire compiler):
- 41,700 lines/sec
+ 52,800 lines/sec
Throughput (frontend only):
- 93,000 lines/sec
+ 95,500 lines/sec
Algebraic Effects
greeting
function that is pure
+ modulo the current time of the day. In main
we call the function
+ and handle the HourOfDay
effect by getting the real-world time
+ from Java's LocalDateTime
.
+ The Flix Programming Language
+ Flix —
- Next-generation reliable, safe, concise, and functional-first programming
- language.
+
+ A powerful effect-oriented programming language
+
Why Flix?
+ Why Effect-Oriented? And Why Flix?
- Why Effects? Effects are the next big thing for + Why Effects? Effects are the next big step for statically-typed programming languages. Effects — like types — enable - programmers to structure and understand their programs. Specifically, effects enable + programmers to better structure and understand their programs. Specifically, effects enable modularity, improved program reasoning, new compiler optimizations, and user-defined effects and handlers allow programmers to implement their own control structures.
@@ -86,7 +86,7 @@ class Home extends Component { className="font-weight-bold">traits, higher-kinded types, associated types and effects, structured channel and process-based concurrency, + className="font-weight-bold">structured concurrency, and more. From 4b2d0c93a1a3db110725d3423aa2846eba4c08aa Mon Sep 17 00:00:00 2001 From: Magnus Madsen+ Flix supports algebraic effects, i.e. user-defined effects and handlers. + In particular, Flix supports multi-shot resumptions. +
+ ++ Effect-oriented programming, with algebraic effects, allow programmers to + write pure functions modulo effects. Effect handlers enable program reasoning, + modularity, and testability. +
+ +
+ For example, the program expresses a greeting
function that is pure
+ modulo the current time of the day. In main
we call the function
+ and handle the HourOfDay
effect by getting the real-world time
+ from Java's LocalDateTime
.
+
- Flix supports algebraic effects, i.e. user-defined effects and handlers. - In particular, Flix supports multi-shot resumptions. -
- -- Effect-oriented programming, with algebraic effects, allow programmers to - write pure functions modulo effects. Effect handlers enable program reasoning, - modularity, and testability. -
- -
- For example, the program expresses a greeting
function that is pure
- modulo the current time of the day. In main
we call the function
- and handle the HourOfDay
effect by getting the real-world time
- from Java's LocalDateTime
.
-
- Why Effects? Effects are the next big step for - statically-typed programming languages. Effects — like types — enable - programmers to better structure and understand their programs. Specifically, effects enable - modularity, improved program reasoning, new compiler optimizations, and user-defined + Why Effects? Effect systems represent the next major + evolution in statically typed programming languages. By explicitly modeling side effects, + effect-oriented programming enforces modularity and helps program reasoning. User-defined effects and handlers allow programmers to implement their own control structures.
@@ -89,12 +88,6 @@ class Home extends Component { className="font-weight-bold">structured concurrency, and more. - -- Flix comes with excellent and extensive Visual Studio Code support. -
-
- For example, the program expresses a greeting
function that is pure
- modulo the current time of the day. In main
we call the function
- and handle the HourOfDay
effect by getting the real-world time
- from Java's LocalDateTime
.
+ For example, the program on the right expresses a greeting
function
+ that is pure modulo the current time of the day. In main
we call
+ the function and handle the HourOfDay
effect by getting the
+ real-world time from Java's LocalDateTime
.