fungi-lang 0.1.29

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 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).

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.

In particular, Fungi provides language affordances for

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 statically and dynamically, but especially statically, before the incremental program runs.

Fungi serves 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:

  • We have implemented the AST structure.
  • We have implemented big-step evaluation.
  • Currently, we implementing a bidirectional type system, and eventually, the refinement types and associated 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:

Other links: