fungi-lang 0.1.8

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

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

Fungi programs are incremental computations

Fungi programs are demand-driven incremental computations, in the spirit of Adapton. In particular, Fungi provides two sub-languages for expressing the interactions of incremental computations, which it divides into two roles:

  1. A functional language for the Archivist role, and
  2. An imperative language for the Editor role.

The archivist role computes incremental output from input on demand, and the editor role incrementally mutates this input over time, and may also change demand for output in the process (e.g., placing or removing focus on different outputs).

Fungi programs name their 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 Fungi's type and effect system for names, the behavior of Fungi archivists is functional: the key invariant of its type-and-effects system.

In particular, Fungi provides language affordances for

Fungi is a core calculus, and target language

Fungi serves as the target language for IODyn. Unlike IODyn, the incremental features of Fungi are explicit.

Status:

  • We have implemented the AST structure, concrete syntax (via Rust macros for now); see src/ast.rs, and test/ast.rs
  • We are beginning the basic type system, and then, the refinement types and decision procedures.
  • For technical background and formal definitions, see the latest draft of the technical report.
  • We are presently implementing these formalisms; the deductive proof rules for index equivalence and apartness do not indicate an obvious algorithm, or obvious encoding into SMT. Creating these decision procedures is a key research challenge.

Resources: