Interactive Utilities

InteractiveUtils モジュールは、コードのイントロスペクションやクリップボードアクセスなど、Juliaのインタラクティブな使用のためのユーティリティを提供します。これはインタラクティブな作業を目的としており、interactive mode で自動的にロードされます。

Base.Docs.aproposFunction
apropos([io::IO=stdout], pattern::Union{AbstractString,Regex})

patternを含むエントリの利用可能なドキュメント文字列を検索します。

patternが文字列の場合、大文字と小文字は無視されます。結果はioに印刷されます。

aproposは、REPLのヘルプモードからクエリを二重引用符で囲むことで呼び出すことができます:

help?> "pattern"
source
InteractiveUtils.varinfoFunction
varinfo(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 を参照してください。

source
InteractiveUtils.versioninfoFunction
versioninfo(io::IO=stdout; verbose::Bool=false)

使用中のJuliaのバージョンに関する情報を印刷します。出力はブールキーワード引数で制御されます:

  • verbose: すべての追加情報を印刷する
Warning

この関数の出力には機密情報が含まれている可能性があります。出力を共有する前に、出力を確認し、公開すべきでないデータを削除してください。

参照: VERSION.

source
InteractiveUtils.methodswithFunction
methodswith(typ[, module or function]; supertypes::Bool=false])

typ の引数を持つメソッドの配列を返します。

オプションの第二引数は、特定のモジュールまたは関数に検索を制限します(デフォルトはすべてのトップレベルモジュールです)。

キーワード supertypestrue の場合、型 Any を除く typ の親型を持つ引数も返します。

参照: methods.

source
InteractiveUtils.subtypesFunction
subtypes(T::DataType)

DataType T の即時サブタイプのリストを返します。現在ロードされているすべてのサブタイプが含まれており、現在のモジュールで表示されないものも含まれます。

参照: supertype, supertypes, methodswith.

julia> subtypes(Integer)
3-element Vector{Any}:
 Bool
 Signed
 Unsigned
source
InteractiveUtils.supertypesFunction
supertypes(T::Type)

Tとそのすべてのスーパタイプのタプル(T, ..., Any)を返します。これは、supertype関数への連続した呼び出しによって決定され、<:の順序でリストされ、Anyで終了します。

関連情報としてsubtypesも参照してください。

julia> supertypes(Int)
(Int64, Signed, Integer, Real, Number, Any)
source
InteractiveUtils.editMethod
edit(path::AbstractString, line::Integer=0, column::Integer=0)

ファイルまたはディレクトリを編集し、オプションでファイルを編集する行番号を指定します。エディタを終了すると、julia プロンプトに戻ります。エディタは、環境変数として JULIA_EDITORVISUAL または EDITOR を設定することで変更できます。

Julia 1.9

column 引数は少なくとも Julia 1.9 が必要です。

他にも InteractiveUtils.define_editor を参照してください。

source
InteractiveUtils.editMethod
edit(function, [types])
edit(module)

関数の定義を編集します。オプションで、どのメソッドを編集するかを示す型のタプルを指定できます。モジュールの場合は、メインのソースファイルを開きます。モジュールは最初に using または import でロードする必要があります。

Julia 1.1

モジュールに対する edit は、少なくとも Julia 1.1 が必要です。

指定された行でファイルを開けるようにするために、最初に InteractiveUtils.define_editor を呼び出す必要があるかもしれません。

source
InteractiveUtils.define_editorFunction
define_editor(fn, pattern; wait=false)

pattern に一致する新しいエディタを定義し、fn を使用してファイルを開くことができます(指定された行番号で開く可能性があります)。

fn 引数は、指定されたエディタでファイルを開く方法を決定する関数です。次の4つの引数を取る必要があります。

  • cmd - エディタのための基本コマンドオブジェクト
  • path - 開くソースファイルのパス
  • line - エディタを開く行番号
  • column - エディタを開く列番号

特定のコマンドで特定の行を開けないエディタや特定の列を開けないエディタは、line および/または column 引数を無視することができます。fn コールバックは、ファイルを開くための適切な Cmd オブジェクトを返すか、このファイルを編集できないことを示すために nothing を返す必要があります。このエディタが現在の環境に適していないことを示すために nothing を使用し、別のエディタを試みるべきです。外部コマンドを生成する必要のないより一般的な編集フックを追加することも可能で、コールバックをベクター EDITOR_CALLBACKS に直接プッシュすることができます。

pattern 引数は、文字列、正規表現、または文字列と正規表現の配列です。fn が呼び出されるためには、パターンのいずれかが EDITORVISUAL または 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
Julia 1.4

define_editor は Julia 1.4 で導入されました。

