Provided by: erlang-manpages_20.2.2+dfsg-1ubuntu2_all bug

NAME

       code - Erlang code server.

DESCRIPTION

       This module contains the interface to the Erlang code server, which deals with the loading
       of compiled code into a running Erlang runtime system.

       The runtime system can be started in embedded or interactive mode. Which one is decided by
       command-line flag -mode:

       % erl -mode interactive

       The modes are as follows:

         * In  embedded  mode,  all  code  is  loaded during system startup according to the boot
           script. (Code can also be loaded later by explicitly ordering the code  server  to  do
           so).

         * In interactive mode, which is default, only some code is loaded during system startup,
           basically the modules needed by the runtime system. Other code is  dynamically  loaded
           when  first referenced. When a call to a function in a certain module is made, and the
           module is not loaded, the code server searches for and tries to load the module.

       To prevent  accidentally  reloading  of  modules  affecting  the  Erlang  runtime  system,
       directories kernel, stdlib, and compiler are considered sticky. This means that the system
       issues a warning and rejects the request if a user tries to reload a  module  residing  in
       any of them. The feature can be disabled by using command-line flag -nostick.

CODE PATH

       In  interactive  mode,  the  code  server maintains a search path, usually called the code
       path, consisting of a list of directories, which it searches sequentially when  trying  to
       load a module.

       Initially,  the  code path consists of the current working directory and all Erlang object
       code directories under library directory $OTPROOT/lib, where $OTPROOT is the  installation
       directory of Erlang/OTP, code:root_dir(). Directories can be named Name[-Vsn] and the code
       server, by default, chooses the directory with the  highest  version  number  among  those
       having  the  same  Name.  Suffix  -Vsn  is  optional.  If  an  ebin directory exists under
       Name[-Vsn], this directory is added to the code path.

       Environment variable ERL_LIBS (defined in the operating system) can be used to define more
       library  directories  to  be handled in the same way as the standard OTP library directory
       described above, except that directories without an ebin directory are ignored.

       All application directories  found  in  the  additional  directories  appears  before  the
       standard OTP applications, except for the Kernel and STDLIB applications, which are placed
       before any additional applications. In other words, modules found in any of the additional
       library  directories  override  modules  with  the same name in OTP, except for modules in
       Kernel and STDLIB.

       Environment variable ERL_LIBS (if defined) is to contain a colon-separated (for  Unix-like
       systems) or semicolon-separated (for Windows) list of additional libraries.

       Example:

       On a Unix-like system, ERL_LIBS can be set to the following

       /usr/local/jungerl:/home/some_user/my_erlang_lib

       On Windows, use semi-colon as separator.

