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

Интерфейс командной строки

Использование аргументов внутри скриптов

При запуске скрипта с помощью julia в него можно передать дополнительные аргументы:

$ julia script.jl arg1 arg2...

Эти дополнительные аргументы командной строки передаются в глобальной константе ARGS. Имя самого скрипта передается в глобальной константе PROGRAM_FILE. Обратите внимание: константа ARGS также задается при вычислении выражения Julia, переданного через командную строку с помощью параметра -e (см. выходные данные справки julia ниже), но константа PROGRAM_FILE будет пустой. Например, вывести только аргументы, переданные в скрипт, можно так.

$ julia -e 'println(PROGRAM_FILE); for x in ARGS; println(x); end' foo bar

foo
bar

Этот код можно также поместить в скрипт и запустить:

$ echo 'println(PROGRAM_FILE); for x in ARGS; println(x); end' > script.jl
$ julia script.jl foo bar
script.jl
foo
bar

С помощью разделителя -- можно отделить аргументы командной строки, предназначенные для файла скрипта, от аргументов, предназначенных для Julia:

$ julia --color=yes -O -- script.jl arg1 arg2..

Дополнительные сведения о написании скриптов Julia см. в разделе Скрипты.

Точка входа Main.main

Начиная с версии Julia (1.11) Base экспортирует макрос @main. Этот макрос расширяется до символа main, но по завершении выполнения сценария или выражения julia попытается выполнить функцию Main.main(ARGS), если такая функция была определена, и это поведение было выбрано с помощью макроса @main.

Эта возможность призвана помочь в унификации скомпилированных и интерактивных рабочих процессов. В скомпилированных рабочих процессах загрузка кода, определяющего функцию main, может быть пространственно и временно отделена от ее вызова. Однако для интерактивных рабочих процессов такое поведение аналогично явному вызову exit(main(ARGS)) в конце определяемого скрипта или выражения.

Совместимость: Julia 1.11

Специальная точка входа Main.main была добавлена в Julia 1.11. Для совместимости с предыдущими версиями Julia добавьте явный макрос @isdefined(var"@main") ? (@main) : exit(main(ARGS)) в конце скриптов.

Чтобы увидеть эту возможность в действии, рассмотрим следующее определение, которое выполнит функцию print, несмотря на отсутствие явного вызова main:

$ julia -e '(@main)(args) = println("Hello World!")'
Hello World!

Так действует только привязка main в модуле Main и только в случае, если макрос @main был использован в определяющем модуле.

Например, при использовании hello вместо main функция hello выполнена не будет:

$ julia -e 'hello(ARGS) = println("Hello World!")'

как и простое определение main:

$ julia -e 'main(ARGS) = println("Hello World!")'

Однако необязательно, чтобы принятие происходило во время определения:

$ julia -e 'main(ARGS) = println("Hello World!"); @main'
Hello World!

Привязку main можно импортировать из пакета. Пакет hello world, определенный следующим образом:

module Hello

export main
(@main)(args) = println("Hello from the package!")

end

можно использовать, как показано далее:

$ julia -e 'using Hello'
Hello from the package!
$ julia -e 'import Hello' # Примечание. Выполнение зависит от привязки, а не от того, загружен ли пакет.

Однако обратите внимание, что в настоящее время рекомендуется не смешивать код приложения и многократно используемой библиотеки в одном пакете. Вспомогательные приложения-помощники могут распространяться как отдельные пакеты или как скрипты с отдельными точками входа main в папке bin пакета.

Параллельный режим

Julia можно запустить в параллельном режиме с помощью параметра -p или --machine-file. Параметр -p n запускает дополнительно n рабочих процессов, а --machine-file file — рабочий процесс для каждой строки в файле file. Компьютеры, указанные в аргументе file, должны быть доступны по протоколу ssh без пароля, причем среда Julia должна быть установлена в расположении текущего хоста. Каждый компьютер указывается в следующей форме: [count*][user@]host[:port] [bind_addr[:port]]. По умолчанию user — это текущий пользователь, а port — стандартный SSH-порт. count — это количество рабочих процессов, порождаемых на узле (по умолчанию 1). Необязательный элемент bind-to bind_addr[:port] определяет IP-адрес и порт, которые другие рабочие процессы должны использовать для подключения к данному процессу.

Файл запуска

