Interactive Utilities

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

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

Ищет доступные строки документации для записей, содержащих pattern.

Когда pattern является строкой, регистр игнорируется. Результаты выводятся в io.

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

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

source
InteractiveUtils.versioninfoFunction
versioninfo(io::IO=stdout; verbose::Bool=false)

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

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

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

См. также: VERSION.

source
InteractiveUtils.methodswithFunction
methodswith(typ[, модуль или функция]; суперклассы::Bool=false])

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

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

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

См. также: methods.

source
InteractiveUtils.subtypesFunction
subtypes(T::DataType)

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

Смотрите также supertype, supertypes, methodswith.

Примеры

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

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

Смотрите также subtypes.

Примеры

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

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

Julia 1.9

Аргумент column требует как минимум Julia 1.9.

Смотрите также InteractiveUtils.define_editor.

source
InteractiveUtils.editMethod
edit(function, [types])
edit(module)

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

Julia 1.1

edit для модулей требует как минимум Julia 1.1.

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

source
InteractiveUtils.@editMacro
@edit

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

См. также: @less, @which.

source
InteractiveUtils.define_editorFunction
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.

source
InteractiveUtils.lessMethod
less(file::AbstractString, [line::Integer])

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

source
InteractiveUtils.lessMethod
less(function, [types])

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

source
InteractiveUtils.@lessMacro
@less

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

См. также: @edit, @which, @code_lowered.

source
InteractiveUtils.@whichMacro
@which

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

Смотрите также: @less, @edit.

source
InteractiveUtils.@functionlocMacro
@functionloc

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

source
InteractiveUtils.@code_typedMacro
@code_typed

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

@code_typed optimize=true foo(x)

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

Смотрите также: code_typed, @code_warntype, @code_lowered, @code_llvm, @code_native.

source
InteractiveUtils.code_warntypeFunction
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.

source
InteractiveUtils.code_llvmFunction
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.

source
InteractiveUtils.@code_llvmMacro
@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.

source
InteractiveUtils.code_nativeFunction
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, неинтересные инструкции (такие как пролог функции safepoint) опускаются.

Смотрите также: @code_native, code_warntype, code_typed, code_lowered, code_llvm.

source
InteractiveUtils.@code_nativeMacro
@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.

source
Base.@time_importsMacro
@time_imports

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

На каждую строку выводится информация о пакете или расширении пакета. Продолжительность, указанная в отчете, — это время на импорт самого пакета, не включая время загрузки его зависимостей.

В Julia 1.9+ расширения пакетов будут отображаться как Родитель → Расширение.

Note

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

julia> @time_imports using CSV
     50.7 ms  Parsers 17.52% время компиляции
      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% время компиляции
      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% время компиляции
   1681.2 ms  CSV 92.40% время компиляции
Julia 1.8

Этот макрос требует как минимум Julia 1.8

source
InteractiveUtils.clipboardFunction
clipboard(x)

Отправляет печатную форму x в буфер обмена операционной системы ("копировать").

source
clipboard() -> String

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

source