Skip to content

Imports and libraries

tim-hardcastle edited this page Aug 1, 2024 · 37 revisions

In the section we look at the way that imports and modules work in Pipefish.

Imports

Imports are introduced by the import headword.

A line in the import section can only have two forms: either simply a path to a library, expressed as a string:

import

"filepath/foo.pf"

In this case the functions in the library will be in the foo namespace, e.g. foo.qux.

Alternatively, it can be a pair consisting of a preferred namespace and the path:

import

foolib::"filepath/foo.pf" // Has namespace 'foolib'.
NULL::"lib/fmt.pf"        // Has no separate namespace.

Use of NULL as a namespace means that the imported file isn't put into a separate namespace.

Imports as modules

An imported script can just be a static library. However, if it has a var section then the variables will be initialized; and if the script has an init command (as discussed later in the manual), it will be executed.

Namespaces can be chained: if your script imports foo which imports bar which has a function zort, then your script can call foo.bar.zort.

Standard libraries

Producing the standard libraries is a matter of wrapping Pipefish functions around Go functions, and so can be done easily and even automatically; and the developers at Google have already tested, optimized, and documented the library functions for us.

A world library for performing basic IO, file handling, and SQL interop, is imported into every script automatically.

Besides world, this version of Pipefish comes with six importable libraries: fmt, math, path, regexp, strings, and time. These are imported with their bare name rather than a filepath.

The following pages are in this section:

🧿 Pipefish

Clone this wiki locally