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)
モジュール内の公開グローバル変数に関する情報を提供するマークダウンテーブルを返します。オプションで、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[, module or function]; supertypes::Bool=false])
型 typ
の引数を持つメソッドの配列を返します。
オプションの第二引数は、特定のモジュールまたは関数に検索を制限します(デフォルトはすべてのトップレベルモジュールです)。
キーワード supertypes
が true
の場合、型 Any
を除く typ
の親型を持つ引数も返します。
参照: methods
.
InteractiveUtils.subtypes
— Functionsubtypes(T::DataType)
DataType T
の即時サブタイプのリストを返します。現在ロードされているすべてのサブタイプが含まれており、現在のモジュールで表示されないものも含まれます。
関連情報として supertype
、supertypes
、methodswith
も参照してください。
例
julia> subtypes(Integer)
3-element Vector{Any}:
Bool
Signed
Unsigned
InteractiveUtils.supertypes
— Functionsupertypes(T::Type)
T
とそのすべてのスーパタイプのタプル(T, ..., Any)
を返します。これは、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
— MacroInteractiveUtils.define_editor
— Functiondefine_editor(fn, pattern; wait=false)
fn
を使用してファイルを開くために使用できるpattern
に一致する新しいエディタを定義します(特定の行番号で開く可能性があります)。
fn
引数は、指定されたエディタでファイルを開く方法を決定する関数です。次の4つの引数を取る必要があります:
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はエディタが閉じるのを待ってから再開します。
エディタ環境変数の1つが設定されているが、どのエディタエントリもそれに一致しない場合、デフォルトのエディタエントリが呼び出されます:
(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
— MacroInteractiveUtils.@which
— Macro@which
関数またはマクロ呼び出しに適用すると、指定された呼び出しの引数を評価し、それらの引数に対して呼び出されるメソッドの Method
オブジェクトを返します。変数に適用すると、その変数がバインドされているモジュールを返します。これは which
関数を呼び出します。
InteractiveUtils.@functionloc
— Macro@functionloc
関数またはマクロ呼び出しに適用されると、指定された呼び出しの引数を評価し、これらの引数に対して呼び出されるメソッドの位置を示すタプル (filename,line)
を返します。これは 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と型推論された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
は、ソース(デフォルト)またはなしのいずれかで、コードコメントの冗長性を指定します。
関連情報: @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
(デフォルト)に設定するとインテル構文、または:att
に設定するとAT&T構文を指定できます。debuginfo
を:source
(デフォルト)または:none
に設定することで、コードコメントの詳細度を指定できます。binary
がtrue
の場合、各命令の前に省略されたアドレスを付けてバイナリ機械コードも出力します。dump_module
がfalse
の場合、rodata やディレクティブなどのメタデータは出力しません。raw
がfalse
の場合、興味のない命令(セーフポイント関数のプロローグなど)は省略されます。
参照: @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
式を実行し、パッケージとその依存関係のインポートにかかった時間のレポートを生成するマクロです。コンパイル時間はパーセンテージとして報告され、再コンパイルがあった場合はその割合も示されます。
パッケージまたはパッケージ拡張ごとに1行が印刷されます。表示される期間は、そのパッケージ自体をインポートするための時間であり、その依存関係を読み込むための時間は含まれていません。
Julia 1.9+では、パッケージ拡張は Parent → Extension として表示されます。
ロードプロセス中、パッケージは直接の依存関係だけでなく、すべての依存関係を順次インポートします。
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が必要です。
InteractiveUtils.clipboard
— Functionclipboard(x)
x
の印刷形式をオペレーティングシステムのクリップボードに送ります(「コピー」)。
clipboard() -> String
オペレーティングシステムのクリップボードの内容を含む文字列を返します(「ペースト」)。