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

Interactive Utilities

Страница в процессе перевода.

Модуль InteractiveUtils предоставляет служебные программы для интерактивного использования Julia, такие как интроспекция кода и доступ к буферу обмена. Он предназначен для интерактивной работы и загружается автоматически в интерактивном режиме.

apropos([io::IO=stdout], pattern::Union{AbstractString,Regex})

Ищет в доступных docstring записи, содержащие pattern.

Если pattern — это строка, регистр символов не учитывается. Результаты выводятся в io.

apropos можно вызвать в режиме справки в REPL, заключив запрос в двойные кавычки:

help?> "pattern"
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, позволяющей получить массив символов, определенных в модуле, и обеспечивающей более широкие возможности.

versioninfo(io::IO=stdout; verbose::Bool=false)

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

  • verbose: выводится вся дополнительная информация.

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

См. также описание VERSION.

methodswith(typ[, module or function]; supertypes::Bool=false])

Возвращает массив методов с аргументом типа typ.

Необязательный второй аргумент ограничивает поиск определенным модулем или функцией (по умолчанию все модули верхнего уровня).

Если именованный аргумент supertypes имеет значение true, также возвращаются аргументы с родительским типом typ, за исключением типа Any.

См. также описание methods.

subtypes(T::DataType)

Возвращает список непосредственных подтипов DataType T. Обратите внимание, что включаются все загруженные в данный момент подтипы, включая те, которые недоступны в текущем модуле.

См. также описание supertype, supertypes и methodswith.

Примеры

julia> subtypes(Integer)
3-element Vector{Any}:
 Bool
 Signed
 Unsigned
supertypes(T::Type)

Возвращает кортеж (T, ..., Any), состоящий из типа T и всех его супертипов. Определяется путем последовательных вызовов функции supertype в порядке <:, завершается типом Any.

См. также описание subtypes.

Примеры

julia> supertypes(Int)
(Int64, Signed, Integer, Real, Number, Any)
edit(path::AbstractString, line::Integer=0, column::Integer=0)

Изменяет файл или каталог. При необходимости можно указать номер изменяемой строки в файле. После выхода из редактора происходит возврат к командной строке julia. Редактор можно изменить с помощью переменных среды JULIA_EDITOR, VISUAL и EDITOR.

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

Для аргумента column требуется версия Julia не ниже 1.9.

См. также описание InteractiveUtils.define_editor.

edit(function, [types])
edit(module)

Изменяет определение функции. При необходимости можно указать кортеж типов, чтобы обозначить, какой метод следует изменить. Для модулей открывает главный файл исходного кода. Сначала модуль необходимо загрузить с помощью using или import.

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

Для использования edit применительно к модулям требуется версия Julia не ниже 1.1.

Чтобы убедиться в том, что файл можно открыть на указанной строке, может потребоваться сначала вызвать InteractiveUtils.define_editor.

@edit

Вычисляет аргументы функции или макроса, определяет их типы и вызывает функцию edit для полученного выражения.

См. также описание @less, @which.

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

Функция define_editor появилась в версии Julia 1.4.

less(file::AbstractString, [line::Integer])

Отображает файл в средстве постраничного просмотра по умолчанию. При необходимости можно указать начальный номер строки. После выхода из средства постраничного просмотра происходит возврат к командной строке julia.

less(function, [types])

Отображает определение функции в средстве постраничного просмотра по умолчанию. При необходимости можно указать кортеж типов, чтобы обозначить, какой метод следует отобразить.

@less

Вычисляет аргументы функции или макроса, определяет их типы и вызывает функцию less для полученного выражения.

См. также описание @edit, @which, @code_lowered.

@which

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

См. также описание @less, @edit.

@functionloc

Применительно к вызову функции или макроса вычисляет аргументы указанного вызова и возвращает кортеж (filename,line) с расположением метода, который был бы вызван для этих аргументов. Вызывает функцию functionloc.

@code_lowered

Вычисляет аргументы функции или макроса, определяет их типы и вызывает code_lowered для полученного выражения.

См. также описание code_lowered, @code_warntype, @code_typed, @code_llvm, @code_native.

@code_typed

Вычисляет аргументы функции или макроса, определяет их типы и вызывает code_typed для полученного выражения. Используйте необязательный аргумент optimize с

@code_typed optimize=true foo(x)

для указания того, применяются ли дополнительные оптимизации, такие как встраивание.

См. также описание code_typed, @code_warntype, @code_lowered, @code_llvm, @code_native.

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.

@code_warntype

Вычисляет аргументы функции или макроса, определяет их типы и вызывает code_warntype для полученного выражения.

См. также описание code_warntype, @code_typed, @code_lowered, @code_llvm, @code_native.

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.

@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.

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.

@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.

@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.

clipboard(x)

Отправляет пригодную для отображения форму x в буфер обмена операционной системы («копировать»).


clipboard() -> String

Возвращает строку с содержимым буфера обмена операционной системы («вставить»).