-
Notifications
You must be signed in to change notification settings - Fork 4
Imports and libraries
In the section we look at the way that imports and modules work in Pipefish.
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.
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.
Producing the standard libraries is usually 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. The Pipefish libraries have been given matching names: regexp, path/filepath, etc.
Notable differences are:
-
Pipefish has a SQL library as standard. This uses snippets, Pipefish's general way of embedding DSLs.
-
Any form of IO is of course a command rather than a function, and IO commands are given a rather standardized form looking like
get <variable name> from <source>andpost <value> to <destination>. This is used for example to get the time from the system clock, or to put data into a SQL database. -
The
reflectlibrary is entirely different, since Pipefish has a different type system, and since thetypefunction already tells you the types of values. Instead, thereflectlibrary tells you about the types themselves, allowing you to discover e.g. whether a given type is a clone, and if so what its parent is, etc.
This version of Pipefish comes with the standard libraries files, fmt, html, math, math/big, math/cmplx, math/rand, path, path/filepath, reflect, regexp, sql, strings, terminal, time, and unicode. These are imported with their bare name rather than a filepath, e.g:
import
"unicode"
"sql"
"math/cmplx`
The following pages are in this section:
-
Imports and libraries
- The crypto/aes library
- The crypto/bcrypt library
- The crypto/rand library
- The crypto/rsa library
- The crypto/sha_256 library
- The crypto/sha_512 library
- The database/sql library
- The encoding/base_32 library
- The encoding/base_64 library
- The encoding/csv library
- The encoding/json library
- The files library
- The fmt library
- The html library
- The image library
- The image/bmp library
- The image/color library
- The image/jpeg library
- The image/png library
- The lists library
- The markdown library
- The math library
- The math/big library
- The math/cmplx library
- The math/rand library
- The net/http library
- The net/mail library
- The net/smtp library
- The net/url library
- The os/exec library
- The path library
- The path/filepath library
- The reflect library
- The regexp library
- The strconv library
- The strings library
- The terminal library
- The time library
- The unicode library
🧿 Pipefish is distributed under the MIT license. Please steal my code and ideas.
- Getting started
- Language basics
- The type system and built-in functions
- Functional Pipefish
- Encapsulation
- Imperative Pipefish
-
Imports and libraries
- The crypto/aes library
- The crypto/bcrypt library
- The crypto/rand library
- The crypto/rsa library
- The crypto/sha_256 library
- The crypto/sha_512 library
- The database/sql library
- The encoding/base_32 library
- The encoding/base_64 library
- The encoding/csv library
- The encoding/json library
- The files library
- The fmt library
- The html library
- The image library
- The image/bmp library
- The image/color library
- The image/jpeg library
- The image/png library
- The lists library
- The markdown library
- The math library
- The math/big library
- The math/cmplx library
- The math/rand library
- The net/http library
- The net/mail library
- The net/smtp library
- The net/url library
- The os/exec library
- The path library
- The path/filepath library
- The reflect library
- The regexp library
- The strconv library
- The strings library
- The terminal library
- The time library
- The unicode library
- Advanced Pipefish
- Developing in Pipefish
- Deployment
- Appendices