Vrui 2.1-xxx Release Notes
The main change from Vrui version 2.0 to version 2.1 is a new, and still somewhat evolving, unified file access architecture. A new library layer, IO, provides a base class IO::File for high-performance file access, with several derived classes defined either in IO or higher-level libraries implementing concrete file implementations. In particular, the Comm library provides a cluster-transparent implementation of file access, such that cluster applications do not have to worry about which cluster nodes can access which files, and how. Cluster-transparent files address the special case (which is the default case for Vrui applications) where application instances on all cluster nodes read from files synchronously, which allows the underlying communications layer to distribute file data among the cluster nodes using an efficient broadcast protocol.
Applications are expected not to reference classes derived from IO::File directly (with some exceptions), but to open files via namespace-global openFile(...) functions provided by several library layers (IO::openFile, Threads::openFile, Comm::openFile, Vrui::openFile). These functions will choose the most appropriate concrete file class depending on the type of the file to be opened.
The IO::File abstraction is also used inside the Comm library to represent pipes, such as connections to local ports, and remote TCP sockets.