Документация Engee

Советы по рабочим процессам

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

Рабочий процесс на основе REPL

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

Базовый рабочий процесс редактора или REPL

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

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

module Tmp

say_hello() = println("Hello!")

# Место для других ваших определений

end # модуль

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 и, следовательно, от трудно обнаруживаемых ошибок.

Рабочий процесс на основе браузера

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

  • с помощью интерактивных скриптов Pluto посредством Pluto.jl;

  • с помощью интерактивных скриптов Jupyter посредством IJulia.jl.

Рабочие процессы на основе Revise

Независимо от того, находитесь ли вы в REPL или в IJulia, вы можете усовершенствовать навыки разработки с помощью Revise. Как правило, Revise можно настроить так, чтобы он запускался при каждом запуске Julia. См. инструкции в документации по Revise. После настройки 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, затем выполните следующие действия.

        julia-repl pkg> generate MyPkg # type ] to enter pkg mode julia> push!(LOAD_PATH, pwd()) # hit backspace to exit pkg mode If you restart your Julia session you’ll have to re-issue that command modifying LOAD_PATH. На шаге 2 ниже отредактируйте файл MyPkg/src/MyPkg.jl, чтобы изменить исходный код, и создайте любой тестовый файл.

  2. Создайте пакет

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

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

     julia> using MyPkg
    
     julia> include("runtests.jl")

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