LOADING OF CODE FROM ARCHIVE FILES

   Warning:
       The  support for loading code from archive files is experimental. The purpose of releasing
       it before it is ready is to obtain early feedback. The file format, semantics, interfaces,
       and  so  on,  can  be  changed  in  a  future  release.  The  function  lib_dir/2 and flag
       -code_path_choice are also experimental.

       The Erlang archives are ZIP files with extension .ez. Erlang archives can also be enclosed
       in escript files whose file extension is arbitrary.

       Erlang  archive files can contain entire Erlang applications or parts of applications. The
       structure in an archive file is the same as the directory structure for an application. If
       you,  for  example,  create  an  archive  of  mnesia-4.4.7, the archive file must be named
       mnesia-4.4.7.ez and it must contain a top directory named  mnesia-4.4.7.  If  the  version
       part  of the name is omitted, it must also be omitted in the archive. That is, a mnesia.ez
       archive must contain a mnesia top directory.

       An archive file for an application can, for example, be created like this:

       zip:create("mnesia-4.4.7.ez",
            ["mnesia-4.4.7"],
            [{cwd, code:lib_dir()},
             {compress, all},
             {uncompress,[".beam",".app"]}]).

       Any file in the archive can be compressed, but to speed up the access of  frequently  read
       files, it can be a good idea to store beam and app files uncompressed in the archive.

       Normally  the top directory of an application is located in library directory $OTPROOT/lib
       or in a directory referred to by environment  variable  ERL_LIBS.  At  startup,  when  the
       initial  code  path  is  computed,  the  code server also looks for archive files in these
       directories and possibly adds ebin directories in archives to the code path. The code path
       then  contains  paths  to directories that look like $OTPROOT/lib/mnesia.ez/mnesia/ebin or
       $OTPROOT/lib/mnesia-4.4.7.ez/mnesia-4.4.7/ebin.

       The code server uses module erl_prim_loader in ERTS (possibly through erl_boot_server)  to
       read  code files from archives. However, the functions in erl_prim_loader can also be used
       by  other  applications  to  read   files   from   archives.   For   example,   the   call
       erl_prim_loader:list_dir(     "/otp/root/lib/mnesia-4.4.7.ez/mnesia-4.4.7/examples/bench)"
       would list the contents of a directory inside an archive. See erl_prim_loader(3erl).

       An application archive file and a regular application directory can coexist. This  can  be
       useful when it is needed to have parts of the application as regular files. A typical case
       is the priv directory, which must reside  as  a  regular  directory  to  link  in  drivers
       dynamically  and  start  port  programs.  For  other  applications  that do not need this,
       directory priv can reside in the archive and the files under the  directory  priv  can  be
       read through erl_prim_loader.

       When  a  directory is added to the code path and when the entire code path is (re)set, the
       code server decides which subdirectories in an application that are to be  read  from  the
       archive  and  which  that  are  to  be  read as regular files. If directories are added or
       removed afterwards, the file access can fail if the code path is not updated (possibly  to
       the same path as before, to trigger the directory resolution update).

       For each directory on the second level in the application archive (ebin, priv, src, and so
       on), the code server first chooses the regular directory if it exists and second from  the
       archive.  Function  code:lib_dir/2  returns  the  path  to  the subdirectory. For example,
       code:lib_dir(megaco,ebin) can  return  /otp/root/lib/megaco-3.9.1.1.ez/megaco-3.9.1.1/ebin
       while code:lib_dir(megaco,priv) can return /otp/root/lib/megaco-3.9.1.1/priv.

       When  an  escript  file  contains an archive, there are no restrictions on the name of the
       escript and no restrictions on how many applications that can be stored  in  the  embedded
       archive.  Single  Beam  files can also reside on the top level in the archive. At startup,
       the top directory in the embedded archive and all (second level) ebin directories  in  the
       embedded archive are added to the code path. See erts:escript(1).

       When  the  choice of directories in the code path is strict, the directory that ends up in
       the code path is exactly the stated one. This means that if, for  example,  the  directory
       $OTPROOT/lib/mnesia-4.4.7/ebin  is explicitly added to the code path, the code server does
       not load files from $OTPROOT/lib/mnesia-4.4.7.ez/mnesia-4.4.7/ebin.

       This behavior can be controlled through command-line flag -code_path_choice Choice. If the
       flag  is set to relaxed, the code server instead chooses a suitable directory depending on
       the actual file structure. If a regular application ebin directory exists, it  is  chosen.
       Otherwise,  the  directory  ebin in the archive is chosen if it exists. If neither of them
       exists, the original directory is chosen.

       Command-line flag -code_path_choice Choice also affects how  module  init  interprets  the
       boot  script.  The  interpretation  of  the  explicit code paths in the boot script can be
       strict or relaxed. It is particularly useful to set the flag to relaxed  when  elaborating
       with  code  loading from archives without editing the boot script. The default is relaxed.
       See erts:init(3erl).

CURRENT AND OLD CODE

       The code for a module can exist in two variants in a system: current code  and  old  code.
       When  a  module  is  loaded  into  the  system for the first time, the module code becomes
       'current' and the global export table is updated with references to all functions exported
       from the module.

       If then a new instance of the module is loaded (for example, because of error correction),
       the code of the previous instance becomes 'old', and all export entries referring  to  the
       previous  instance  are  removed.  After that, the new instance is loaded as for the first
       time, and becomes 'current'.

       Both old and current code for a module are valid, and can even be evaluated  concurrently.
       The  difference  is  that  exported functions in old code are unavailable. Hence, a global
       call cannot be made to an exported function in  old  code,  but  old  code  can  still  be
       evaluated because of processes lingering in it.

       If a third instance of the module is loaded, the code server removes (purges) the old code
       and any processes lingering  in  it  are  terminated.  Then  the  third  instance  becomes
       'current' and the previously current code becomes 'old'.

       For more information about old and current code, and how to make a process switch from old
       to current code, see section Compilation and Code Loading in the Erlang Reference Manual.

ARGUMENT TYPES AND INVALID ARGUMENTS

       Module and application names are atoms, while file and directory names  are  strings.  For
       backward compatibility reasons, some functions accept both strings and atoms, but a future
       release will probably only allow the arguments that are documented.

       Functions in this module generally fail with an exception if they are passed an  incorrect
       type  (for  example,  an  integer or a tuple where an atom is expected). An error tuple is
       returned if the argument type is correct, but there are some other errors (for example,  a
       non-existing directory is specified to set_path/1).

ERROR REASONS FOR CODE-LOADING FUNCTIONS

       Functions  that  load  code  (such  as load_file/1) will return {error,Reason} if the load
       operation fails. Here follows a description of the common reasons.

         badfile:
           The object code has an incorrect format or the module name in the object code  is  not
           the expected module name.

         nofile:
           No file with object code was found.

         not_purged:
           The  object  code  could  not  be  loaded  because  an old version of the code already
           existed.

         on_load_failure:
           The module has an -on_load function that failed when it was called.

         sticky_directory:
           The object code resides in a sticky directory.

DATA TYPES

       load_ret() =
           {error, What :: load_error_rsn()} |
           {module, Module :: module()}

       load_error_rsn() =
           badfile |
           nofile |
           not_purged |
           on_load_failure |
           sticky_directory

       prepared_code()

              An opaque term holding prepared code.

EXPORTS

       set_path(Path) -> true | {error, What}

              Types:

                 Path = [Dir :: file:filename()]
                 What = bad_directory

              Sets the code path to the list of directories Path.

              Returns:

                true:
                  If successful

                {error, bad_directory}:
                  If any Dir is not a directory name

       get_path() -> Path

              Types:

                 Path = [Dir :: file:filename()]

              Returns the code path.

       add_path(Dir) -> add_path_ret()

       add_pathz(Dir) -> add_path_ret()

              Types:

                 Dir = file:filename()
                 add_path_ret() = true | {error, bad_directory}

              Adds Dir to the code path. The directory is added as the last directory in the  new
              path. If Dir already exists in the path, it is not added.

              Returns  true  if successful, or {error, bad_directory} if Dir is not the name of a
              directory.

       add_patha(Dir) -> add_path_ret()

              Types:

                 Dir = file:filename()
                 add_path_ret() = true | {error, bad_directory}

              Adds Dir to the beginning of the code path. If Dir exists, it is removed  from  the
              old position in the code path.

              Returns  true  if successful, or {error, bad_directory} if Dir is not the name of a
              directory.

       add_paths(Dirs) -> ok

       add_pathsz(Dirs) -> ok

              Types:

                 Dirs = [Dir :: file:filename()]

              Adds the directories in Dirs to the end of the code path. If a Dir  exists,  it  is
              not added.

              Always returns ok, regardless of the validity of each individual Dir.

       add_pathsa(Dirs) -> ok

              Types:

                 Dirs = [Dir :: file:filename()]

              Traverses Dirs and adds each Dir to the beginning of the code path. This means that
              the order of Dirs is reversed in the resulting code path. For example, if  you  add
              [Dir1,Dir2], the resulting path will be [Dir2,Dir1|OldCodePath].

              If a Dir already exists in the code path, it is removed from the old position.

              Always returns ok, regardless of the validity of each individual Dir.

       del_path(NameOrDir) -> boolean() | {error, What}

              Types:

                 NameOrDir = Name | Dir
                 Name = atom()
                 Dir = file:filename()
                 What = bad_name

              Deletes  a directory from the code path. The argument can be an atom Name, in which
              case the directory with the name .../Name[-Vsn][/ebin] is  deleted  from  the  code
              path. Also, the complete directory name Dir can be specified as argument.

              Returns:

                true:
                  If successful

                false:
                  If the directory is not found

                {error, bad_name}:
                  If the argument is invalid

       replace_path(Name, Dir) -> true | {error, What}

              Types:

                 Name = atom()
                 Dir = file:filename()
                 What = bad_directory | bad_name | {badarg, term()}

              Replaces  an  old occurrence of a directory named .../Name[-Vsn][/ebin] in the code
              path, with Dir. If Name does not exist, it adds the new directory Dir last  in  the
              code  path.  The  new  directory  must  also  be  named .../Name[-Vsn][/ebin]. This
              function is to be used if a new version of the directory (library) is  added  to  a
              running system.

              Returns:

                true:
                  If successful

                {error, bad_name}:
                  If Name is not found

                {error, bad_directory}:
                  If Dir does not exist

                {error, {badarg, [Name, Dir]}}:
                  If Name or Dir is invalid

       load_file(Module) -> load_ret()

              Types:

                 Module = module()
                 load_ret() =
                     {error, What :: load_error_rsn()} |
                     {module, Module :: module()}

              Tries  to  load  the  Erlang  module  Module, using the code path. It looks for the
              object code file with an extension corresponding to the Erlang  machine  used,  for
              example, Module.beam. The loading fails if the module name found in the object code
              differs from the name Module. load_binary/3 must be used to load object code with a
              module name that is different from the file name.

              Returns  {module,  Module}  if successful, or {error, Reason} if loading fails. See
              Error Reasons for Code-Loading Functions for a description of  the  possible  error
              reasons.

       load_abs(Filename) -> load_ret()

              Types:

                 Filename = file:filename()
                 load_ret() =
                     {error, What :: load_error_rsn()} |
                     {module, Module :: module()}
                 loaded_filename() =
                     (Filename :: file:filename()) | loaded_ret_atoms()
                 loaded_ret_atoms() = cover_compiled | preloaded

              Same  as  load_file(Module),  but Filename is an absolute or relative filename. The
              code path is not searched. It returns a value  in  the  same  way  as  load_file/1.
              Notice  that  Filename  must not contain the extension (for example, .beam) because
              load_abs/1 adds the correct extension.

       ensure_loaded(Module) -> {module, Module} | {error, What}

              Types:

                 Module = module()
                 What = embedded | badfile | nofile | on_load_failure

              Tries to load a module in the same way as load_file/1, unless the module is already
              loaded.  However,  in  embedded  mode it does not load a module that is not already
              loaded, but returns {error, embedded} instead. See Error Reasons  for  Code-Loading
              Functions for a description of other possible error reasons.

       load_binary(Module, Filename, Binary) ->
                      {module, Module} | {error, What}

              Types:

                 Module = module()
                 Filename = loaded_filename()
                 Binary = binary()
                 What = badarg | load_error_rsn()
                 loaded_filename() =
                     (Filename :: file:filename()) | loaded_ret_atoms()
                 loaded_ret_atoms() = cover_compiled | preloaded

              This  function  can  be  used  to load object code on remote Erlang nodes. Argument
              Binary must contain object code for Module. Filename  is  only  used  by  the  code
              server  to keep a record of from which file the object code for Module comes. Thus,
              Filename is not opened and read by the code server.

              Returns {module, Module} if successful, or {error, Reason} if  loading  fails.  See
              Error  Reasons  for  Code-Loading Functions for a description of the possible error
              reasons.

       atomic_load(Modules) -> ok | {error, [{Module, What}]}

              Types:

                 Modules = [Module | {Module, Filename, Binary}]
                 Module = module()
                 Filename = file:filename()
                 Binary = binary()
                 What =
                     badfile |
                     nofile |
                     on_load_not_allowed |
                     duplicated |
                     not_purged |
                     sticky_directory |
                     pending_on_load

              Tries to load all of the modules in the list Modules atomically.  That  means  that
              either  all  modules are loaded at the same time, or none of the modules are loaded
              if there is a problem with any of the modules.

              Loading can fail for one the following reasons:

                badfile:
                  The object code has an incorrect format or the module name in the  object  code
                  is not the expected module name.

                nofile:
                  No file with object code exists.

                on_load_not_allowed:
                  A module contains an -on_load function.

                duplicated:
                  A module is included more than once in Modules.

                not_purged:
                  The  object  code  can not be loaded because an old version of the code already
                  exists.

                sticky_directory:
                  The object code resides in a sticky directory.

                pending_on_load:
                  A previously loaded module contains an -on_load function that never finished.

              If it is important to minimize the time  that  an  application  is  inactive  while
              changing code, use prepare_loading/1 and finish_loading/1 instead of atomic_load/1.
              Here is an example:

              {ok,Prepared} = code:prepare_loading(Modules),
              %% Put the application into an inactive state or do any
              %% other preparation needed before changing the code.
              ok = code:finish_loading(Prepared),
              %% Resume the application.

       prepare_loading(Modules) ->
                          {ok, Prepared} | {error, [{Module, What}]}

              Types:

                 Modules = [Module | {Module, Filename, Binary}]
                 Module = module()
                 Filename = file:filename()
                 Binary = binary()
                 Prepared = prepared_code()
                 What = badfile | nofile | on_load_not_allowed | duplicated

              Prepares to load the modules in the list Modules. Finish  the  loading  by  calling
              finish_loading(Prepared).

              This function can fail with one of the following error reasons:

                badfile:
                  The  object  code has an incorrect format or the module name in the object code
                  is not the expected module name.

                nofile:
                  No file with object code exists.

                on_load_not_allowed:
                  A module contains an -on_load function.

                duplicated:
                  A module is included more than once in Modules.

       finish_loading(Prepared) -> ok | {error, [{Module, What}]}

              Types:

                 Prepared = prepared_code()
                 Module = module()
                 What = not_purged | sticky_directory | pending_on_load

              Tries to  load  code  for  all  modules  that  have  been  previously  prepared  by
              prepare_loading/1.  The  loading occurs atomically, meaning that either all modules
              are loaded at the same time, or none of the modules are loaded.

              This function can fail with one of the following error reasons:

                not_purged:
                  The object code can not be loaded because an old version of  the  code  already
                  exists.

                sticky_directory:
                  The object code resides in a sticky directory.

                pending_on_load:
                  A previously loaded module contains an -on_load function that never finished.

       ensure_modules_loaded(Modules :: [Module]) ->
                                ok | {error, [{Module, What}]}

              Types:

                 Module = module()
                 What = badfile | nofile | on_load_failure

              Tries to load any modules not already loaded in the list Modules in the same way as
              load_file/1.

              Returns ok if successful, or {error,[{Module,Reason}]} if loading of  some  modules
              fails.  See  Error  Reasons  for  Code-Loading Functions for a description of other
              possible error reasons.

       delete(Module) -> boolean()

              Types:

                 Module = module()

              Removes the current code for Module, that is, the current code for Module  is  made
              old.  This means that processes can continue to execute the code in the module, but
              no external function calls can be made to it.

              Returns true if successful, or false if there is old code for Module that  must  be
              purged first, or if Module is not a (loaded) module.

       purge(Module) -> boolean()

              Types:

                 Module = module()

              Purges  the code for Module, that is, removes code marked as old. If some processes
              still linger in the old code,  these  processes  are  killed  before  the  code  is
              removed.

          Note:
              As of ERTS version 9.0, a process is only considered to be lingering in the code if
              it has direct references to the code. For more  information  see  documentation  of
              erlang:check_process_code/3, which is used in order to determine this.

              Returns true if successful and any process is needed to be killed, otherwise false.

       soft_purge(Module) -> boolean()

              Types:

                 Module = module()

              Purges  the  code  for  Module, that is, removes code marked as old, but only if no
              processes linger in it.

          Note:
              As of ERTS version 9.0, a process is only considered to be lingering in the code if
              it  has  direct  references  to the code. For more information see documentation of
              erlang:check_process_code/3, which is used in order to determine this.

              Returns false if the module cannot be purged because of processes lingering in  old
              code, otherwise true.

       is_loaded(Module) -> {file, Loaded} | false

              Types:

                 Module = module()
                 Loaded = loaded_filename()
                 loaded_filename() =
                     (Filename :: file:filename()) | loaded_ret_atoms()
                   Filename is an absolute filename.
                 loaded_ret_atoms() = cover_compiled | preloaded

              Checks if Module is loaded. If it is, {file, Loaded} is returned, otherwise false.

              Normally, Loaded is the absolute filename Filename from which the code is obtained.
              If the module is preloaded (see script(5)), Loaded==preloaded.  If  the  module  is
              Cover-compiled (see cover(3erl)), Loaded==cover_compiled.

       all_loaded() -> [{Module, Loaded}]

              Types:

                 Module = module()
                 Loaded = loaded_filename()
                 loaded_filename() =
                     (Filename :: file:filename()) | loaded_ret_atoms()
                   Filename is an absolute filename.
                 loaded_ret_atoms() = cover_compiled | preloaded

              Returns  a  list  of  tuples  {Module,  Loaded}  for  all loaded modules. Loaded is
              normally the absolute filename, as described for is_loaded/1.

       which(Module) -> Which

              Types:

                 Module = module()
                 Which = file:filename() | loaded_ret_atoms() | non_existing
                 loaded_ret_atoms() = cover_compiled | preloaded

              If the module is not loaded, this function searches the code  path  for  the  first
              file containing object code for Module and returns the absolute filename.

              If  the  module  is  loaded,  it returns the name of the file containing the loaded
              object code.

              If the module is preloaded, preloaded is returned.

              If the module is Cover-compiled, cover_compiled is returned.

              If the module cannot be found, non_existing is returned.

       get_object_code(Module) -> {Module, Binary, Filename} | error

              Types:

                 Module = module()
                 Binary = binary()
                 Filename = file:filename()

              Searches the code path for the object  code  of  module  Module.  Returns  {Module,
              Binary,  Filename}  if successful, otherwise error. Binary is a binary data object,
              which contains the object code for the module. This can be useful if code is to  be
              loaded on a remote node in a distributed system. For example, loading module Module
              on a node Node is done as follows:

              ...
              {_Module, Binary, Filename} = code:get_object_code(Module),
              rpc:call(Node, code, load_binary, [Module, Filename, Binary]),
              ...

       root_dir() -> file:filename()

              Returns the root directory of Erlang/OTP,  which  is  the  directory  where  it  is
              installed.

              Example:

              > code:root_dir().
              "/usr/local/otp"

       lib_dir() -> file:filename()

              Returns  the  library directory, $OTPROOT/lib, where $OTPROOT is the root directory
              of Erlang/OTP.

              Example:

              > code:lib_dir().
              "/usr/local/otp/lib"

       lib_dir(Name) -> file:filename() | {error, bad_name}

              Types:

                 Name = atom()

              Returns the path for the "library directory", the top directory, for an application
              Name  located  under  $OTPROOT/lib  or  on a directory referred to with environment
              variable ERL_LIBS.

              If a regular directory called Name or Name-Vsn exists in the code path with an ebin
              subdirectory, the path to this directory is returned (not the ebin directory).

              If  the directory refers to a directory in an archive, the archive name is stripped
              away   before   the   path    is    returned.    For    example,    if    directory
              /usr/local/otp/lib/mnesia-4.2.2.ez/mnesia-4.2.2/ebin     is     in     the    path,
              /usr/local/otp/lib/mnesia-4.2.2/ebin is  returned.  This  means  that  the  library
              directory  for an application is the same, regardless if the application resides in
              an archive or not.

              Example:

              > code:lib_dir(mnesia).
              "/usr/local/otp/lib/mnesia-4.2.2"

              Returns {error, bad_name}  if  Name  is  not  the  name  of  an  application  under
              $OTPROOT/lib  or  on a directory referred to through environment variable ERL_LIBS.
              Fails with an exception if Name has the wrong type.

          Warning:
              For backward compatibility, Name is also allowed to be a string. That will probably
              change in a future release.

       lib_dir(Name, SubDir) -> file:filename() | {error, bad_name}

              Types:

                 Name = SubDir = atom()

              Returns  the  path  to  a  subdirectory  directly  under  the  top  directory of an
              application. Normally the subdirectories reside under the  top  directory  for  the
              application,  but  when  applications  at  least  partly resides in an archive, the
              situation  is  different.  Some  of  the  subdirectories  can  reside  as   regular
              directories  while  other reside in an archive file. It is not checked whether this
              directory exists.

              Example:

              > code:lib_dir(megaco, priv).
              "/usr/local/otp/lib/megaco-3.9.1.1/priv"

              Fails with an exception if Name or SubDir has the wrong type.

       compiler_dir() -> file:filename()

              Returns the compiler library directory. Equivalent to code:lib_dir(compiler).

       priv_dir(Name) -> file:filename() | {error, bad_name}

              Types:

                 Name = atom()

              Returns  the  path  to  the  priv  directory  in  an  application.  Equivalent   to
              code:lib_dir(Name, priv).

          Warning:
              For backward compatibility, Name is also allowed to be a string. That will probably
              change in a future release.

       objfile_extension() -> nonempty_string()

              Returns the object code file extension corresponding to the  Erlang  machine  used,
              namely .beam.

       stick_dir(Dir) -> ok | error

              Types:

                 Dir = file:filename()

              Marks Dir as sticky.

              Returns ok if successful, otherwise error.

       unstick_dir(Dir) -> ok | error

              Types:

                 Dir = file:filename()

              Unsticks a directory that is marked as sticky.

              Returns ok if successful, otherwise error.

       is_sticky(Module) -> boolean()

              Types:

                 Module = module()

              Returns  true  if Module is the name of a module that has been loaded from a sticky
              directory (in other words: an attempt to reload the module will fail), or false  if
              Module is not a loaded module or is not sticky.

       where_is_file(Filename) -> non_existing | Absname

              Types:

                 Filename = Absname = file:filename()

              Searches  the  code path for Filename, a file of arbitrary type. If found, the full
              name is returned. non_existing is  returned  if  the  file  cannot  be  found.  The
              function can be useful, for example, to locate application resource files.

       clash() -> ok

              Searches all directories in the code path for module names with identical names and
              writes a report to stdout.

       module_status(Module :: module()) ->
                        not_loaded | loaded | modified | removed

              Returns:

                not_loaded:
                  If Module is not currently loaded.

                loaded:
                  If Module is loaded and the object file exists and contains the same code.

                removed:
                  If Module is loaded but no corresponding object file can be found in  the  code
                  path.

                modified:
                  If  Module  is  loaded  but  the object file contains code with a different MD5
                  checksum.

              Preloaded modules are always reported as loaded, without inspecting the contents on
              disk.  Cover compiled modules will always be reported as modified if an object file
              exists, or as removed otherwise. Modules whose load path is an empty string  (which
              is  the  convention  for  auto-generated  code)  will only be reported as loaded or
              not_loaded.

              For modules that have native code loaded (see is_module_native/1), the MD5  sum  of
              the  native  code  in the object file is used for the comparison, if it exists; the
              Beam code in the file is ignored. Reversely, for modules that do not currently have
              native code loaded, any native code in the file will be ignored.

              See also modified_modules/0.

       modified_modules() -> [module()]

              Returns  the list of all currently loaded modules for which module_status/1 returns
              modified. See also all_loaded/0.

       is_module_native(Module) -> true | false | undefined

              Types:

                 Module = module()

              Returns:

                true:
                  If Module is the name of a loaded module that has native code loaded

                false:
                  If Module is loaded but does not have native code

                undefined:
                  If Module is not loaded

       get_mode() -> embedded | interactive

              Returns an atom describing the mode of the code server: interactive or embedded.

              This information is useful when an external entity (for example, an  IDE)  provides
              additional  code  for a running node. If the code server is in interactive mode, it
              only has to add the path to the code. If the code server is in embedded  mode,  the
              code must be loaded with load_binary/3.