Interactive Utilities
El módulo InteractiveUtils proporciona utilidades para el uso interactivo de Julia, como la introspección de código y el acceso al portapapeles. Está destinado al trabajo interactivo y se carga automáticamente en interactive mode.
Base.Docs.apropos — Functionapropos([io::IO=stdout], pattern::Union{AbstractString,Regex})Busca las cadenas de documentación disponibles para las entradas que contienen pattern.
Cuando pattern es una cadena, se ignora el caso. Los resultados se imprimen en io.
apropos se puede llamar desde el modo de ayuda en el REPL envolviendo la consulta entre comillas dobles:
help?> "pattern"InteractiveUtils.varinfo — Functionvarinfo(m::Module=Main, pattern::Regex=r""; all=false, imported=false, recursive=false, sortby::Symbol=:name, minsize::Int=0)Devuelve una tabla en markdown que proporciona información sobre variables globales públicas en un módulo, restringidas opcionalmente a aquellas que coinciden con pattern.
La estimación del consumo de memoria es un límite inferior aproximado del tamaño de la estructura interna del objeto.
all: también lista objetos no públicos definidos en el módulo, objetos obsoletos y objetos generados por el compilador.imported: también lista objetos importados explícitamente de otros módulos.recursive: incluye recursivamente objetos en sub-módulos, observando la misma configuración en cada uno.sortby: la columna por la que ordenar los resultados. Las opciones son:name(predeterminado),:sizey:summary.minsize: solo incluye objetos con un tamaño de al menosminsizebytes. Por defecto es0.
La salida de varinfo está destinada solo a fines de visualización. Véase también names para obtener un array de símbolos definidos en un módulo, que es adecuado para manipulaciones más generales.
InteractiveUtils.versioninfo — Functionversioninfo(io::IO=stdout; verbose::Bool=false)Imprime información sobre la versión de Julia en uso. La salida se controla con argumentos de palabra clave booleanos:
verbose: imprime toda la información adicional
La salida de esta función puede contener información sensible. Antes de compartir la salida, revise la salida y elimine cualquier dato que no deba compartirse públicamente.
Véase también: VERSION.
InteractiveUtils.methodswith — Functionmethodswith(typ[, módulo o función]; supertypes::Bool=false])Devuelve un array de métodos con un argumento de tipo typ.
El segundo argumento opcional restringe la búsqueda a un módulo o función particular (el valor predeterminado son todos los módulos de nivel superior).
Si la palabra clave supertypes es true, también devuelve argumentos con un tipo padre de typ, excluyendo el tipo Any.
Véase también: methods. ```
InteractiveUtils.subtypes — Functionsubtipos(T::DataType)Devuelve una lista de subtipos inmediatos del tipo de dato T. Ten en cuenta que se incluyen todos los subtipos actualmente cargados, incluidos aquellos que no son visibles en el módulo actual.
Consulta también supertype, supertypes, methodswith.
Ejemplos
julia> subtipos(Integer)
3-element Vector{Any}:
Bool
Signed
UnsignedInteractiveUtils.supertypes — Functionsupertypes(T::Type)Devuelve una tupla (T, ..., Any) de T y todos sus supertipos, según lo determinado por llamadas sucesivas a la función supertype, listados en orden de <: y terminados por Any.
Véase también subtypes.
Ejemplos
julia> supertypes(Int)
(Int64, Signed, Integer, Real, Number, Any)InteractiveUtils.edit — Methodedit(path::AbstractString, line::Integer=0, column::Integer=0)Edita un archivo o directorio proporcionando opcionalmente un número de línea para editar el archivo. Regresa al prompt de julia cuando salgas del editor. El editor se puede cambiar configurando JULIA_EDITOR, VISUAL o EDITOR como una variable de entorno.
El argumento column requiere al menos Julia 1.9.
Consulta también InteractiveUtils.define_editor.
InteractiveUtils.edit — Methodedit(function, [types])
edit(module)Edita la definición de una función, especificando opcionalmente una tupla de tipos para indicar qué método editar. Para los módulos, abre el archivo fuente principal. El módulo debe ser cargado con using o import primero.
edit en módulos requiere al menos Julia 1.1.
Para asegurarte de que el archivo se pueda abrir en la línea dada, es posible que necesites llamar a InteractiveUtils.define_editor primero.
InteractiveUtils.@edit — Macro@editEvalúa los argumentos de la llamada a la función o macro, determina sus tipos y llama a la función edit en la expresión resultante.
InteractiveUtils.define_editor — Functiondefine_editor(fn, pattern; wait=false)Define un nuevo editor que coincida con pattern que se puede usar para abrir un archivo (posiblemente en un número de línea dado) usando fn.
El argumento fn es una función que determina cómo abrir un archivo con el editor dado. Debe tomar cuatro argumentos, de la siguiente manera:
cmd- un objeto de comando base para el editorpath- la ruta al archivo fuente que se va a abrirline- el número de línea para abrir el editorcolumn- el número de columna para abrir el editor
Los editores que no pueden abrirse en una línea específica con un comando o en una columna específica pueden ignorar el argumento line y/o column. La devolución de llamada fn debe devolver un objeto Cmd apropiado para abrir un archivo o nothing para indicar que no pueden editar este archivo. Usa nothing para indicar que este editor no es apropiado para el entorno actual y se debe intentar con otro editor. Es posible agregar más ganchos de edición generales que no necesiten generar comandos externos al empujar una devolución de llamada directamente al vector EDITOR_CALLBACKS.
El argumento pattern es una cadena, expresión regular o un arreglo de cadenas y expresiones regulares. Para que se llame a fn, uno de los patrones debe coincidir con el valor de EDITOR, VISUAL o JULIA_EDITOR. Para cadenas, la cadena debe ser igual al basename de la primera palabra del comando del editor, con su extensión, si la hay, eliminada. Por ejemplo, "vi" no coincide con "vim -g" pero coincide con "/usr/bin/vi -m"; también coincide con vi.exe. Si pattern es una regex, se compara con todo el comando del editor como una cadena escapada por el shell. Un patrón de arreglo coincide si cualquiera de sus elementos coincide. Si varios editores coinciden, se utiliza el que se agregó más recientemente.
Por defecto, julia no espera a que el editor se cierre, ejecutándolo en segundo plano. Sin embargo, si el editor es basado en terminal, probablemente querrás establecer wait=true y julia esperará a que el editor se cierre antes de reanudar.
Si una de las variables de entorno del editor está configurada, pero ninguna entrada de editor coincide con ella, se invoca la entrada de editor predeterminada:
(cmd, path, line, column) -> `$cmd $path`Ten en cuenta que muchos editores ya están definidos. Todos los siguientes comandos deberían funcionar ya:
- emacs
- emacsclient
- vim
- nvim
- nano
- micro
- kak
- helix
- textmate
- mate
- kate
- subl
- atom
- notepad++
- Visual Studio Code
- open
- pycharm
- bbedit
Ejemplos
Lo siguiente define el uso de emacs basado en terminal:
define_editor(
r"\bemacs\b.*\s(-nw|--no-window-system)\b", wait=true) do cmd, path, line
`$cmd +$line $path`
enddefine_editor fue introducido en Julia 1.4.
InteractiveUtils.less — Methodless(file::AbstractString, [line::Integer])Muestra un archivo utilizando el paginador predeterminado, proporcionando opcionalmente un número de línea de inicio. Regresa al prompt de julia cuando sales del paginador.
InteractiveUtils.less — Methodless(function, [types])Muestra la definición de una función utilizando el paginador predeterminado, especificando opcionalmente una tupla de tipos para indicar qué método ver.
InteractiveUtils.@less — Macro@lessEvalúa los argumentos de la llamada a la función o macro, determina sus tipos y llama a la función less en la expresión resultante.
Véase también: @edit, @which, @code_lowered.
InteractiveUtils.@which — Macro@whichAplicado a una llamada de función o macro, evalúa los argumentos de la llamada especificada y devuelve el objeto Method para el método que se llamaría para esos argumentos. Aplicado a una variable, devuelve el módulo en el que se vinculó la variable. Llama a la función which.
InteractiveUtils.@functionloc — Macro@functionlocAplicado a una llamada de función o macro, evalúa los argumentos de la llamada especificada y devuelve una tupla (nombre_archivo, línea) que indica la ubicación del método que se llamaría para esos argumentos. Llama a la función functionloc.
InteractiveUtils.@code_lowered — Macro@code_loweredEvalúa los argumentos de la llamada a la función o macro, determina sus tipos y llama a code_lowered en la expresión resultante.
Véase también: code_lowered, @code_warntype, @code_typed, @code_llvm, @code_native.
InteractiveUtils.@code_typed — Macro@code_typedEvalúa los argumentos de la llamada a la función o macro, determina sus tipos y llama a code_typed en la expresión resultante. Usa el argumento opcional optimize con
@code_typed optimize=true foo(x)para controlar si se aplican optimizaciones adicionales, como la inlining.
Ver también: code_typed, @code_warntype, @code_lowered, @code_llvm, @code_native.
InteractiveUtils.code_warntype — Functioncode_warntype([io::IO], f, types; debuginfo=:default)Imprime ASTs bajados e inferidos por tipo para los métodos que coinciden con la función genérica dada y la firma de tipo a io, que por defecto es stdout. Los ASTs están anotados de tal manera que los tipos "no hoja" que pueden ser problemáticos para el rendimiento se enfatizan (si hay color disponible, se muestran en rojo). Esto sirve como una advertencia de posible inestabilidad de tipo.
No todos los tipos no hoja son particularmente problemáticos para el rendimiento, y las características de rendimiento de un tipo particular son un detalle de implementación del compilador. code_warntype errará del lado de colorear los tipos de rojo si podrían ser una preocupación de rendimiento, por lo que algunos tipos pueden estar coloreados de rojo incluso si no impactan el rendimiento. Pequeñas uniones de tipos concretos generalmente no son una preocupación, por lo que se destacan en amarillo.
El argumento clave debuginfo puede ser uno de :source o :none (por defecto), para especificar la verbosidad de los comentarios de código.
Consulta la sección @code_warntype en la página de Consejos de Rendimiento del manual para más información.
Consulta también: @code_warntype, code_typed, code_lowered, code_llvm, code_native.
InteractiveUtils.@code_warntype — Macro@code_warntypeEvalúa los argumentos de la llamada a la función o macro, determina sus tipos y llama a code_warntype en la expresión resultante.
Véase también: 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)Imprime los códigos de bits LLVM generados para ejecutar el método que coincide con la función genérica y la firma de tipo dadas en io.
Si la palabra clave optimize no está establecida, el código se mostrará antes de las optimizaciones de LLVM. Todos los metadatos y las llamadas a dbg.* se eliminan del código de bits impreso. Para el IR completo, establece la palabra clave raw en true. Para volcar todo el módulo que encapsula la función (con declaraciones), establece la palabra clave dump_module en true. El argumento de palabra clave debuginfo puede ser uno de source (predeterminado) o none, para especificar la verbosidad de los comentarios del código.
Ver también: @code_llvm, code_warntype, code_typed, code_lowered, code_native.
InteractiveUtils.@code_llvm — Macro@code_llvmEvalúa los argumentos de la función o llamada a macro, determina sus tipos y llama a code_llvm en la expresión resultante. Establece los argumentos opcionales raw, dump_module, debuginfo, optimize colocando estos y su valor antes de la llamada a la función, así:
@code_llvm raw=true dump_module=true debuginfo=:default f(x)
@code_llvm optimize=false f(x)optimize controla si se aplican optimizaciones adicionales, como la inlining. raw hace que todos los metadatos y llamadas dbg.* sean visibles. debuginfo puede ser uno de :source (por defecto) o :none, para especificar la verbosidad de los comentarios del código. dump_module imprime todo el módulo que encapsula la función.
Ver también: 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)Imprime las instrucciones de ensamblaje nativo generadas para ejecutar el método que coincide con la función genérica y la firma de tipo dadas en io.
- Establece la sintaxis de ensamblaje configurando
syntaxa:intel(predeterminado) para la sintaxis intel o:attpara la sintaxis AT&T. - Especifica la verbosidad de los comentarios de código configurando
debuginfoa:source(predeterminado) o:none. - Si
binaryestrue, también imprime el código de máquina binario para cada instrucción precedido por una dirección abreviada. - Si
dump_moduleesfalse, no imprime metadatos como rodata o directivas. - Si
rawesfalse, se omiten instrucciones poco interesantes (como el prólogo de la función de safepoint).
Ver también: @code_native, code_warntype, code_typed, code_lowered, code_llvm.
InteractiveUtils.@code_native — Macro@code_nativeEvalúa los argumentos de la llamada a la función o macro, determina sus tipos y llama a code_native en la expresión resultante.
Establece cualquiera de los argumentos opcionales syntax, debuginfo, binary o dump_module colocándolo antes de la llamada a la función, así:
@code_native syntax=:intel debuginfo=:default binary=true dump_module=false f(x)- Establece la sintaxis de ensamblador configurando
syntaxa:intel(predeterminado) para la sintaxis Intel o:attpara la sintaxis AT&T. - Especifica la verbosidad de los comentarios de código configurando
debuginfoa:source(predeterminado) o:none. - Si
binaryestrue, también imprime el código de máquina binario para cada instrucción precedido por una dirección abreviada. - Si
dump_moduleesfalse, no imprime metadatos como rodata o directivas.
Consulta también: code_native, @code_warntype, @code_typed, @code_lowered, @code_llvm.
Base.@time_imports — Macro@time_importsUna macro para ejecutar una expresión y producir un informe de cualquier tiempo gastado importando paquetes y sus dependencias. Cualquier tiempo de compilación se informará como un porcentaje, y cuánto de eso fue recompilación, si la hubo.
Se imprime una línea por paquete o extensión de paquete. La duración mostrada es el tiempo para importar ese paquete en sí, sin incluir el tiempo para cargar ninguna de sus dependencias.
En Julia 1.9+ extensiones de paquete se mostrarán como Padre → Extensión.
Durante el proceso de carga, un paquete importa secuencialmente todas sus dependencias, no solo sus dependencias directas.
julia> @time_imports using CSV
50.7 ms Parsers 17.52% tiempo de compilación
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% tiempo de compilación
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% tiempo de compilación
1681.2 ms CSV 92.40% tiempo de compilaciónEsta macro requiere al menos Julia 1.8
InteractiveUtils.clipboard — Functionclipboard(x)Envía una forma impresa de x al portapapeles del sistema operativo ("copiar").
clipboard() -> StringDevuelve una cadena con el contenido del portapapeles del sistema operativo ("pegar").