inzkyk.xyz Julia 1.5.4 ドキュメント Julia 1.5 リリースノート 索引 目次 このドキュメントの総目次です。ブラウザの検索機能を使ってご利用ください。 マニュアル Julia を始める 学習リソース 変数 変数名に使える文字 Julia のスタイル 整数と浮動小数点数 整数 オーバーフローの挙動 除算エラー 浮動小数点数 浮動小数点数のゼロ 特殊な浮動小数点数の値 計算機イプシロン 丸めモード 背景知識と参考文献 任意精度算術 数値リテラル係数 構文の衝突 リテラルの 0 と 1 数学演算と初等関数 算術演算子 ビット演算子 更新演算子 ベクトル化演算子 (ドット演算子) 数値の比較 比較の連鎖 初等関数 演算子の優先順位と結合性 数値の変換 丸め関数 除算関数 符号関数と絶対値関数 対数と根号 三角関数と双曲線関数 特殊関数 複素数と有理数 複素数 有理数 文字列 文字 文字列の基本的な使い方 Unicode と UTF-8 連結 補間 三重クオート文字列リテラル 一般的な処理 非標準文字列リテラル 正規表現 バイト配列リテラル バージョン番号リテラル 生文字列リテラル 関数 引数の受け渡し return キーワード 返り値の型 返り値 nothing 演算子は関数である 特殊な名前を持った演算子 無名関数 タプル 名前付きタプル 複数の返り値 引数の分割 可変長引数関数 省略可能引数 キーワード引数 デフォルト値の評価スコープ 関数の引数に対する do ブロック構文 関数の合成とパイプ 関数をベクトル化するドット構文 この次に読むべきマニュアル 制御構造 複合式 条件評価 短絡評価 反復評価 (ループ) 例外処理 組み込みの例外 throw 関数 エラー try/catch 文 finally 節 タスク (コルーチン) 変数のスコープ スコープ構文 グローバルスコープ ローカルスコープ ソフトスコープについて let ブロック ループと内包表記 定数 型 型宣言 抽象型 プリミティブ型 複合型 可変複合型 被宣言型 型共用体 パラメトリック型 パラメトリック複合型 パラメトリック抽象型 タプル型 可変長タプル型 名前付きタプル型 シングルトン型 Type{T} 型 パラメトリックプリミティブ型 UnionAll 型 型の別名 型に対する演算 独自型の出力の整形 値型 メソッド メソッドの定義 メソッドの曖昧性 パラメトリックメソッド メソッドの再定義 パラメトリックメソッドを使ったデザインパターン 上位型から型パラメータを取り出す 異なる型パラメータを持つ似た型を構築する 反復ディスパッチ トレイトベースのディスパッチ 出力型の計算 変換処理とカーネルの分離 プログラムによる可変長引数メソッドの制限 省略可能引数とキーワード引数に関する注意点 関数様オブジェクト 空の総称関数 メソッドの設計と曖昧性の回避 タプルの引数 設計を直交化する ディスパッチを一つずつ行う 抽象コンテナと要素型 デフォルト引数による複雑なメソッドカスケード コンストラクタ コンストラクタメソッド 内部コンストラクタメソッド 不完全な初期化 パラメトリックコンストラクタ ケーススタディ: 有理数 外部専用コンストラクタ 型の変換と昇格 変換 変換はいつ呼ばれるか? 変換 vs 構築 新しい変換の定義 昇格 昇格規則の定義 ケーススタディ: 有理数の昇格 インターフェース 反復 添え字によるアクセス AbstractArray 有歩長配列 (strided array) ブロードキャストのカスタマイズ ブロードキャストのスタイル 適切な出力配列の選択 独自実装を使ったブロードキャストの拡張 インプレースのブロードキャストの拡張 ブロードキャストされたオブジェクトの取り扱い 二項のブロードキャスト規則 モジュール モジュールの使い方のまとめ モジュールとファイル 標準モジュール デフォルトのトップレベル定義と baremodule モジュールの相対パスと絶対パス 名前空間について モジュールの初期化と事前コンパイル ドキュメント ドキュメントへのアクセス 関数とメソッド 高度な使い方 動的なドキュメント 構文ガイド 文字列の補完とエスケープ 関数とメソッド マクロ 型 モジュール グローバル変数 複数オブジェクト マクロによって生成されたコード メタプログラミング プログラムの表現 シンボル 式の評価 クオート 補間 補間の展開 入れ子になったクオート QuoteNode 式の評価 式に対する関数 マクロ 基礎 なぜマクロ? マクロの起動 高度なマクロ マクロの健全性 マクロとディスパッチ コード生成 非標準文字列リテラル 被生成関数 高度な例 随時被生成関数 (optionally-generated function) 多次元配列 基本的な関数 構築と初期化 配列リテラル 連結 型付き配列リテラル 内包表記 ジェネレータ式 添え字アクセスの構文 添え字代入 サポートされる添え字の型 格子添え字 論理添え字アクセス 格子添え字と線形添え字 反復 配列トレイト ベクトル化された演算/関数と配列 ブロードキャスト 実装 欠損値 欠損値の伝播 等号演算子と比較演算子 論理演算子 制御構造と短絡評価 欠損値を持つ配列 欠損値を飛ばす反復 配列に対する論理演算 ネットワークとストリーム ストリーム IO テキスト IO 文脈プロパティ ファイルの取り扱い TCP を使った簡単な例 IP アドレスの解決 並列計算 非同期プログラミング 基本的なタスク演算 チャンネルを使った通信 さらにチャンネルについて さらにタスクの操作について タスクとイベント マルチスレッディング Julia で複数のスレッドを使う データ競合 @threads マクロ 不可分操作 可変な関数引数の副作用 @threadcall 注意点 ファイナライザの安全な使用 マルチプロセッシングと分散計算 パッケージの読み込みとコードの可視性 ワーカープロセスの開始と管理 データの移動 グローバル変数 並列 for ループと並列マップ リモートリファレンスと AbstractChannel Channel と RemoteChannel の違い リモートリファレンスと分散ガベージコレクション ローカルノードに対するリモートコール 共有配列 共有配列と分散ガベージコレクション ClusterManager 独自トランスポートを使ったクラスターマネージャ LocalManager と SSHManager に対するネットワーク要件 クラスターのクッキー ネットワークトポロジーの指定 (実験的) 注目に値する外部パッケージ 外部プログラムの実行 補間 クオート パイプライン パイプラインではデッドロックを避ける 複雑な例 C と Fortran コードの呼び出し C 互換な Julia 関数ポインタの作成 C の型と Julia の型の対応 自動的な型変換 型の対応 ビット型 構造体型の対応 型パラメータ SIMD 値 メモリの所有権 C 関数から Julia 関数への型変換 ccall/@cfunction の引数変換ガイド ccall/@cfunction の返り値変換ガイド ポインタ渡しを使った入力の改変 C ラッパーの例 Fortran ラッパーの例 ガベージコレクションの安全性 非定数による関数の指定 間接呼び出し cfunction を使ったクロージャ ライブラリのクローズ 呼び出し規則 グローバル変数へのアクセス ポインタを通じたデータアクセス スレッド安全性 さらにコールバックについて C++ OS 間の差異 環境変数 ファイルの格納場所に関する環境変数 JULIA_BINDIR JULIA_PROJECT JULIA_LOAD_PATH JULIA_DEPOT_PATH JULIA_HISTORY 外部アプリケーションに関する環境変数 JULIA_SHELL JULIA_EDITOR 並列性に関する環境変数 JULIA_CPU_THREADS JULIA_WORKER_TIMEOUT JULIA_NUM_THREADS JULIA_THREAD_SLEEP_THRESHOLD JULIA_EXCLUSIVE REPL のフォーマットに関する環境変数 JULIA_ERROR_COLOR JULIA_WARN_COLOR JULIA_INFO_COLOR JULIA_INPUT_COLOR JULIA_ANSWER_COLOR JULIA_STACKFRAME_LINEINFO_COLOR JULIA_STACKFRAME_FUNCTION_COLOR デバッグとプロファイルに関する環境変数 JULIA_DEBUG JULIA_GC_ALLOC_POOL, JULIA_GC_ALLOC_OTHER, JULIA_GC_ALLOC_PRINT JULIA_GC_NO_GENERATIONAL JULIA_GC_WAIT_FOR_DEBUGGER ENABLE_JITPROFILING JULIA_LLVM_ARGS Julia の組み込み 高水準の組み込み julia-config.jl を使ったビルドパラメータの自動的な設定 Windows で Visual Studio を使った高水準な組み込み 型の変換 Julia 関数の呼び出し メモリ管理 GC に管理されるオブジェクトのフィールドの更新 ガベージコレクタの操作 配列の利用 返り値の配列へのアクセス 多次元配列 例外 Julia 例外の送出 コードの読み込み 定義 連邦制パッケージ管理 環境 環境が定める三つの写像 プロジェクト環境 パッケージディレクトリ環境 スタック環境 最後に 性能測定 基本的な使い方 結果の蓄積と消去 プロファイル結果を表示するオプション プロファイラの設定 メモリのアロケートの解析 外部ツールを使った性能測定 スタックトレース スタックトレースの表示 スタックトレースから情報を取り出す エラー処理 catch_stack と例外スタック バックトレースとスタックトレースの比較 パフォーマンス Tips グローバル変数を避ける @time で性能を計測し、メモリのアロケートに注目する ツールを利用する コンテナの型パラメータに抽象型を使わない 型宣言を (必要なら) 付ける 抽象型を持つフィールドを使わない フィールドに抽象コンテナを使わない 型の無いコンテナから取得した値には型注釈を付ける Julia が特殊化を行わない状況に気を付ける 関数を複数の定義に分割する 「型安定」 な関数を書く 変数の型を変更しない カーネル関数を分離する (関数バリア) 値を型パラメータに持つ型の扱いに気を付ける 多重ディスパッチの危険性を認識する 配列にはメモリに沿った列優先の順序でアクセスする 出力配列を事前にアロケートする もっとドット: ベクトル化演算を融合する スライスにビューを使えないか考える 「データのコピーは悪い」と決めつけない IO で文字列補間を使わない 並列処理におけるネットワーク IO を最適化する 非推奨の警告を修正する 細かい修正を行う 性能のための注釈 非正規数をゼロとして扱う @code_warntype を利用する 変数のキャプチャを工夫する シングルトンを使った等価性の判定 ワークフロー Tips REPL を中心としたワークフロー 基本的なエディタ/REPL ワークフロー ブラウザベースのワークフロー Revise.jl を使ったワークフロー スタイルガイド スクリプトではなく関数を書く 不必要に特定的な型を使わない 引数の型の調整は呼び出し側で行う 引数を変更する関数では名前の最後に ! を付ける 奇妙な Union を使わない 手の込んだコンテナ型を使わない Julia Base と同様の命名規則を使う 引数は Julia Base と同様の順序で並べる try-catch を使い過ぎない 条件文に括弧を付けない ... を使い過ぎない 不必要な静的パラメータを使わない 変数の型とインスタンスを混同しない マクロを使い過ぎない 安全でない処理をインターフェースのレベルに公開しない 基礎的なコンテナ型のメソッドをオーバーロードしない 「型の強奪」を避ける 型の等価判定に注意する x->f(x) と書かない 可能なら、汎用なコードに浮動小数点数リテラルを書かない よくある質問 一般 Julia という名前には由来となった人物や物事がある? MATLAB/Python/R/... のコードを Julia にコンパイルしないのはなぜ? セッションと REPL メモリ上に存在するオブジェクトを削除するには? セッション中に型の宣言を変更するには? スクリプト メインスクリプトとして実行されているかどうかを判定するには? CTRL-C を捕捉するには? #!/usr/bin/env を使うときに Julia へオプションを渡すには? 関数 関数内で引数を変更しても、呼び出し側の値が変わらないのはなぜ? using や import は関数内で使える? ... 演算子は何をしている? 代入文の値は? 型・型の宣言・コンストラクタについて 「型安定」とは? DomainError が不必要に思える箇所で発生するのはなぜ? 型パラメータを宣言・計算するには? Julia がマシンネイティブな整数算術を使うのはなぜ? リモートコールで起きた UndefVarError の原因は? Julia が文字列の連結に * を使うのはなぜ? 無値と欠損値 「ヌル」「無値」「欠損値」は Julia でどうなっている? メモリ x と y が配列のとき x += y がメモリをアロケートするのはなぜ? 非同期 IO と並行して行われる同期的な書き込み 同じストリームに対して並行に書き込むと出力が混ざるのはなぜ? 配列 ゼロ次元配列とスカラーの違いは? Julia に対する線形代数演算のベンチマーク結果が他の言語と違うのはなぜ? 計算クラスター 分散ファイルシステムで事前コンパイルキャッシュを管理するには? Julia リリース Julia のバージョンは Stable, LTS, nightly のどれを使うべき? 他の言語との主な違い MATLAB との主な違い R との主な違い Python との主な違い C/C++ との主な違い Common Lisp との主な違い Unicode の入力 Julia Base ライブラリ 基本的な関数 はじめに 言語で基礎的な役割を持つ関数 キーワード 標準モジュール Base のサブモジュール 全てのオブジェクトに関係する関数 型のプロパティ 型の関係 宣言構造体 メモリレイアウト 特殊な値 特殊な型 総称関数 構文 欠損値 システム バージョニング エラー イベント リフレクション 内部操作 メタ操作 コレクションとデータ構造 反復 コンストラクタと型 コレクション 反復可能コレクション 添え字アクセス可能なコレクション 辞書 集合に似たコレクション デキュー ユーティリティコレクション 数学 数学演算子 数学関数 カスタマイズ可能な二項演算子 数値 標準の数値型 抽象数値型 具象数値型 データフォーマット 一般的な数値関数と定数 整数 BigFloat と BigInt 文字列 配列 コンストラクタと型 基礎的な関数 ブロードキャストとベクトル化 添え字アクセスと代入 ビュー (SubArrays など) 連結と置換 配列関数 組み合わせ論 タスク スケジューリング 同期 チャンネル マルチスレッディング 同期 不可分操作 スレッドプールを使った ccall (実験的) 低水準同期プリミティブ 定数 ファイルシステム IO とネットワーク 一般的な IO テキスト IO マルチメディア IO ネットワーク IO 記号 ソート ソート関数 順序に関する関数 ソートアルゴリズム 反復ユーティリティ C インターフェース LLVM インターフェース C 標準ライブラリ スタックトレース SIMD サポート 標準ライブラリ Base64 CRC32c Dates コンストラクタ 期間/比較 アクセッサ関数 クエリ関数 TimeType と Period の算術 アジャスター関数 Period 型 丸め 丸めエポック API リファレンス 日時と時刻の型 時刻に関する関数 アクセッサ関数 クエリ関数 アジャスター関数 期間 丸め関数 変換関数 定数 DelimitedFiles Distributed ClusterManager インターフェース FileWatching Future InteractiveUtils LibGit2 Libdl LinearAlgebra 特殊行列 基本的な演算 行列の分解 均等スケーリング作用素 行列の分解 標準的な関数 低水準行列演算 BLAS 関数 BLAS の文字引数 LAPACK 関数 Logging ログイベントの構造 ログイベントの処理 ロガー 早期フィルタリングとメッセージ処理 ログイベントのテスト 環境変数 ログイベントの保存 リファレンス モジュールの読み込み イベントの作成 AbstractLogger を使ったイベントの処理 ロガーの利用 Julia のログシステムに付属するロガー Markdown インライン要素 太字 斜体 リテラル \(\LaTeX\) リンク 脚注 トップレベル要素 段落 ヘッダー コードブロック ブロッククオート 画像 リスト ディスプレイ数式 脚注 水平線 表 忠告 Markdown 構文の拡張 Mmap Pkg Printf Profile Julia REPL プロンプトのモード Julian モード ヘルプモード シェルモード 検索モード キーバインド キーバインドのカスタマイズ タブ補完 色のカスタマイズ TerminalMenus カスタマイズ/設定 リファレンス Random Random モジュール 乱数生成関数 部分列/置換/シャッフル RNG の作成とシード 乱数 API に対するフック 乱数生成のカスタマイズ 新しい RNG の作成 再現性 SHA Serialization SharedArrays Sockets SparseArrays 疎行列の格納形式 疎ベクトルの格納形式 疎ベクトルと疎行列のコンストラクタ 疎行列に対する操作 密行列と疎行列のメソッドの対応 API リファレンス Statistics Test Julia の基礎部分のテスト 基礎的なユニットテスト テストセットの利用 その他のテストマクロ 壊れたテスト 独自の AbstractTestSet 型の作成 UUIDs Unicode 開発者向けドキュメント リフレクションとイントロスぺクション モジュールが持つ束縛 DataType のフィールド 部分型 DataType のレイアウト 関数メソッド マクロの展開とコードの低水準化 中間表現とコンパイル後の表現 デバッグ情報の出力 Julia ランタイムの初期化 main() julia_init() true_main() Base._start Base.eval jl_atexit_hook() Julia の AST 表層構文 AST 関数呼び出し 演算子 括弧を使った式 マクロ 文字列 インポートとエクスポート 数値 ブロック形式 クオート式 行番号 マクロ 低水準形式 Expr 型 Method 型 MethodInstance 型 CodeInstance 型 CodeInfo 型 Julia の型 型と集合 (Union{}/Bottom) UnionAll 型 自由変数 TypeNames タプル型 対角型 対角変数の部分型付け 型の内部機構への入門 部分型付けとメソッドのソート Julia オブジェクトのメモリレイアウト オブジェクトレイアウト (jl_value_t) ガベージコレクタのマークビット オブジェクトのアロケート Julia コードの実行 Julia の実行 パース マクロの展開 型推論 JIT によるコード生成 システムイメージ Julia の呼び出し規約 Native 呼び出し規約 JL Call 呼び出し規約 C ABI Julia のネイティブコード生成の概要 ポインタの表現 LLVM IR に含まれる値の表現 タグを使った共用体の表現 特殊化された呼び出し規約シグネチャの表現 Julia の関数呼び出し メソッドテーブル 関数呼び出し メソッドの追加 総称関数の作成 クロージャ コンストラクタ 組み込み関数 キーワード引数 コンパイラの効率 Base.Cartesian モジュール 基本的な使い方 基本的な構文 式の個数を指定する マクロの引数に無名関数式を使う リファレンス コンパイラとの対話 (:meta を使った操作) 部分配列 添え字の置換 SubArray の設計 型パラメータとフィールド 添え字の変換 線形添え字アクセス さらに詳しい情報 isbits 型からなる型共用体の最適化 isbits 型共用体を持つ構造体 isbits 型共用体の配列 システムイメージの作成 Julia システムイメージの作成 複数のマイクロアーキテクチャに対応したシステムイメージ 複数のシステムイメージターゲットの指定 実装の概要 LLVM の処理 Julia から LLVM へのインターフェースの概要 別名解析 異なる LLVM のバージョンを使って Julia をビルドする LLVM にオプションを渡す LLVM の変形を個別にデバッグする Julia に対する LLVM 最適化の改善 jlcall 呼び出し規約 GC ルートの配置 表現 不変条件 ccall のサポート pointer_from_objref のサポート 使われていない値を生存させる Julia ランタイムの printf() と stdio stdio に対する libuv のラッパー JL_STD* と Julia コードのインターフェース 初期化中の printf() レガシーの ios.c ライブラリ 境界検査 境界検査の省略 @inbounds の伝播 境界検査の呼び出し階層 ロックの管理 ロック 壊れたロック 共有されるグローバルなデータ構造 独自の添え字を持った配列 既存コードの一般化 なぜ気を付けるべきか 境界検査とループ反復では axes を使う 線形添え字 (LinearIndices) 一般的な similar を使って格納領域をアロケートする 1 始まりでない添え字を持つ独自配列を作成する 独自の AbstractUnitRange 型 axes の特殊化 similar の特殊化 reshape の特殊化 AbstractArray の部分型でない配列風オブジェクトについて エラーの捕捉 モジュールの読み込み 実験的機能 モジュール読み込みのコールバック 型推論 型推論の動作 compiler.jl のデバッグ インライン化アルゴリズム (inline_worthy) Julia の SSA 形式 IR 背景 新しい IR ノード Phi ノードと Pi ノード PhiC ノードと Upsilon ノード メインの SSA データ構造 C コードに付ける GC 用の静的解析注釈 解析の実行 概要 GC の不変条件 静的解析のアルゴリズム アナライザの注釈 JL_NOTSAFEPOINT JL_MAYBE_UNROOTED/JL_ROOTS_TEMPORARILY JL_PROPAGATES_ROOT JL_ROOTING_ARGUMENT/JL_ROOTED_ARGUMENT JL_GC_DISABLED JL_REQUIRE_ROOTED_SLOT JL_GLOBALLY_ROOTED JL_ALWAYS_LEAFTYPE JL_GC_PROMISE_ROOTED 解析の完全性 クラッシュ (segfault) の報告と解析 バージョン/環境の情報 ブートストラップ (sysimg.jl) 中の segfault スクリプト実行中の segfault Julia スタートアップ中の segfault 用語 GDB デバッグ Tips Julia 変数の表示 内部状態を調べるのに便利な Julia 変数 Julia 変数を調べるのに便利な Julia 関数 GDB からブレークポイントを仕込む 特定の条件で発火するブレークポイントを設置する 特定のファイルをロードしたとき 特定のメソッドを呼んだとき シグナルの取り扱い Julia のビルドプロセス (ブートストラップ) のデバッグ 事前コンパイルのエラーのデバッグ Mozilla の記録/再生フレームワーク (rr) rr を使って並行実行のバグを再現する Julia で Valgrind を使う 一般的な注意点 警告を抑制する Valgrind 内で Julia テストスイートを実行する 注意点 サニタイザのサポート 一般的な注意事項 アドレスサニタイザ (ASAN) メモリサニタイザ (MSAN)