In C, there is a single general dictionary that contains all identifiers, so an identifier defined in any place may be used in any other, which leads to many problems for large applications, and even more for applications that use several pieces of code from several organizations.

On the other hand, in Pliant, each identifier belongs either:

A module is simply a text file. As an example, module /pliant/type/int.p is text file /pliant/module/pliant/type/int.pli


There are several ways to define which identifiers can be seen from outside the module:

export ident1 ident2 ...

exports the listed identifiers.

public
  body

All identifiers defined within the body will be exported.

public
...
[private]

All identifiers defined after public function, and before private one will be exported.


module module_name

will give access to the identifiers exported by module defined in file /pliant/module/module_name

submodule module_name

will do the same, but identifiers exported by the specified module will also be exported by the current module.



These modules will give you access to various parts of the Pliant language features and compiler internals.
/pliant/language/unsafe.pli Gives access to pointers, and all other functions that will crash sadely the process when missused. It also contains general and safe features that are of no use for beginners.
/pliant/language/context.pli Gives access to informations about the computer this program is running on (processor_name, os_api, os_kernel, os_version, pliant_release_number, etc)
/pliant/language/os.pli Gives direct access to some of the operating functions. All these functions start with 'os_'. Using these features is not recommended at all. Including this module will also include context.pli module because if you plan to use OS specific features, then you really need to know on which OS the program is running.
/pliant/language/parser.pli Gives access to the Pliant parser internal machinery.
/pliant/language/compiler.pli Gives access to meta programming features.
/pliant/language/optimizer.pli Gives access to Pliant optimizer internals.
/pliant/language/generator.pli Gives access to Pliant code generator internals. Some of the functions you would expect here may well be in optimizer.pli because Pliant code generator is simply the last part of the Pliant optimizer.
/pliant/language/stream.pli Gives access to streams (reading and writing from and to files).
The portability of the following modules is really poor, so please, use with care:
/pliant/admin/file.pli Gives access to files handling functions (querying, copying, etc).
/pliant/admin/sync.pli This is a more advance part of file.pli that contains the very powerfull 'file_sync' function.
/pliant/admin/execute.pli Enables the 'execute' function that will run an external program.
/pliant/admin/shell.pli Enables the 'shell' function that will run a Unix shell command.
/pliant/admin/process.pli Gives you access to process handling functions (searching for a given process or killing some)