Советы по рабочим процессам
Рабочий процесс на основе REPL
Как уже говорилось в главе REPL Julia, REPL Julia предоставляет широкие функциональные возможности, способствующие реализации эффективного интерактивного рабочего процесса. Вот несколько советов, которые позволят еще более продуктивно работать с командной строкой.
Базовый рабочий процесс редактора или REPL
В самых основных рабочих процессах Julia предусматривается использование текстового редактора в сочетании с командной строкой julia
. Общая схема состоит из следующих шагов.
-
Размещение разрабатываемого кода во временном модуле. Создайте файл, скажем
Tmp.jl
, и включите в него следующий фрагмент.module Tmp export say_hello say_hello() = println("Hello!") # Здесь находятся другие ваши определения end
-
Размещение тестового кода в другом файле. Создайте другой файл, скажем
tst.jl
, который выглядит следующим образом.include("Tmp.jl") import .Tmp # using .Tmp # можно использовать `using` для добавления экспортированных символов в `Tmp` в пространство имен Tmp.say_hello() # say_hello() # Здесь находится другой ваш тестовый код
и содержит тесты для содержимого
Tmp
. Или можно заключить содержимое тестового файла в модуль, как показано ниже:module Tst include("Tmp.jl") import .Tmp #using .Tmp Tmp.say_hello() # say_hello() # Здесь находится другой ваш тестовый код end
Преимущество в том, что тестовый код теперь находится в модуле и не использует глобальную область в
Main
для определений, а это выглядит аккуратнее. -
Включите (
include
) файлtst.jl
в REPL Julia с помощьюinclude("tst.jl")
. -
Намылить. Смыть. Повторить. Изучите идеи с помощью командной строки
julia
. Сохраните хорошие мысли в файлtst.jl
. Чтобы выполнить файлtst.jl
после его изменения, просто включите его с помощьюinclude
еще раз.
Рабочие процессы на основе Revise
Независимо от того, находитесь ли вы в REPL или в IJulia, вы можете усовершенствовать навыки разработки с помощью Revise. Как правило, Revise можно настроить так, чтобы он запускался при каждом запуске Julia. См инструкции в документации по Revise. После настройки Revise будет отслеживать изменения файлов в любых загруженных модулях и в любых файлах, загруженных в REPL с помощью includet
(но не с помощью обычного include
). Затем можно редактировать файлы, и изменения вступят в силу без перезапуска сеанса Julia. Стандартный рабочий процесс похож на описанный выше рабочий процесс на основе REPL со следующими изменениями.
-
Поместите код в модуль в каком-либо месте в пути загрузки. Существует несколько вариантов выполнения этой задачи. Рекомендуется выбрать два из них.
— Для долгосрочных проектов используйте PkgTemplates.
julia 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 # Введите ] для входа в режим pkg julia> push!(LOAD_PATH, pwd()) # Нажмите клавишу «Пробел» для выхода из режима pkg
При перезапуске сеанса Julia придется заново выполнить эту команду, изменяющую
LOAD_PATH
.На шаге 2 ниже отредактируйте файл
MyPkg/src/MyPkg.jl
, чтобы изменить исходный код, и создайте любой тестовый файл. -
Создайте пакет
Перед загрузкой кода убедитесь в том, что запущен Revise, например с помощью
using Revise
, или следуйте документации по его настройке для автоматического запуска.Затем перейдите в каталог, содержащий тестовый файл (здесь предполагается, что это
"runtests.jl"
), и сделайте следующее.julia> using MyPkg julia> include("runtests.jl")
Вы можете итеративно изменять код в MyPkg в редакторе и повторно запускать тесты с помощью
include("runtests.jl")
. Как правило, не нужно перезапускать сеанс Julia, чтобы увидеть, что изменения вступили в силу (с учетом некоторых ограничений).