- Data pipes:
  - Primitives can use data pipes to share data within a pipe section.
    - To make things simple, data pipes look like files with names that start with an underscore. Examples:

          _wave    _waveb    _out    _mypipe

    - Pipes can be treated as files by most primitives and intrinsics. They can be:
      - `STATUS`ed
      - `LIST`ed
      - `PLOT`ed
  - Each pipe has one writer but can have multiple readers.
  - Pipes allow the output of one primitive to be passed into another primitive.
    Synchronous data flow. (Default)
      No lost data!
      What if the writer to the pipe is faster than the reader?
      - The primitive writing to the pipe will be paused, as needed, to allow the reader to catch up.
      - If this is a frequent problem, primitives are available to "thin" the data down to a reasonable rate.
    Asynchronous data flow. (Optional)
      Used where data loss is not a problem (sacrifices completeness for speed).
      Use of asynchronous pipes is rare and will not be covered in this module.