Код, который должен выполняться при каждом запуске Julia, можно поместить в файл ~/.julia/config/startup.jl:

$ echo 'println("Greetings! 你好! 안녕하세요?")' > ~/.julia/config/startup.jl
$ julia
Greetings! 你好! 안녕하세요?

...

Обратите внимание: каталог ~/.julia должен существовать после первого запуска Julia, однако папку ~/.julia/config и файл ~/.julia/config/startup.jl может потребоваться создать вручную.

Чтобы код запуска выполнялся только в REPL Julia (а, например, не при запуске julia в скрипте), используйте atreplinit в startup.jl:

atreplinit() do repl
    # ...
end

Параметры командной строки для Julia

Так же как программы на perl и ruby, запускать код Julia с указанием параметров можно разными способами:

julia [switches] -- [programfile] [args...]

Ниже приведен полный список параметров командной строки, доступных при запуске Julia (символом «*» помечено значение по умолчанию, если оно есть; параметры с пометкой «($)» могут инициировать предварительную компиляцию пакета).

Параметр Описание

-v, --version

Выводит сведения о версии.

-h, --help

Выводит параметры командной строки (содержимое данной таблицы).

--help-hidden

Выводит редкие параметры, не отображаемые при использовании параметра -h.

--project[={<dir>|@.}]

Устанавливает каталог <dir> в качестве активного проекта или среды. При использовании значения по умолчанию @. в родительских каталогах ищется файл Project.toml или JuliaProject.toml.

-J, --sysimage <file>

Запуск с использованием указанного файла образа системы

-H, --home <dir>

Задает расположение исполняемого файла julia.

--startup-file={yes*|no}

Загружает файл JULIA_DEPOT_PATH/config/startup.jl. Если переменная среды JULIA_DEPOT_PATH не задана, загружает файл ~/.julia/config/startup.jl.

--handle-signals={yes*|no}

Включает или отключает обработчики сигналов Julia по умолчанию.

--sysimage-native-code={yes*|no}

Использует машинный код из образа системы, если он доступен.

--compiled-modules={yes*|no|existing|strict}

Включает или отключает инкрементную предварительную компиляцию модулей. Параметр existing позволяет использовать существующие скомпилированные модули, которые были ранее предварительно скомпилированы, но запрещает создание новых файлов предварительной компиляции. Параметр strict является аналогичным, но при отсутствии файла предварительной компиляции возникнет ошибка.

--pkgimages={yes*|no|existing}

Включает или отключает использование кэширования машинного кода в форме pkgimages. Параметр existing позволяет использовать существующие pkgimages, но запрещает создание новых.

-e, --eval <expr>

Вычисляет выражение <expr>.

-E, --print <expr>

Вычисляет выражение <expr> и выводит результат.

-m, --module <Package> [args]

Выполняет точку входа Package (функцию @main) с args.

-L, --load <file>

Немедленно загружает файл <file> на всех процессорах.

-t, --threads {auto|N[,auto|M]}

Активирует N[+M] потоков. N потоков назначаются пулу потоков default, а если указано M, то M потоков назначаются пулу потоков interactive. При значении auto производится попытка вывести подходящее количество потоков по умолчанию, но особенности поведения могут в будущем измениться. В настоящее время N устанавливается равным количеству ЦП, назначенных данному процессу Julia посредством интерфейса присваивания привязки, характерного для ОС (Linux или Windows), если он поддерживается, либо равным количеству потоков ЦП, если этот интерфейс не поддерживается (MacOS) или если привязка процессов не настроена. M устанавливается равным 1.

--gcthreads=N[,M]

Используйте N потоков для этапа пометки в ходе сборки мусора и M потоков (0 или 1) для этапа параллельной очистки. N устанавливается равным половине количества вычислительных потоков, а M — равным 0, если не указано иное.

-p, --procs {N|auto}

Запускает N дополнительных локальных рабочих процессов (N — целое число). При использовании значения auto количество запускаемых рабочих процессов равно количеству локальных потоков ЦП (логических ядер).

--machine-file <file>

Запускает процессы на узлах, перечисленных в <file>.

-i, --interactive

Интерактивный режим; REPL выполняется, isinteractive() имеет значение true.

-q, --quiet

Запуск без сообщений: баннер не выводится, предупреждения REPL скрываются.

--banner={yes|no|short|auto*}

Включает или отключает загрузочный баннер.

--color={yes|no|auto*}

