#incremental #language #memoization #dependency-graph #names

nightly fungi-lang

Fungi: A typed, functional language for programs that name their cached dependency graphs

63 releases

Uses old Rust 2015

0.1.63 Oct 21, 2018
0.1.62 Oct 19, 2018
0.1.58 Sep 3, 2018
0.1.57 Aug 21, 2018
0.1.25 Feb 25, 2018

#6 in #dependency-graph

Download history 12/week @ 2023-06-07 2/week @ 2023-06-14 126/week @ 2023-06-21 80/week @ 2023-06-28 25/week @ 2023-07-05 19/week @ 2023-07-12 19/week @ 2023-07-19 1/week @ 2023-08-02 63/week @ 2023-08-16 63/week @ 2023-08-23 64/week @ 2023-08-30 66/week @ 2023-09-06 3/week @ 2023-09-13 1/week @ 2023-09-20

134 downloads per month

MPL-2.0 license

14K SLoC

Logo Fungi: Typed incremental computation with names Travis

Fungi is a Rust-based DSL that offers a typed functional language for incremental computation with names.

Example programs in Fungi

Fungi Developer Resources:


(See also: Fungi technical report)

Fungi is a typed functional language for incremental computation with names.

Incremental computations attempt to exploit input similarities over time, reusing work that is unaffected by input changes. To maximize this reuse in a general-purpose programming setting, programmers need a mechanism to identify dynamic allocations (of data and subcomputations) that correspond over time. Fungi offers a notion of names, which is formal, general, and statically verifiable.

Fungi's type-and-effect system permits the programmer to encode (program-specific) local invariants about names, and to use these invariants to establish global uniqueness for their composed programs, the property of using names correctly. We prove (on paper) that well-typed Fungi programs respect global uniqueness. We implement Fungi in Rust, as a "deeply-embedded" language, including Fungi's bidirectional type system and incremental evaluation semantics.

  • Adapton provides the semantic foundation for Fungi's approach to incremental computation.
  • IODyn is an implicitly-incremental language, targetting Fungi via a type-directed translation


~124K SLoC