Interactive Utilities
Модуль InteractiveUtils предоставляет утилиты для интерактивного использования Julia, такие как интроспекция кода и доступ к буферу обмена. Он предназначен для интерактивной работы и загружается автоматически в interactive mode.
Base.Docs.apropos — Functionapropos([io::IO=stdout], pattern::Union{AbstractString,Regex})Ищет доступные строки документации для записей, содержащих pattern.
Когда pattern является строкой, регистр игнорируется. Результаты выводятся в io.
apropos можно вызвать из режима помощи в REPL, обернув запрос в двойные кавычки:
help?> "pattern"InteractiveUtils.varinfo — Functionvarinfo(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 — Functionversioninfo(io::IO=stdout; verbose::Bool=false)Выводит информацию о версии используемой Julia. Вывод контролируется с помощью логических аргументов:
verbose: выводить всю дополнительную информацию
Вывод этой функции может содержать конфиденциальную информацию. Прежде чем делиться выводом, пожалуйста, просмотрите его и удалите любые данные, которые не следует публиковать.
См. также: VERSION.
InteractiveUtils.methodswith — Functionmethodswith(typ[, модуль или функция]; суперклассы::Bool=false])Возвращает массив методов с аргументом типа typ.
Необязательный второй аргумент ограничивает поиск определенным модулем или функцией (по умолчанию это все модули верхнего уровня).
Если ключевое слово суперклассы равно true, также возвращает аргументы с родительским типом typ, исключая тип Any.
См. также: methods.
InteractiveUtils.subtypes — Functionsubtypes(T::DataType)Возвращает список непосредственных подтипов типа данных T. Обратите внимание, что все в настоящее время загруженные подтипы включены, включая те, которые не видны в текущем модуле.
Смотрите также supertype, supertypes, methodswith.
Примеры
julia> subtypes(Integer)
3-element Vector{Any}:
Bool
Signed
UnsignedInteractiveUtils.supertypes — Functionsupertypes(T::Type)Возвращает кортеж (T, ..., Any) из T и всех его суперклассов, определяемых последовательными вызовами функции supertype, перечисленными в порядке <: и завершенными Any.
Смотрите также subtypes.
Примеры
julia> supertypes(Int)
(Int64, Signed, Integer, Real, Number, Any)InteractiveUtils.edit — Methodedit(path::AbstractString, line::Integer=0, column::Integer=0)Редактируйте файл или каталог, при необходимости указав номер строки для редактирования файла. Вернитесь к julia приглашению, когда выйдете из редактора. Редактор можно изменить, установив JULIA_EDITOR, VISUAL или EDITOR в качестве переменной окружения.
Аргумент column требует как минимум Julia 1.9.
Смотрите также InteractiveUtils.define_editor.
InteractiveUtils.edit — Methodedit(function, [types])
edit(module)Измените определение функции, при необходимости указав кортеж типов, чтобы указать, какой метод редактировать. Для модулей откройте основной исходный файл. Модуль необходимо сначала загрузить с помощью using или import.
edit для модулей требует как минимум Julia 1.1.
Чтобы убедиться, что файл может быть открыт на указанной строке, вам может потребоваться сначала вызвать InteractiveUtils.define_editor.
InteractiveUtils.@edit — Macro@editОценивает аргументы вызова функции или макроса, определяет их типы и вызывает функцию edit на полученном выражении.
InteractiveUtils.define_editor — Functiondefine_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`
enddefine_editor был введен в Julia 1.4.
InteractiveUtils.less — Methodless(file::AbstractString, [line::Integer])Показать файл с использованием стандартного постраничного просмотра, при необходимости указав номер начальной строки. Возвращается к подсказке julia, когда вы выходите из постраничного просмотра.
InteractiveUtils.less — Methodless(function, [types])Показать определение функции с использованием стандартного просмотрщика, при необходимости указав кортеж типов, чтобы указать, какой метод увидеть.
InteractiveUtils.@less — Macro@lessОценивает аргументы вызова функции или макроса, определяет их типы и вызывает функцию less на полученном выражении.
См. также: @edit, @which, @code_lowered.
InteractiveUtils.@which — Macro@whichПримененный к вызову функции или макроса, он оценивает аргументы для указанного вызова и возвращает объект Method для метода, который будет вызван для этих аргументов. Примененный к переменной, он возвращает модуль, в котором была связана переменная. Он вызывает функцию which.
InteractiveUtils.@functionloc — Macro@functionlocПрименяемый к вызову функции или макроса, он оценивает аргументы для указанного вызова и возвращает кортеж (имя_файла, строка), указывающий местоположение метода, который будет вызван для этих аргументов. Он вызывает функцию 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 — Functioncode_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 — Functioncode_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 — Functioncode_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.
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% время компиляции
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
InteractiveUtils.clipboard — Functionclipboard(x)Отправляет печатную форму x в буфер обмена операционной системы ("копировать").
clipboard() -> StringВозвращает строку с содержимым буфера обмена операционной системы ("вставить").