Using environments in other languages#

Search paths, and the ability to manipulate the search path and thus create environments, exist in most other languages that have some notion of modularity and user-contributions. While not always as easy to manipulate, the basic functionality is the same.

R#

R has one or more library paths, which can be viewed and manipulated via the .libPaths() function. For instance, one might create a project-specific library path, into which all packages are installed, and from which all functions are read, as follows:

A more refined management of project-specific environments and specific software packages can be achieved via the renv library.

Julia#

Natively, using the Project/Pkg.jl functionality.

MATLAB#

MATLAB programs can manipulate the search path, which is done for plugins and other functionality, for instance when adding Dynare as a plugin.

More generally, MATLAB’s Search Path collects the various native MATLAB features, official and user-provided toolboxes (packages), and defines the order in which they are found. See https://www.mathworks.com/help/matlab/matlab_env/what-is-the-matlab-search-path.html for more details.

Takeaways#

What this does#

This ensures

  • that your code runs without problem, after all the debugging.

  • that your code runs without manual intervention.

  • that your code generates a log file that you can inspect, and that you could share with others.

  • that it will run on somebody else’s computer

    • because it guarantees that all the software is there (but with a caveat we will discuss next)

What this does not do#

This does not ensure

  • that it will run on somebody else’s computer

    • because it does not guarantee that the next person can install the environment!

    • because it does not guarantee that all the directories for input or output are there

    • because many intermediate files might be present that are not in the replication package

    • because it does not guarantee that all the directory names are correctly adjusted everywhere in your code

  • that it actually produces all the outputs

    • because some outputs might be present from test runs

What to do next#

To solve some of these problems, let’s go to the next step.