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
UnsignedInteractiveUtils.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 を設定することで変更できます。
他にも InteractiveUtils.define_editor を参照してください。
InteractiveUtils.edit — Methodedit(function, [types])
edit(module)関数の定義を編集します。オプションで、どのメソッドを編集するかを示す型のタプルを指定できます。モジュールの場合は、メインのソースファイルを開きます。モジュールは最初に using または import でロードする必要があります。
指定された行でファイルを開けるようにするために、最初に InteractiveUtils.define_editor を呼び出す必要があるかもしれません。
InteractiveUtils.@edit — MacroInteractiveUtils.define_editor — Functiondefine_editor(fn, pattern; wait=false)pattern に一致する新しいエディタを定義し、fn を使用してファイルを開くことができます(指定された行番号で開く可能性があります)。
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 はエディタが閉じるのを待ってから再開します。
エディタ環境変数のいずれかが設定されているが、一致するエディタエントリがない場合、デフォルトのエディタエントリが呼び出されます:
(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```
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+では、package extensionsは 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 timeBase.@trace_compile — Macro@trace_compile式を実行し、コンパイルされた(または黄色で再コンパイルされた)メソッドを表示するマクロで、julia args --trace-compile=stderr --trace-compile-timing に似ていますが、特に呼び出しに対してです。
julia> @trace_compile rand(2,2) * rand(2,2)
#= 39.1 ms =# precompile(Tuple{typeof(Base.rand), Int64, Int64})
#= 102.0 ms =# precompile(Tuple{typeof(Base.:(*)), Array{Float64, 2}, Array{Float64, 2}})
2×2 Matrix{Float64}:
0.421704 0.864841
0.211262 0.444366Base.@trace_dispatch — Macro@trace_dispatch式を実行し、動的ディスパッチを介してコンパイルされたメソッドを報告するマクロで、julia引数--trace-dispatch=stderrに似ていますが、特定の呼び出しに対してです。
InteractiveUtils.clipboard — Functionclipboard(x)xの印刷形式をオペレーティングシステムのクリップボードに送ります(「コピー」)。
clipboard() -> Stringオペレーティングシステムのクリップボードの内容を含む文字列を返します(「ペースト」)。