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

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

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.@editMacro
@edit

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

関連情報: @less, @which.

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

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

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はエディタが閉じるのを待ってから再開します。

エディタ環境変数の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
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+では、パッケージ拡張は 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
InteractiveUtils.clipboardFunction
clipboard(x)

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

source
clipboard() -> String

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

source