1から始める Juliaプログラミング 進藤 裕之(著) 佐藤 建太(著)

 (2020/11/24) 読了。

 

1.動機

 科学技術系の論文、書籍、ブログ等でもJuliaを用いられることが次第に多くなり、今後も技術リサーチの上で必須になってくると考えていた。和書での本格的な初の解説書であり、購入を検討した。

 

2.内容

(目次:出版社Webサイトより)

1.Julia入門
1.1 次世代のプログラミング言語Julia
 1.1.1 Juliaとは
 1.1.2 本書の構成
 1.1.3 なぜJuliaが必要なのか?
1.2 インストール
 1.2.1 REPL
 1.2.2 Jupyter Notebook
 1.2.3 エディタとIDE
1.3 Juliaの情報
 1.3.1 Julia公式ページ
 1.3.2 Juliaのソースコード
 1.3.3 Julia Discourse
 1.3.4 JuliaCon
 1.3.5 JuliaTokyo

2.Juliaの言語機能
2.1 Juliaの基本
 2.1.1 変数
 2.1.2 プリミティブ型
 2.1.3 任意精度演算
 2.1.4 定数
 2.1.5 基本的な演算子
 2.1.6 更新演算子
 2.1.7 複素数
 2.1.8 文字列
 2.1.9 Unicode文字列
 2.1.10 文字列の関数
 2.1.11 正規表現
2.2 制御構文
 2.2.1 条件評価
 2.2.2 短絡評価
 2.2.3 ループ
 2.2.4 try/catch/finally
2.3 関数
 2.3.1 可変長引数
 2.3.2 オプショナル引数
 2.3.3 キーワード引数
 2.3.4 匿名関数
2.4 型
 2.4.1 型の宣言
 2.4.2 型の階層関係
 2.4.3 Nothing型
 2.4.4 複合型
 2.4.5 Union型
 2.4.6 パラメトリック
 2.4.7 パラメトリック型の階層関係
 2.4.8 抽象型のパラメトリック
2.5 コレクション
 2.5.1 タプル
 2.5.2 名前付きタプル
 2.5.3 リスト
 2.5.4 辞書
 2.5.5 集合
 2.5.6 コレクション共通の関数
 2.5.7 コレクションのイテレーション
2.6 多次元配列
 2.6.1 初期化
 2.6.2 基本的な操作
 2.6.3 インデクシング
 2.6.4 多次元配列の演算
 2.6.5 ブロードキャスティング
 2.6.6 map,reduce,filter
 2.6.7 サブ配列
2.7 モジュール
 2.7.1 モジュールの機能
 2.7.2 既存モジュールの利用
 2.7.3 using文の注意点
 2.7.4 新しいモジュールの定義
 2.7.5 モジュールの相対パス指定
 2.7.6 ファイルの分割
 2.7.7 他のモジュールで定義された関数の拡張
2.8 メタプログラミング
 2.8.1 シンボル
 2.8.2 構文木の表現
 2.8.3 構文木の補間
 2.8.4 構文木の評価
 2.8.5 マクロの機能
 2.8.6 標準ライブラリにあるマクロ
 2.8.7 マクロの定義
 2.8.8 識別子の変換規則
2.9 C言語の呼出し
 2.9.1 ccall構文
 2.9.2 ポインタの受渡し
 2.9.3 構造体の受渡し
2.10 外部プログラムの呼出し
 2.10.1 コマンドの作成・実行
 2.10.2 コマンド実行の注意点
 2.10.3 パイプライン処理
 2.10.4 より発展的なコマンドの作成方法
2.11 パッケージ
 2.11.1 パッケージ管理の基本
 2.11.2 プロジェクトのパッケージ管理
 2.11.3 プロジェクトの有効化
 2.11.4 パッケージの作成

3. Juliaライブラリの使い方
3.1 線形代数
 3.1.1 ベクトルの演算
 3.1.2 行列の演算
 3.1.3 行列の種類
 3.1.4 行列分解
 3.1.5 BLAS
3.2 ファイル入出力
 3.2.1 ファイルとストリーム
 3.2.2 シリアライズとデシリアライズ
 3.2.3 JLD2
 3.2.4 JSONファイルの入出力
 3.2.5 XMLファイルの入出力
3.3 他言語の呼出し
 3.3.1 Pythonの呼出し準備
 3.3.2 Python関数の呼出し
 3.3.3 Pythonモジュールの利用
 3.3.4 Rの呼出し準備
 3.3.5 R関数の呼出し
 3.3.6 Rオブジェクトの操作
 3.3.7 REPLのRモード
3.4 ドキュメンテーション
 3.4.1 docstringの読み方
 3.4.2 Markdown
 3.4.3 関数のdocstring
 3.4.4 関数以外のdocstring
 3.4.5 Documenter.jl
 3.4.6 Documenter.jlの使用例
3.5 可視化
 3.5.1 PyPlot.jlのインストール
 3.5.2 基本的なプロット
 3.5.3 プロットの編集
 3.5.4 サブプロットの作成
 3.5.5 オブジェクト指向インタフェース

4.Juliaの高速化
4.1 プロファイリング
 4.1.1 高速化の事前準備
 4.1.2 実行時間の計測
 4.1.3 実行時間のプロファイリング
 4.1.4 メモリ割当てのプロファイリング
4.2 最適化しやすいコード
 4.2.1 コードの書き方による性能差
 4.2.2 コンパイラの概要
 4.2.3 型に不確実性のあるコード
 4.2.4 グローバル変数への参照
 4.2.5 コレクションや構造体での型不確実性
 4.2.6 メモリレイアウト
4.3 メモリ割当ての削減
 4.3.1 配列のメモリ割当て
 4.3.2 配列の再利用
 4.3.3 ブロードキャスティングによるメモリ削減
 4.3.4 特殊な配列型の利用
4.4 コンパイラへのヒント
 4.4.1 境界チェックの省略
 4.4.2 浮動小数点数演算の高速化
 4.4.3 関数のインライン化
 4.4.4 @simdマクロによる並列処理

索引

 

3.感想

コンパクトな書籍ながら、導入~初歩~かゆいところに手が届くところまで記載があり驚きました。juliaをCによって高速化したりpythonやRを呼び出したりとという部分も開発上、過去資産を使っていく上で大事なポイントです。活用させていただきます。