Workflow Tips

Вот несколько советов по эффективной работе с Julia.

REPL-based workflow

Как уже было изложено в The Julia REPL, REPL Julia предоставляет богатый функционал, который облегчает эффективный интерактивный рабочий процесс. Вот несколько советов, которые могут еще больше улучшить ваш опыт работы в командной строке.

A basic editor/REPL workflow

Самые базовые рабочие процессы Julia включают использование текстового редактора в сочетании с командной строкой julia.

Создайте файл, скажем, Tmp.jl, и включите в него

module Tmp

say_hello() = println("Hello!")

# Your other definitions here

end # module

using .Tmp

Затем, в той же директории, запустите REPL Julia (используя команду julia). Запустите новый файл следующим образом:

julia> include("Tmp.jl")

julia> Tmp.say_hello()
Hello!

Изучите идеи в REPL. Сохраните хорошие идеи в Tmp.jl. Чтобы перезагрузить файл после его изменения, просто снова выполните include.

Ключевым моментом выше является то, что ваш код инкапсулирован в модуле. Это позволяет вам редактировать определения struct и удалять методы, не перезапуская Julia.

(Объяснение: struct не может быть изменен после определения, и методы не могут быть удалены. Но вы можете перезаписать определение модуля, что мы и делаем, когда повторно include("Tmp.jl")).

Кроме того, инкапсуляция кода в модуле защищает его от влияния предыдущего состояния в REPL, защищая вас от труднообнаружимых ошибок.

Browser-based workflow

Существует несколько способов взаимодействия с Julia в браузере:

  • Использование блокнотов Pluto через Pluto.jl
  • Использование Jupyter notebooks через IJulia.jl

Revise-based workflows

Независимо от того, находитесь ли вы в REPL или в IJulia, вы можете улучшить свой опыт разработки с помощью Revise. Обычно Revise настраивается на автоматический запуск при старте julia, согласно инструкциям в Revise documentation. После настройки Revise будет отслеживать изменения в файлах любых загруженных модулей и в любых файлах, загруженных в REPL с помощью includet (но не с помощью обычного include); вы можете редактировать файлы, и изменения вступят в силу без перезапуска вашей сессии julia. Стандартный рабочий процесс похож на описанный выше процесс на основе REPL, с следующими модификациями:

  1. Поместите свой код в модуль где-то в вашем пути загрузки. Существует несколько вариантов для достижения этого, из которых два рекомендуемых выбора:

    • Для долгосрочных проектов используйте PkgTemplates:

      using PkgTemplates
      t = Template()
      t("MyPkg")

      Это создаст пустой пакет, "MyPkg", в вашем каталоге .julia/dev. Обратите внимание, что PkgTemplates позволяет вам управлять многими различными параметрами через его конструктор Template.

      На шаге 2 ниже отредактируйте MyPkg/src/MyPkg.jl, чтобы изменить исходный код, и MyPkg/test/runtests.jl для тестов.

    • Для "временных" проектов вы можете избежать необходимости в очистке, выполняя свою работу в временной директории (например, /tmp).

      Перейдите в вашу временную директорию и запустите Julia, затем выполните следующее:

      pkg> generate MyPkg            # type ] to enter pkg mode
      julia> push!(LOAD_PATH, pwd())   # hit backspace to exit pkg mode

      Если вы перезапустите свою сессию Julia, вам придется повторно выполнить эту команду, изменяющую LOAD_PATH.

      На шаге 2 ниже отредактируйте MyPkg/src/MyPkg.jl, чтобы изменить исходный код, и создайте любой файл теста на ваш выбор.

  2. Разработайте свой пакет

    Перед загрузкой любого кода убедитесь, что вы используете Revise: введите using Revise или следуйте его документации по автоматической настройке.

    Затем перейдите в каталог, содержащий ваш тестовый файл (здесь предполагается, что это "runtests.jl"), и выполните следующее:

    ```julia-repl julia> using MyPkg

    julia> include("runtests.jl") ```

    Вы можете итеративно изменять код в MyPkg в вашем редакторе и повторно запускать тесты с помощью include("runtests.jl"). Обычно вам не нужно перезапускать вашу сессию Julia, чтобы изменения вступили в силу (с учетом нескольких limitations).