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
Unsigned
InteractiveUtils.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`
end
define_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
Возвращает строку с содержимым буфера обмена операционной системы ("вставить").