.. _man-workflow-tips: *************** Workflow Tips *************** Here are some tips for working with Julia efficiently. REPL-based workflow ------------------- As already elaborated in :ref:`man-interacting-with-julia`, Julia's REPL provides rich functionality that facilitates an efficient interactive workflow. Here are some tips that might further enhance your experience at the command line. A basic editor/REPL workflow ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The most basic Julia workflows involve using a text editor in conjunction with the ``julia`` command line. A common pattern includes the following elements: - **Put code under development in a temporary module.** Create a file, say ``Tmp.jl``, and include within it :: module Tmp end - **Put your test code in another file.** Create another file, say ``tst.jl``, which begins with :: import Tmp and includes tests for the contents of ``Tmp``. The value of using :obj:`import` versus :obj:`using` is that you can call :obj:`reload` ``("Tmp")`` instead of having to restart the REPL when your definitions change. Of course, the cost is the need to prepend ``Tmp.`` to uses of names defined in your module. (You can lower that cost by keeping your module name short.) Alternatively, you can wrap the contents of your test file in a module, as :: module Tst using Tmp end The advantage is that you can now do :obj:`using` ``Tmp`` in your test code and can therefore avoid prepending ``Tmp.`` everywhere. The disadvantage is that code can no longer be selectively copied to the REPL without some tweaking. - **Lather. Rinse. Repeat.** Explore ideas at the ``julia`` command prompt. Save good ideas in ``tst.jl``. Occasionally restart the REPL, issuing :: reload("Tmp") include("tst.jl") Simplify initialization ~~~~~~~~~~~~~~~~~~~~~~~ To simplify restarting the REPL, put project-specific initialization code in a file, say ``_init.jl``, which you can run on startup by issuing the command:: julia -L _init.jl If you further add the following to your ``.juliarc.jl`` file :: isinteractive() && isfile("_init.jl") && require("_init.jl") then calling ``julia`` from that directory will run the initialization code without the additional command line argument. Browser-based workflow ---------------------- It is also possible to interact with a Julia REPL in the browser via IJulia_. See the package home for details. .. _IJulia: https://github.com/JuliaLang/IJulia.jl