Forest is a domain-specific language for describing filestores.
A filestore is a structured collection of data files housed in a conventional hierarchical file system. Many applications use filestores as a poor-man's database, and the correct execution of these applications requires that the collection of files, directories, and symbolic links stored on disk satisfy a variety of precise invariants. Moreover, all of these structures must have acceptable ownership, permission, and timestamp attributes. Unfortunately, current programming languages do not provide adequate support for documenting assumptions about filestores, detecting errors, or safely loading from and storing to them.
Forest specifications describe the structure, attributes, and invariants of filestores using types. Given a specification, the compiler generates loading and storing functions that make it easy to connect data on disk to an isomorphic representation in memory that can be manipulated as if it were any other data structure. It also generates metadata that describes the degree to which the structures on the disk conform to the specification, making error detection easy. In this way, Forest extends the rigorous discipline of typed programming languages, and many of their benefits, to the untyped world of file systems.