Включает или отключает цветной текст.

--history-file={yes*|no}

Загружает или сохраняет историю.

--depwarn={yes|no*|error}

Включает или отключает предупреждения о синтаксисе и выводе методов из использования (при использовании значения error вместо предупреждений выдаются ошибки).

--warn-overwrite={yes|no*}

Включает или отключает предупреждения о перезаписи методов.

--warn-scope={yes*|no}

Включает или отключает предупреждение о неоднозначной области верхнего уровня.

-C, --cpu-target <target>

Ограничивает использование функций ЦП на уровне <target>. Чтобы просмотреть доступные варианты, задайте значение help.

-O, --optimize={0|1|2*|3}

Задает уровень оптимизации (уровень 3, если параметр -O используется без указания уровня) ($).

--min-optlevel={0*|1|2|3}

Задает нижнюю границу для оптимизации на уровне модулей.

-g, --debug-info={0|1*|2}

Задает уровень создаваемой отладочной информации (уровень 2, если параметр -g используется без указания уровня) ($).

--inline={yes|no}

Определяет, разрешено ли встраивание, включая переопределение объявлений @inline.

--check-bounds={yes|no|auto*}

Определяет, выполняются ли проверки границ всегда, никогда или с учетом объявлений @inbounds ($).

--math-mode={ieee,fast}

Включает или отключает небезопасные оптимизации значений с плавающей запятой (переопределяет объявление @fastmath).

--polly={yes*|no}

Включает или отключает полиэдрический оптимизатор Polly (переопределяет объявление @polly).

--code-coverage[={none*|user|all}]

Подсчитывает количество выполнений строк исходного кода (если значение не указано, используется значение user).

--code-coverage=@<path>

Подсчитывает выполнения, но только в файлах, находящих по указанному пути или в указанном каталоге. Для выбора этого параметра требуется префикс @. Если после символа @ нет пути, отслеживается текущий каталог.

--code-coverage=tracefile.info

Добавляет информацию о покрытии кода в файл трассировки LCOV (имя файла поддерживает токены формата).

--track-allocation[={none*|user|all}]

Подсчитывает количество байтов, выделяемых каждой строкой исходного кода (если значение не указано, используется значение user).

--track-allocation=@<path>

Подсчитывает байты, но только в файлах, находящих по указанному пути или в указанном каталоге. Для выбора этого параметра требуется префикс @. Если после символа @ нет пути, отслеживается текущий каталог.

--bug-report=KIND

Запускает сеанс отчета об ошибках. Может использоваться для запуска REPL, выполнения скрипта или вычисления выражений. Сначала пытается использовать файл BugReporting.jl, установленный в текущей среде. Если попытка не удается, применяется последний совместимый файл BugReporting.jl. Дополнительные сведения см. в описании параметра --bug-report=help.

--heap-size-hint=<size>

Принудительно запускает сборку мусора, если использование памяти превышает заданное значение. Значение может быть указано в виде количества байтов (в том числе в КБ, МБ, ГБ или ТБ) или в виде процента (%) от объема физической памяти.

--compile={yes*|no|all|min}

Включает или отключает JIT-компилятор либо запрашивает исчерпывающую или минимальную компиляцию.

--output-o <name>

Создает объектный файл (включая данные образа системы).

--output-ji <name>

Создает файл данных образа системы (.ji).

--strip-metadata

Удаляет строки docstring и информацию о расположении исходного кода из образа системы.

--strip-ir

Удаляет промежуточное представление (IR) скомпилированных функций.

--output-unopt-bc <name>

Создает неоптимизированный битовый код LLVM (.bc).

--output-bc <name>

Создает битовый код LLVM (.bc).

--output-asm <name>

Создает файл сборки (.s).

--output-incremental={yes|no*}

Создает добавочный (неполный) файл выходных данных.

--trace-compile={stderr|name}

Выводит на экран операторы предварительной компиляции для методов, компилируемых во время выполнения, или сохраняет их по указанному пути.

--image-codegen

Принудительно генерирует код в режиме создания образа.

--permalloc-pkgimg={yes|no*}

Копирует раздел данных образов пакетов в память.

Совместимость: Julia 1.1

В Julia 1.0 при использовании параметра --project=@. по умолчанию поиск файла Project.toml не производился из корневого каталога репозитория Git. Начиная с версии Julia 1.1 такой поиск производится.