Советы по рабочим процессам
Рабочий процесс на основе 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 и, следовательно, от трудно обнаруживаемых ошибок.
Рабочие процессы на основе Revise
Независимо от того, находитесь ли вы в REPL или в IJulia, вы можете усовершенствовать навыки разработки с помощью Revise. Как правило, Revise можно настроить так, чтобы он запускался при каждом запуске Julia. См. инструкции в документации по Revise. После настройки Revise будет отслеживать изменения файлов в любых загруженных модулях и любых файлах, загруженных в REPL с помощью includet
(но не посредством обычного include
). Затем можно редактировать файлы, и изменения вступят в силу без перезапуска сеанса Julia. Стандартный рабочий процесс похож на описанный выше рабочий процесс на основе REPL со следующими изменениями.
-
Поместите код в модуль в каком-либо месте в пути загрузки. Существует несколько вариантов выполнения этой задачи. Рекомендуется выбрать два из них.
-
Для долгосрочных проектов используйте пакет 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 modifyingLOAD_PATH
. На шаге 2 ниже отредактируйте файлMyPkg/src/MyPkg.jl
, чтобы изменить исходный код, и создайте любой тестовый файл.
-
-
-
Создайте пакет
Перед загрузкой кода убедитесь, что запущен Revise, например с помощью
using Revise
, или следуйте документации по его настройке для автоматического запуска.Затем перейдите в каталог, содержащий тестовый файл (здесь предполагается, что это
"runtests.jl"
), и сделайте следующее.julia> using MyPkg julia> include("runtests.jl")
Вы можете итеративно изменять код в MyPkg в редакторе и повторно запускать тесты с помощью
include("runtests.jl")
. Как правило, не нужно перезапускать сеанс Julia, чтобы увидеть, что изменения вступили в силу (с учетом некоторых ограничений).