Interactive Utilities
Страница в процессе перевода. |
Модуль InteractiveUtils
предоставляет служебные программы для интерактивного использования Julia, такие как интроспекция кода и доступ к буферу обмена. Он предназначен для интерактивной работы и загружается автоматически в интерактивном режиме.
#
Base.Docs.apropos
— Function
apropos([io::IO=stdout], pattern::Union{AbstractString,Regex})
Ищет в доступных docstring записи, содержащие pattern
.
Если pattern
— это строка, регистр символов не учитывается. Результаты выводятся в io
.
apropos
можно вызвать в режиме справки в REPL, заключив запрос в двойные кавычки:
help?> "pattern"
#
InteractiveUtils.varinfo
— Function
varinfo(m::Module=Main, pattern::Regex=r""; all=false, imported=false, recursive=false, sortby::Symbol=:name, minsize::Int=0)
Возвращает таблицу в формате Markdown, содержащую информацию об общедоступных глобальных переменных в модуле, при необходимости ограничивая их соответствующими шаблону pattern
.
Потребление памяти приблизительно соответствует нижней границе размера внутренней структуры объекта.
-
all
: в список также включаются необщедоступные объекты, определенные в модуле, устаревшие объекты и объекты, сгенерированные компилятором. -
imported
: в список также включаются объекты, импортируемые из других модулей. -
recursive
: рекурсивно включает объекты из подмодулей с учетом тех же настроек в каждом из них. -
sortby
: столбец, по которому сортируются результаты. Возможные значения::name
(по умолчанию),:size
и:summary
. -
minsize
: включаются только объекты размером не менееminsize
байт. Значение по умолчанию —0
.
Выходные данные varinfo
предназначены только для отображения. См. также описание функции names
, позволяющей получить массив символов, определенных в модуле, и обеспечивающей более широкие возможности.
#
InteractiveUtils.versioninfo
— Function
versioninfo(io::IO=stdout; verbose::Bool=false)
Выводит информацию об используемой версии Julia. Выходные данные зависят от логических именованных аргументов:
-
verbose
: выводится вся дополнительная информация.
Выходные данные этой функции могут содержать важную информацию. Прежде чем делиться ими, проверьте их и удалите все, что не следует выкладывать в общий доступ. |
См. также описание VERSION
.
#
InteractiveUtils.methodswith
— Function
methodswith(typ[, module or function]; supertypes::Bool=false])
Возвращает массив методов с аргументом типа typ
.
Необязательный второй аргумент ограничивает поиск определенным модулем или функцией (по умолчанию все модули верхнего уровня).
Если именованный аргумент supertypes
имеет значение true
, также возвращаются аргументы с родительским типом typ
, за исключением типа Any
.
См. также описание methods
.
#
InteractiveUtils.subtypes
— Function
subtypes(T::DataType)
Возвращает список непосредственных подтипов DataType T
. Обратите внимание, что включаются все загруженные в данный момент подтипы, включая те, которые недоступны в текущем модуле.
См. также описание supertype
, supertypes
и methodswith
.
Примеры
julia> subtypes(Integer)
3-element Vector{Any}:
Bool
Signed
Unsigned
#
InteractiveUtils.supertypes
— Function
supertypes(T::Type)
Возвращает кортеж (T, ..., Any)
, состоящий из типа T
и всех его супертипов. Определяется путем последовательных вызовов функции supertype
в порядке <:
, завершается типом Any
.
См. также описание subtypes
.
Примеры
julia> supertypes(Int)
(Int64, Signed, Integer, Real, Number, Any)
#
InteractiveUtils.edit
— Method
edit(path::AbstractString, line::Integer=0, column::Integer=0)
Изменяет файл или каталог. При необходимости можно указать номер изменяемой строки в файле. После выхода из редактора происходит возврат к командной строке julia
. Редактор можно изменить с помощью переменных среды JULIA_EDITOR
, VISUAL
и EDITOR
.
Совместимость: Julia 1.9
Для аргумента |
См. также описание InteractiveUtils.define_editor
.
#
InteractiveUtils.edit
— Method
edit(function, [types])
edit(module)
Изменяет определение функции. При необходимости можно указать кортеж типов, чтобы обозначить, какой метод следует изменить. Для модулей открывает главный файл исходного кода. Сначала модуль необходимо загрузить с помощью using
или import
.
Совместимость: Julia 1.1
Для использования |
Чтобы убедиться в том, что файл можно открыть на указанной строке, может потребоваться сначала вызвать InteractiveUtils.define_editor
.
#
InteractiveUtils.define_editor
— Function
define_editor(fn, pattern; wait=false)
Определяет новый редактор, соответствующий pattern
, который можно использовать для открытия файла (возможно, с заданным номером строки) с помощью fn
.
Аргумент fn
— это функция, которая определяет, как файл открывается в указанном редакторе. Он должна принимать четыре аргумента:
-
cmd
— базовый объект команды для редактора; -
path
— путь к открываемому файлу исходного кода; -
line
— номер строки, на которой нужно открыть редактор; -
column
— номер столбца, на котором нужно открыть редактор.
Редакторы, которые не позволяют открыть конкретную строку или столбец с помощью команды, могут игнорировать аргумент line
и (или) column
. Обратный вызов fn
должен возвращать либо соответствующий объект Cmd
для открытия файла, либо nothing
для указания того, что редактирование файла невозможно. nothing
означает, что данный редактор не подходит для текущей среды и следует попробовать другой редактор. Можно добавить более общие перехватчики редактирования, которым не нужно порождать внешние команды, передавая обратный вызов непосредственно вектору EDITOR_CALLBACKS
.
Аргумент pattern
— это строка, регулярное выражение или массив строк и регулярных выражений. Для вызова fn
один из шаблонов должен соответствовать значению EDITOR
, VISUAL
или JULIA_EDITOR
. В случае со строкой она должна быть равна basename
первого слова команды редактора без расширения, если таковое имеется. Например, vi не соответствует vim -g, но соответствует /usr/bin/vi -m, а также vi.exe
. Если pattern
— это регулярное выражение, оно сопоставляется со всеми командами редактора как строка с экранированной оболочкой. Шаблон в виде массива совпадает, если совпадает хотя бы один из его элементов. Если есть совпадения с несколькими редакторами, используется тот, который был добавлен последним.
По умолчанию Julia не дожидается закрытия редактора, выполняя его в фоновом режиме. Однако если редактор работает в режиме терминала, вероятно, будет лучше задать wait=true
, чтобы среда Julia ожидала закрытия редактора, прежде чем возобновить работу.
Если задана одна из переменных среды редактора, но ей не соответствует ни одна запись редактора, вызывается запись редактора по умолчанию:
(cmd, path, line, column) -> `$cmd $path`
Обратите внимание, что многие редакторы определены изначально. Все следующие команды уже должны работать:
-
emacs
-
emacsclient
-
vim
-
nvim
-
nano
-
micro
-
kak
-
helix
-
textmate
-
mate
-
kate
-
subl
-
atom
-
notepad++
-
Visual Studio Code
-
open
-
pycharm
-
bbedit
Примеры
Так можно выбрать редактор emacs
в режиме терминала:
define_editor( r"\bemacs\b.*\\s(-nw|--no-window-system)\b", wait=true) do cmd, path, line `$cmd +$line $path` end
Совместимость: Julia 1.4
Функция |
#
InteractiveUtils.less
— Method
less(file::AbstractString, [line::Integer])
Отображает файл в средстве постраничного просмотра по умолчанию. При необходимости можно указать начальный номер строки. После выхода из средства постраничного просмотра происходит возврат к командной строке julia
.
#
InteractiveUtils.less
— Method
less(function, [types])
Отображает определение функции в средстве постраничного просмотра по умолчанию. При необходимости можно указать кортеж типов, чтобы обозначить, какой метод следует отобразить.
#
InteractiveUtils.@less
— Macro
@less
Вычисляет аргументы функции или макроса, определяет их типы и вызывает функцию less
для полученного выражения.
См. также описание @edit
, @which
, @code_lowered
.
#
InteractiveUtils.@which
— Macro
@which
Применительно к вызову функции или макроса вычисляет аргументы указанного вызова и возвращает объект Method
для метода, который был бы вызван для этих аргументов. Применительно к переменной возвращает модуль, в котором была связана переменная. Вызывает функцию which
.
#
InteractiveUtils.@functionloc
— Macro
@functionloc
Применительно к вызову функции или макроса вычисляет аргументы указанного вызова и возвращает кортеж (filename,line)
с расположением метода, который был бы вызван для этих аргументов. Вызывает функцию functionloc
.
#
InteractiveUtils.@code_lowered
— Macro
@code_lowered
Вычисляет аргументы функции или макроса, определяет их типы и вызывает code_lowered
для полученного выражения.
См. также описание code_lowered
, @code_warntype
, @code_typed
, @code_llvm
, @code_native
.
#
InteractiveUtils.@code_typed
— Macro
@code_typed
Вычисляет аргументы функции или макроса, определяет их типы и вызывает code_typed
для полученного выражения. Используйте необязательный аргумент optimize
с
@code_typed optimize=true foo(x)
для указания того, применяются ли дополнительные оптимизации, такие как встраивание.
См. также описание code_typed
, @code_warntype
, @code_lowered
, @code_llvm
, @code_native
.
#
InteractiveUtils.code_warntype
— Function
code_warntype([io::IO], f, types; debuginfo=:default)
Выводит представления AST пониженной формы и с выводом типов для методов, соответствующих заданной универсальной функции и сигнатуре типа, в io
(по умолчанию stdout
). AST аннотируются так, чтобы выделить «неконечные» типы, которые могут вызывать проблемы с точки зрения производительности (отображаются красным, если возможно). Это служит предупреждением о потенциальной нестабильности типа.
Не все неконечные типы проблематичны с точки зрения производительности. Характеристики производительности конкретного типа зависят от особенностей реализации компилятора. code_warntype
может ошибочно окрашивать типы в красный цвет как представляющие проблему с точки зрения производительности, поэтому некоторые типы могут быть выделяться красным, даже если они не влияют на производительность. Небольшие объединения конкретных типов обычно не вызывают проблем, поэтому они выделяются желтым цветом.
Именованный аргумент debuginfo
определяет подробность комментариев к коду и может иметь одно из значений :source
или :none
(по умолчанию).
Дополнительные сведения см. в разделе @code_warntype
на странице «Советы по производительности» руководства.
См. также описание @code_warntype
, code_typed
, code_lowered
, code_llvm
, code_native
.
#
InteractiveUtils.@code_warntype
— Macro
@code_warntype
Вычисляет аргументы функции или макроса, определяет их типы и вызывает code_warntype
для полученного выражения.
См. также описание code_warntype
, @code_typed
, @code_lowered
, @code_llvm
, @code_native
.
#
InteractiveUtils.code_llvm
— Function
code_llvm([io=stdout,], f, types; raw=false, dump_module=false, optimize=true, debuginfo=:default)
Выводит битовые коды LLVM, сгенерированные для выполнения метода, который соответствует заданной универсальной функции и сигнатуре типа, в io
.
Если именованный аргумент optimize
не задан, будет показан код до оптимизаций LLVM. Из выводимого битового кода удаляются все метаданные и вызовы dbg.*. Чтобы увидеть полное представление IR, задайте именованный аргумент raw
со значением true. Чтобы получить дамп всего модуля, инкапсулирующего функцию (с объявлениями), задайте ключевое слово dump_module
со значением true. Именованный аргумент debuginfo
определяет подробность комментариев к коду и может иметь одно из значений source или none (по умолчанию).
См. также описание @code_llvm
, code_warntype
, code_typed
, code_lowered
, code_native
.
#
InteractiveUtils.@code_llvm
— Macro
@code_llvm
Вычисляет аргументы функции или макроса, определяет их типы и вызывает code_llvm
для полученного выражения. Задайте необязательные именованные аргументы raw
, dump_module
, debuginfo
, optimize
, поместив их и их значения перед вызовом функции следующим образом:
@code_llvm raw=true dump_module=true debuginfo=:default f(x) @code_llvm optimize=false f(x)
optimize
определяет, применяются ли дополнительные оптимизации, такие как встраивание. raw
отображает все метаданные и вызовы dbg.*. debuginfo
определяет подробность комментариев к коду и может иметь одно из значений :source
или :none
(по умолчанию). dump_module
выводит весь модуль, инкапсулирующий функцию.
См. также описание code_llvm
, @code_warntype
, @code_typed
, @code_lowered
, @code_native
.
#
InteractiveUtils.code_native
— Function
code_native([io=stdout,], f, types; syntax=:intel, debuginfo=:default, binary=false, dump_module=true)
Выводит собственные инструкции сборки, сгенерированные для выполнения метода, который соответствует заданной универсальной функции и сигнатуре типа, в io
.
-
Чтобы задать синтаксис сборки, присвойте
syntax
значение:intel
(по умолчанию) для синтаксиса Intel или:att
для синтаксиса AT&T. -
Чтобы указать уровень детализации комментариев к коду, присвойте
debuginfo
значение:source
(по умолчанию) или:none
. -
Если
binary
имеет значениеtrue
, также выводится двоичный машинный код каждой инструкции с сокращенным адресом перед ним. -
Если
dump_module
имеет значениеfalse
, метаданные, такие как rodata или директивы, не выводятся. -
Если
raw
имеет значениеfalse
, опускаются не представляющие интереса инструкции (например, пролог функции безопасной точки).
См. также описание @code_native
, code_warntype
, code_typed
, code_lowered
, code_llvm
.
#
InteractiveUtils.@code_native
— Macro
@code_native
Вычисляет аргументы функции или макроса, определяет их типы и вызывает code_native
для полученного выражения.
Задайте необязательные именованные аргументы syntax
, debuginfo
, binary
или dump_module
, поместив их перед вызовом функции следующим образом:
@code_native syntax=:intel debuginfo=:default binary=true dump_module=false f(x)
-
Чтобы задать синтаксис сборки, присвойте
syntax
значение:intel
(по умолчанию) для синтаксиса Intel или:att
для синтаксиса AT&T. -
Чтобы указать уровень детализации комментариев к коду, присвойте
debuginfo
значение:source
(по умолчанию) или:none
. -
Если
binary
имеет значениеtrue
, также выводится двоичный машинный код каждой инструкции с сокращенным адресом перед ним. -
Если
dump_module
имеет значениеfalse
, метаданные, такие как rodata или директивы, не выводятся.
См. также описание code_native
, @code_warntype
, @code_typed
, @code_lowered
, @code_llvm
.
#
Base.@time_imports
— Macro
@time_imports
Макрос для вычисления выражения и создания отчета о времени, затраченном на импорт пакетов и их зависимостей. Время компиляции указывается в процентах. Кроме того указывается доля времени, затраченного на перекомпиляцию (если таковая потребовалась).
Для каждого пакета или расширение пакета выводится одна строка. Отображаемая продолжительность — это время импорта самого пакета без учета времени загрузки его зависимостей.
Начиная с Julia 1.9 для расширений пакетов указываются родительский пакет и расширение.
В процессе загрузки пакет последовательно импортирует все свои зависимости, а не только прямые. |
julia> @time_imports using CSV
50.7 ms Parsers 17.52% compilation time
0.2 ms DataValueInterfaces
1.6 ms DataAPI
0.1 ms IteratorInterfaceExtensions
0.1 ms TableTraits
17.5 ms Tables
26.8 ms PooledArrays
193.7 ms SentinelArrays 75.12% compilation time
8.6 ms InlineStrings
20.3 ms WeakRefStrings
2.0 ms TranscodingStreams
1.4 ms Zlib_jll
1.8 ms CodecZlib
0.8 ms Compat
13.1 ms FilePathsBase 28.39% compilation time
1681.2 ms CSV 92.40% compilation time
Совместимость: Julia 1.8
Для этого макроса требуется версия Julia не ниже 1.8. |
#
InteractiveUtils.clipboard
— Function
clipboard(x)
Отправляет пригодную для отображения форму x
в буфер обмена операционной системы («копировать»).
clipboard() -> String
Возвращает строку с содержимым буфера обмена операционной системы («вставить»).