```

source
InteractiveUtils.lessMethod
less(file::AbstractString, [line::Integer])

デフォルトのページャを使用してファイルを表示し、オプションで開始行番号を指定します。ページャを終了すると julia プロンプトに戻ります。

source
InteractiveUtils.lessMethod
less(function, [types])

デフォルトのページャを使用して関数の定義を表示し、オプションでメソッドを表示するための型のタプルを指定します。

source
InteractiveUtils.@whichMacro
@which

関数またはマクロ呼び出しに適用されると、指定された呼び出しの引数を評価し、それらの引数に対して呼び出されるメソッドのMethodオブジェクトを返します。変数に適用されると、その変数が束縛されていたモジュールを返します。which関数を呼び出します。

関連情報: @less, @edit.

source
InteractiveUtils.@functionlocMacro
@functionloc

関数またはマクロ呼び出しに適用されると、指定された呼び出しの引数を評価し、これらの引数に対して呼び出されるメソッドの位置を示すタプル (filename,line) を返します。これは functionloc 関数を呼び出します。

source
InteractiveUtils.code_warntypeFunction
code_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.

source
InteractiveUtils.code_llvmFunction
code_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

source
InteractiveUtils.@code_llvmMacro
@code_llvm

関数またはマクロ呼び出しの引数を評価し、それらの型を決定し、結果の式に対してcode_llvmを呼び出します。オプションのキーワード引数rawdump_moduledebuginfooptimizeを関数呼び出しの前に配置して設定します。例えば、次のようにします:

@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

source
InteractiveUtils.code_nativeFunction
code_native([io=stdout,], f, types; syntax=:intel, debuginfo=:default, binary=false, dump_module=true)

指定されたジェネリック関数と型シグネチャに一致するメソッドを実行するために生成されたネイティブアセンブリ命令をioに出力します。

  • syntax:intel(デフォルト)に設定するとインテル構文、:attに設定するとAT&T構文のアセンブリ構文を設定できます。
  • debuginfo:source(デフォルト)または:noneに設定することで、コードコメントの冗長性を指定できます。
  • binarytrueの場合、各命令の前に省略されたアドレスを付けてバイナリ機械コードも出力します。
  • dump_modulefalseの場合、rodataやディレクティブなどのメタデータは出力しません。
  • rawfalseの場合、興味のない命令(セーフポイント関数のプロローグなど)は省略されます。

参照: @code_native, code_warntype, code_typed, code_lowered, code_llvm

source
InteractiveUtils.@code_nativeMacro
@code_native

関数またはマクロ呼び出しの引数を評価し、その型を決定し、結果の式に対してcode_nativeを呼び出します。

任意のキーワード引数syntaxdebuginfobinary、またはdump_moduleを関数呼び出しの前に置くことで設定できます。次のように:

@code_native syntax=:intel debuginfo=:default binary=true dump_module=false f(x)
  • アセンブリ構文は、syntax:intel(デフォルト)に設定してIntel構文、または:attに設定してAT&T構文にします。
  • コードコメントの冗長性は、debuginfo:source(デフォルト)または:noneに設定することで指定します。
  • binarytrueの場合、各命令の前に省略されたアドレスを付けてバイナリ機械コードも印刷します。
  • dump_modulefalseの場合、rodataやディレクティブなどのメタデータは印刷しません。

関連情報: code_native@code_warntype@code_typed@code_lowered@code_llvm

source
Base.@time_importsMacro
@time_imports

パッケージとその依存関係のインポートにかかった時間のレポートを生成する式を実行するためのマクロです。コンパイル時間はパーセンテージとして報告され、再コンパイルがあった場合はその割合も示されます。

パッケージまたはパッケージ拡張ごとに1行が印刷されます。表示される期間は、そのパッケージ自体をインポートするための時間であり、その依存関係を読み込むための時間は含まれません。

Julia 1.9+では、package extensionsは Parent → Extension として表示されます。

Note

ロードプロセス中、パッケージは直接の依存関係だけでなく、すべての依存関係を順次インポートします。

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

このマクロは少なくともJulia 1.8が必要です。

source
Base.@trace_compileMacro
@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.444366
Julia 1.12

このマクロは少なくともJulia 1.12が必要です。

source
Base.@trace_dispatchMacro
@trace_dispatch

式を実行し、動的ディスパッチを介してコンパイルされたメソッドを報告するマクロで、julia引数--trace-dispatch=stderrに似ていますが、特定の呼び出しに対してです。

Julia 1.12

このマクロは少なくともJulia 1.12が必要です。

source
InteractiveUtils.clipboardFunction
clipboard(x)

xの印刷形式をオペレーティングシステムのクリップボードに送ります(「コピー」)。

source
clipboard() -> String

オペレーティングシステムのクリップボードの内容を含む文字列を返します(「ペースト」)。

source