fungi-lang 0.1.54

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

Fungi: Typed incremental computation with names Travis

Fungi is a programming language for incremental computation with names. In particular, Fungi is a typed functional language for programs that name their own cached dependency graphs.

Fungi programs compute incrementally

Incremental computing consists of successively running a program while it computes related outputs from related inputs that change over time. Often, these input changes arise from an external source, such as a human, or another computer program.

Fungi provides a pair of complementary sub-languages for expressing the interactions of incremental computations, which it organizes into two computation roles:

  1. The Archivist role computes output from input using a functional language, and

  2. the Editor role uses an imperative language to incrementally mutate this input over time, and change demand for output in the process (e.g., placing or removing focus on different outputs of the archivists' functions).

Note: For now, the current Fungi prototype focuses only on the archivist role, leaving the editor role to the surrounding Rust code; future work will integrate the editor role into Fungi programs, to facilitate additional effects-related checks.

Fungi programs name their (incremental) data and subcomputations

The semantics of Fungi programs are effectful, as they allocate programmer-named values and computations, and read these objects from memory later. However, due to the Fungi type and effect system for names, the behavior of Fungi archivists is functional: the key invariant of its type-and-effects system.

Fungi is a core calculus, and target language

Fungi gives a typed, general-purpose core caluclus for demand-driven incremental computations, following the core calculi and run-time semantics of Adapton. Unlike prior Adapton-related projects, Fungi provides additional language affordances for describing names, both dynamically, and through sound static approximations.

Future work: Implicitly-incremental programs translate to Fungi programs:

In the future, Fungi will serve as a typed target language for IODyn. Unlike IODyn, which offers an implicit incremental language, the incremental features of Fungi are intentionally made explicit.

Status:

Fungi Developer Resources:

Related Projects:

  • 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