プログラミング全般の用語集
Last-modified: 2017-09-07 (木) 15:17:36
0-9
- 2層アプリケーション
- プログラムを2階層に分けて開発したアプリケーション。インタフェースと内部ライブラリを分離する。
- 3層アプリケーション
- 2層アプリケーションに更に1層を追加したアプリケーション。内部ライブラリを扱う処理というのはインタフェースに依存せずに共通であることが多い。3層アプリケーションでは、内部ライブラリとインタフェース、さらに内部ライブラリを扱うレイヤに分離される。内部ライブラリ層とインタフェース層は一切接触しない。こうすることで更に効率的にインタフェースの差し替えが可能になる。
A
- A*, A-Star, エースター
- 探索アルゴリズムの1つ。
- Abstract
- 抽象的なものを意味する。「具体的なもの」に対する言葉。たとえば車と乗り物であれば、乗り物は抽象的。プログラミング言語的には、型に対して使うことが多い(インスタンスを具体的だ、とは言わない)。例えば、「8ビット符号なし整数型」に対して「整数型」は抽象的。さらに「数値型」はもっと抽象的。「型」はもっと抽象的。プログラミング言語によっては、抽象的な型のインスタンスをつくれないことがある。また多分にオブジェクト指向のクラスと関連性がある。
- Accelerated Aging Test, 加速劣化試験
- ACID
- Atomicity, Consistency, Isolation, Durabilityの頭字語。主にデータに対する操作について、Atomicity=原子性とは操作が不可分であり、中途半端に実行されることがないこと、Consistency=一貫性とはデータのルールが操作前も操作後も守られていること、Isolation=独立性とは操作途中のデータが外部から参照できないこと、Durability=永続性とは例え異常状態に陥ってもデータが失われないことを指す。
- Actor Model, アクターモデル
- Address, アドレス
- メモリなどの場所を示すために用いる。現実世界における、住所や郵便番号のようなもの。
- Advice, アドバイス
- AOPにおける技術。
- Algorithm, アルゴリズム、算法
- ALM, Application Lifecycle Management
- Alternative hypothesis, 対立仮説
- Amdahl's law, アムダールの法則
- Amortized analysis, 償却計算量
- AMP, ASMP, Asymmetrical Multi-Processing, 非対称型マルチプロセッシング
- AMP, Accelarated Massive Parallelism
- マイクロソフトが提唱する並列プログラミング、またはそのライブラリ。
- Anti HyperThreading
- 複数コアのCPUをひとつのコアに仮想的に見せる技術。Reverse Hyper Threadingに同じ。
- AOP, Aspect oriented programming, アスペクト指向プログラミング
- オブジェクト指向プログラミングを補間するもの。オブジェクト指向では、オブジェクトに着目してhas-aやis-aの関係性を元にオブジェクトを分割し、それらの機能を実装してきた。ただ、これでは両方のオブジェクトに横断的に存在する機能についての実装をどちらに実装すべきか難しくなる(あるいは適宜決定しなければならなくなる)。たとえば、プログラムのロギングやGUIの状態変更に伴う画面再描画などは、横断的に機能を実装し、慎重に呼び出しコードを書き忘れないようにしなければならない。このように横断的な機能を単一のコンポーネントにまとめる技術をアスペクト指向プログラミングという。ASPECTとは外見や外観、側面といった意味がある。
- API, Application Programming Interface
- Argument, 引数
- 関数の引数や、プログラムの引数のこと。
- ADNL, Argument Dependent Name Lookup, KL, Koenig Lookup
- 引数の型が属する名前空間内の関数の名前空間解決が自動的に行われること。
- Array, 配列
- メモリ上に連続したデータ列を得るためのプログラミング言語の機能を指す。連続する領域をメモリ上に確保するため、実行途中に増やすことは難しい(後ろの領域が他で使われている可能性があるため)。これを解決するものとして、ベクター、リストなどがある。
- Array Covariance, 配列の共変性
- Aspect, アスペクト
- Assembler, アセンブラ
- Assembly, アセンブリ
- Associative Array, 連想配列
- Atomic, アトミック、原子操作
- Automaton, オートマトン
B
- Backword Reference, 後方参照
- Barton–Nackman trick, バートン-ナックマンのトリック
- C++でoperator!=を簡単に実装するためのトリックのこと。単純にoperator!=はoperator==の結果を反転すればいいだけなので、それを基底クラスで定義し、継承すれば簡単に実装できる。
- BDUF, 事前の大規模設計
- Binary Translation, バイナリ・トランスレーション方式
- Bit, Binary digit
- ビット。
- Bloom Filter, ブルームフィルタ
- Boyer-Moore String Search Algorithm, ボイヤー・ムーア文字列検索アルゴリズム
- Bottleneck, ボトルネック
- Branch Prediction, 分岐予測
- BS法
- ブレインストーミング法のこと。「自由に意見を出し合い、あるテーマに関する多様な意見を抽出する。質より量を重視し、お互いの意見に批判をせず、自由に意見を出し合うことで、周辺知識を列挙することができる。」(出展Wikipedia)
- Business Logic, ビジネスロジック
- 主として、データに対する一連の手続きを行うプログラム中の一部分を指す。多くのアプリケーションでは、ユーザーの操作を受け、データを更新し、そして結果をユーザーに表示する。このとき、ユーザー操作を受ける部分とデータを更新する部分は分離するのが普通であるが、ユーザー操作を受ける部分に、直接データを更新するコードを含めると、データの仕様が変わった場合に修正が難しくなる。また、逆にユーザー操作を受ける部分の仕様を変えたいときに、データの更新方法を毎回毎回同じ手順でユーザー操作部分に書き加えるのも余計な不具合を生む。そこで、データ更新の一連の手続きを行うビジネスロジックを1つの層として分離する。
C
- Cache memory, キャッシュメモリー
- CPUの処理速度と主記憶装置の読み書き速度には大きな差異があるため、その差異を埋めるべく、CPU内に実装されたメモリーのこと。主記憶装置から一定量のデータをキャッシュメモリに置いておくことで、主記憶装置に毎回アクセスするのに比べて非常に高速なアクセスができる。ただ、キャッシュメモリの容量は主記憶装置に比べて、非常に小さいので、キャッシュメモリのマッピング方法やプログラムが読み書きする順序によって、キャッシュメモリ内にデータが存在しない状態が頻発する事によって、毎回主記憶装置にアクセスしてCPUの演算速度が上がらないことがある。メモリアクセスは、なるべく連続メモリに昇順にアクセスすることがキャッシュヒット率を上げる良い方法となる。
- Call-by-name, 名前呼び出し
- Call-by-need, 必要呼び出し
- Call-by-reference, 参照呼び出し
- Cellular Automaton, セルオートマトン
- Circular lists, 循環リスト
- Clamp, クランプ
- ある値が最大値(上限値)や最小値(下限値)を超えていた場合に、それに丸めること。クリッピングともいう。
- Class, クラス
- CLI, Command Line Interface, コマンドラインインタフェース
- GUIと対比。
- CLI, Common Language Infrastructure
- .NET Framework の言語共通構造のこと。
- Clipping, クリッピング
- ある値が最大値(上限値)や最小値(下限値)を超えていた場合に、それに丸めること。クランプともいう。
- Closure, クロージャ、閉包
- CLR, Common Language Runtime
- .NET Framework の言語共通ランタイムのこと。
- Coarse-Grained, 粗粒度、疎粒度
- タスク内の処理量が多いこと。
- Copy on write, COW
- インスタンスのコピーを作成する際に即座にコピーせずに、データとしては同一のものを参照した状態でコピーすること。コピー後に、書き込み操作をする際に初めてコピーすること。こうすることでメモリ的にも速度的にも有利となる。
- Co-routine, コルーチン
- Code Smell, コードの臭い
- Comment, コメント、注釈
- Comparator, コンパレータ、比較子
- Composition, 合成
- クラスを設計する際に、別のクラスの機能を取り込む方法の1つ。クラス内に、取り込みたいクラスのインスタンスを所持し、そのインスタンスのパブリックなメンバーを公開する。基本的には「AはBを持つ」という関係がある場合に、合成を利用する。「has aの関係」ともいう。似たような機能として言語レベルで「継承」をサポートしていることがある。
- Computer Cluster, コンピュータークラスター
- Concerns, 関心事
- 開発者がソフトウェアにたいして着目する事柄のこと。モジュールに近い言葉ではあるが、モジュールは機能毎に分割されることが多い。
- Concurrent Computing, 並行計算、並行コンピューティング
- 処理や計算を並行して行うこと。処理を本当に同時に動かす訳ではなく、時分割で同時に処理しているように振る舞う。一方、Parallel Computing、並列計算は本当に同時に動作する。
- Conditional compilation
- 条件コンパイル
- Constructor, コンストラクタ
- Context, コンテキスト
- Context Switch, コンテキストスイッチ
- Contravariance, 反変性
- Covariance, 共変性
- CPU modes, CPU privilege levels, CPUモード, CPU特権レベル
- CSV, Comma-Separated Values
- カンマによって区切られたデータ。
- Crosscutting Concerns, 横断的関心事
- プログラム的に分割されてしまった「関心事」のこと。
- CRTP, Curiously Recurring Template Pattern, 自己言及的なテンプレート,不思議に再帰しているテンプレートパターン
- CRUD, Create-Read-Update-Delete
- Cyclomatic Complexity
- サイクロマチック複雑度。
- CVS, Concurrent Versions System
- バージョン管理システムの1つ。
D
- Data Dependency, データ依存
- 複数のタスクが共通するデータを参照し、書き換えるような場合に、それらのタスクはデータ依存しているという。
- DbC, Design by Contract, 契約プログラミング
- DDD, Domain-Driven Design, ドメイン駆動設計
- 問題領域を解決する事を優先して、ソフトウェア設計を行う事。
- Dead Lock
- デッドロック。にっちもさっちも行かない状態。たとえば、ふたつの処理があり、それらが同時に動いているにも関わらず、お互いにもう片方の処理が終わるのを待つなど。
- Declaration, 宣言
- Defensive Programming, 防衛的プログラミング、防御的プログラミング、予防的プログラミング
- 起こりえない事や想定外の状態に対しても、防御的、防衛的、予防的に処理を書き、なるべくクラッシュしないような作りにする事。
- Definition, 定義
- Delayed Evaluation, 遅延評価
- Delegation, 委譲
- Demangle, デマングル
- Design Patterns, デザインパターン
- Destructor, デストラクタ
- DI, Dependency Injection, 依存性注入
- あるフレームワークに依存性(実装)を注入すること。
- DIP, Dependency Inversion Principle, 依存関係逆転の原則
- Direct mapping, ダイレクトマッピング
- キャッシュメモリの
- Directed Graph, 有向グラフ
- Directive, ディレクティブ
- Dlr, Dynamic Language Runtime
- Distributed Computing, 分散コンピューティング
- Divergence, ダイバージェンス
- たとえば複数のスレッドで別々のコードパスが実行されているとき、それらを「ダイバージェンス」と呼ぶ。直訳は「相違」。
- Doubly lilnked lists, 双方向リスト
- DRY, Don't Repeat Yourself
- 重複を作らないという原則。
- DSL, Domain Specific Language,ドメイン固有言語
- 特定のドメイン(領域)に特化したプログラミング言語のこと。
- Duck Typing, ダックタイピング
- アヒルのように歩き、アヒルのように鳴くものはアヒルに違いない。
- DVCS, Distributed Version Control System, 分散バージョン制御システム
- Dynamic Analysis, 動的解析
- Dynamic Binding, 動的束縛
E
- Eager Evaluation, 先行評価
- EBO, Empty Base Optimization
- 空の基底クラスのサイズを0バイトにする最適化のこと。
- EHSTM, Extended Hierarchy State Transition Matrix, 拡張階層化状態遷移表
- EOF, End Of File
- ファイル終端
- EOL, End Of Line
- 行終端
- Enchantingly parallel, 魅惑的並列
- 順序依存もデータ依存もないコードのこと。
- Enum, 列挙体
- Enumerator, 列挙子
- EoD, Ease of Development
- 開発コスト・保守コストを下げること。
- ET, Expression Template, 式テンプレート
- Exception, 例外
- Exception Safety, 例外安全
- Extracting Unrelated Subproblems, 無関係の下位問題の抽出
- 書籍「リーダブルコード(The Art of Readable Code)」で紹介された関数化に関する原則。
F
- Façade, ファサード
- 建築物の正面を表すフランス語が語源。アプリケーションを建築物と見立て、その正面、つまり外部から使用できる機能などを表す言葉。
- Factory, ファクトリー
- False Positive, 偽陽性, Type I error, 第一種過誤, α error, アルファ過誤
- False Negative, 偽陰性, Type II error, 第二種過誤 , β error, ベータ過誤
- Feature, フィーチャー、特徴
- ソフトウェアの機能を指す言葉として使われることがある。
- Field, フィールド
- Final, ファイナル
- Finalizer, ファイナライザ
- Fine-grained, 細粒度
- タスク内の処理賞が少ない状態。
- First-Class Function, 第一級関数
- First-Class Object, 第一級オブジェクト
- Fishbone mode, フィッシュボーンモデル
- 改良型MVC
- Floating Point, 浮動小数点数
- Forward Reference, 前方参照
- Fragmentation, フラグメンテーション
- Function, 関数
- Functional Programming, 関数型プログラミング
- Functor, ファンクタ
G
- GA, Genetic Algorithm, 遺伝的アルゴリズム
- Garbage Collection
- ガーベッジコレクション
- Generics, ジェネリックス、総称
- Generic Programming
- ジェネリックプログラミング
- Getter, ゲッター
- クラスのある値を取得するための関数やプロパティ。
- GPGPU, General Purpose GPU
- GPUによる汎用的な計算。
- Granularity, 粒度
- タスク内の処理量、データ量をのこと。
- Graph, グラフ
- Graph theory, グラフ理論
- Grover's algorithm, グローバーのアルゴリズム
- 線形探索の一種で、量子コンピュータが必要。
- Grid Computing、グリッドコンピューティング
- Gustafson's law、Gustafson-Barsis' law, グスタフソンの法則
H
- Hash, ハッシュ
- Hash function, ハッシュ関数
- Hash search, ハッシュ探索
- チェイン法とオープンアドレス法がある。
- Heterogenous Programming, ヘテロジニアス・プログラミング, 異種プログラミング
- 複数の異なる種類のプロセッサ上で動く並列プログラムを作ること。
- Hexspeak
- 未初期化変数へのアクセスや範囲外アクセスを検知するために埋めるマジックナンバーのこと。
- Homogeneous Programming, ホモジニアス・プログラミング, 同種プログラミング
- 同種のプロセッサ上で動く並列プログラムを作ること。
- HOF, Higher-Order Function, 高階関数
I
- Idempotence, 冪等性
- ある操作について、その操作を1回行った結果と、複数回行った結果が同じになる性質のこと。たとえば、絶対値を取る関数abs()は冪等である。また、C言語のほとんどのヘッダーは、何回インクルードされても1回インクルードしたのと同じになるようにインクルードガードによって、冪等性を持つ。
- Idiom, イディオム
- Implementation, 実装
- Immutable, イミュータブル
- Include Guard, インクルードガード
- C言語のヘッダーにおいて、多重インクルードを防止するための仕組み。多重にインクルードされると、同じ内容が複数個所に現れてしまい、多重定義エラーとなる。一般的には、「#ifndef YOUR_HEADER_INCLUDED (改行) #define YOUR_HEADER_INCLUDED (改行)」で始まり、「#endif」で閉じる。最近の多くのコンパイラでは「#pragma once」を書くことで、実現できる。
- Incomplete Class Declaration, 不完全クラス
- Indexer, インデクサ
- Inheritance, 継承
- クラスを設計する際に、別のクラスの機能を取り込む方法の1つ。取り込む際には、言語機能の「継承」を利用するが、安易な継承をしてはならない。AクラスがBクラスの機能を取り込む際、「AはBである」と言える必要がある。たとえば「車は乗り物である」とか「int32はintegerである」といえる場合にのみ継承を使用する。「is a」の関係とも言う。そう言えない場合には「合成」を使用する。継承は、2つのクラスに密結合を生む。
- Inline, インライン
- Inline Method Caching, インライン・メソッド・キャッシュ
- In-Place Algorithm, インプレイスアルゴリズム
- Instance, インスタンス
- Interface, インタフェース
- Interpreter, インタプリタ
- Interrupt, 割り込み
- Inversion of Control、IoC、制御の反転
- 古いアーキテクチャの制御を反転すること。フレームワーク?
- ISP, Interface Segregation Principle - インタフェース分離の原則
- Iterator, イテレータ
J
- JIT, Just In Time, ジャストインタイム、実行時
- Join, ジョイン
- JTAG, Joint Test Action Group
K
- KISS,Keep it simple, Stupid!, 簡単にしろ、バカ!
- 「KISSの原則」(Smith, 1983) という本で語られたシンプルに書けよという原則。
- KJ法
- 「KJ法とは、東京工業大学名誉教授 川喜田二郎がデータをまとめる際に考案した手法で「創造性開発」(または創造的問題解決)に効果がある。」(出展Wikipedia)
L
- Latency, 待ち時間、停止時間、レイテンシ
- Lazy Evaluation, 遅延評価
- Linked List, リンクリスト, 連結リスト
- List, リスト
- Listener, リスナ
- Live Lock, ライブロック
- LSP, Liskov Substituion Principle, リスコフの置換原則
- LTSV, Labeled-Tab-Separated Values
- 行先頭にラベル、それ以降はタブで区切られたデータのこと。「label1:value1\tvalue2\tvalue3」のようになる。
- lvalue, 左辺値
M
- Managed pointer, 管理下ポインタ
- Mangle, マングル, 名前マングル
- Member, メンバ
- Memory, メモリ
- Memory compaction, メモリ・コンパクション
- Message, メッセージ
- Message Passing, メッセージパッシング
- Meta-circular-interpreter, メタ・サーキュラ・インタプリタ
- Meta-programming, メタプログラミング
- Metavariable, 超変数
- Method, メソッド
- Method Cahin, メソッドチェーン, メソッド連鎖
- メソッドを呼び出しを連続させること。たとえば、「a.CreateMessage().ShowMessage();」な感じ。
- MIMD, Multiple Instruction/Multiple Data
- 複数の命令に対し複数データを処理する命令並列化。
- Module, モジュール
- MOJO, MOve of Joint Objects
- MOP, Meta Object Protocol
- Monad, モナド, 単子
- Monomorphic inline method caching, 単相的インライン・メソッド・キャッシュ
- Moore's Law, ムーアの法則
- MPI, Message Passing Interface
- Multiply linked lists, 多重連結リスト
- Multiprocessing, マルチプロセッシング
- Multi Tasking, マルチタスク
- Mutable, 更新可能な
- Mutex, ミューテックス
- Mutual Exclusion
- MVAC, Model View Application Controller
- MVC, Model View Controller
- MVVM, Model View View-Model
N
- Namespace, 名前空間
- Name Mangle, 名前マングル
- Name Mangling, 名前マングリング
- Naming conventions, 命名規則
- Node, ノード
- Non Functional Requirements, 非機能要求
- Noninvasiveness, 非侵入性
- AOPでポイントカットが実装と切り離され、自動的に挿入されることで得られるメリットのこと。Obliviousnessで指す性質と全く同じことを逆にとらえている。
- NRVO, Named Return Value Optimization, 名前付き戻り値の最適化
- NTP, Named Template Parameter, 名前付きテンプレートパラメータ
- Null, ヌル
- Null hypothesis, 帰無仮説
- いわゆる背理法における逆説のこと。ただ背理法とは違って、明確に答えが決められないものに対して用いるようである。一般的には、「仮説検定」と呼ばれる検定を行う際に用いる。
ある問題に対して、それを解決するための手段が正しいことを証明したい。証明したい仮説の反対の仮説
- NUMA, Non-Uniform Memory Access, ヌマ
O
- Object Pool - オブジェクト・プーリング
- Obliviousness, 忘れっぽさ
- AOPにおいて、ポイントカットが自動的に挿入されることを忘れデバッグで困る性質のこと。AOPの弱点であると指摘されている。ただし、IDEでカヴァーは可能。Eclipse上では、エディタで見ることができるので、決して忘れっぽくない。
- OCP, Open-Closed Principle, オープン・クローズドの原則
- ODR, One Definition Rule
- すべてのプログラム要素は一度だけ定義されるべきという規則。
- OOP, Object Oriented Programming, オブジェクト指向プログラミング
- Alan Kayによって考えられた。
- Opaque Pointor, 不透明ポインタ
- OpenCL, Open Computing Language
- OpenCV, Open source Computer Vision Library
- OpenMP, Open Multi Processing
- Operator, 演算子
- Order, オーダー
- 計算量やメモリ使用量などが、要素数Nによってどう変わるかを定量的に表したもの。一般的に「O(n) > O(√n) > O(log n) > O(1) 」という関係が成り立つ。
- Order dependency, 順序依存
- 複数のタスクの実行順序に依存性があること。たとえばタスクAの結果をタスクBが利用する場合、タスクAとタスクBは順序依存しているという。
- Out-of-order execution, OoO, O-o-O, アウト・オブ・オーダー実行
- Overload, オーバーロード
- Override, オーバーライド
P
- Parallel Computing, 並列計算、並列コンピューティング
- 計算や処理を同時に実行すること。Concurrent Computingが時分割での同時実行を実現したのに対し、こちらはハードウェア資源レベルでも本当に同時に処理を実行する。
- Parallel region, 並列実行区間
- Parameter, パラメータ
- Paravirtualization, パラバーチャライゼーション
- Perfect loop nest, 完全なループネスト
- あるループが完全に別のループのネストになっている状態。
- Performance analysis, 性能解析
- Petri Net, ペトリネット
- PHP
- Web言語。
- Pipeline, パイプライン
- PIMPLE IDIOM
- C++でprivateの変数などを隠すための手法→http://www.codepedia.com/1/CppPimpl
- POD, Plain Old Data
- Pointcut, ポイントカット
- AOPにおける技術。
- Pointer, ポインタ
- Polymorphism, ポリモーフィズム、多相性
- Polymorphic inline method caching, 多相的インライン・メソッド・キャッシュ
- Polyvalent function, ポリバレント暗号
- POSIX
- Pragma, プラグマ
- Preemption, プリエンプション
- Preprocess, プリプロセス
- Preprocessor, プリプロセッサ
- Principle of least astonishment, 驚き最小の原則
- 使い手が驚かない設計をすべきだという原則。
- Probabilistic data structures, 確率的データ構造
- Problem Instances, 問題インスタンス
- 問題に対して入力されるデータの集合のこと
- Process, プロセス
- アプリケーションがコンピュータ上で動作する単位と考えると良い(大雑把な言い方ではあるが)。コンピュータでは、複数のアプリケーションを同時に実行できる仕組みをもっている(マルチタスクOSという)。このとき、アプリケーションがコンピュータ資源を独占しないように、また他のアプリケーションのそれと混同しないように、アプリケーションを1つのプロセスとして実行し、そのプロセス単位でメモリなどを管理するようになっている。またアプリケーションを多重起動できることからもわかるように、1つのアプリケーションが複数のプロセスで動くこともできる。(逆に、1つのプロセスの中で、複数のアプリケーションを動かす仕組みもある。(アプリケーションをどの単位で考えるか、という問題もあるが、.NET Frameworkのアプリケーション・ドメインはまさにそういう仕組になっている。))
- Profiler, プロファイラ
- Program counter, プログラムカウンタ
- Programming by contract, 契約プログラミング
- Property, プロパティ
- PTS, Partial Template Specialization
- Pure-virtual, 純粋仮想
Q
- Queue, キュー
R
- Rabin-Karp String Search Algorithm, ラビン・カーブ文字列検索アルゴリズム
- Radix tree, Patricia tree, 基数木、パトリシア木
- RAII, Resource Acquisition Is Initialization
- RDI, Remote Debug Interface
- Recursive, 再帰、リカーシブ
- Recursive slow-down, リカーシブスローダウン
- Reduction, リダクション
- Reentrant, 再入可能、リエントラント
- Refactoring, リファクタリング
- Reference, 参照、リファレンス
- Register, レジスタ
- Relocatable, 再配置可能
- Routine, ルーチン
- RTTI, Run Time Type Information, 実行時型情報, Run Time Type Identification, 実行時型識別
- Rubber Ducking, ラバーダッキング
- rvalue, 右辺値
- RVO, Return Value Optimization
S
- S-Expression, S式
- Sacrificial Architecture, 犠牲的アーキテクチャー
- プログラムの移植性や保守性に対する考え方、プログラムの構成。ソフトウェア開発において、ある時点で、どんなに完璧なものを作ったとしても、その時に正しかったことも、将来においては正しくないことが出てくる。そのため、プログラムの一部、または全部をいずれは破棄することになる。その時が来たときに、できるだけ最小の破棄で済むように、モジュール化を進めるなど、今から考慮したアーキテクチャーにすることが重要となる。
- Safe Exception Handling principle, 安全な例外ハンドリングの原則
- Scope, スコープ
- SDLC, Software Development Life Cycle
- Search algorithm, 探索アルゴリズム
- Semantics, セマンティクス
- Semaphore, セマフォ
- SFINAE, Substitution Failure Is Not An Error
- SOC, Separation of Concerns, 関心事の分離
- 関心事に基づき、プログラムを分割すること。
- Setter, セッタ
- Short-Circuit Evaluation, 短絡評価, Minimum Evaluation, 最小評価
- 式全体を評価せずに一部だけを評価すること。たとえば「X and Y」の場合、「X」が偽であれば式全体は「偽」となるため、「Y」を評価せずに式全体を「偽」とすること。C言語で言えば「&」に対して「&&」は短絡演算子となる。
- SIMD, Single Instruction Multiple Data
- 一回の命令で複数のデータを一度に扱う命令並列化。
- Singly linked lists, 片方向リスト
- Smalltalk
- コンピュータ言語。先進的すぎる。
- Smart-Pointer, スマートポインタ
- SMP, Symmetrical Multiprocessing, 対称型マルチプロセッシング
- Snooping, スヌーピング
- SOC, Separation Of Concerns, 関心事の分離
- 関心事を分離する事。構造化プログラミング、オブジェクト指向、アスペクト指向など、様々なプログラミングパラダイムで推奨される。
- Software Patterns, ソフトウェアパターン
- Squeak
- Smalltalkの実装環境。
- Squirrel
- 高級スクリプト言語。
- SRP (Single Responsibility Principle)
- 単一責任の原則。ひとつの責任だけを負うべし。異なる役割を混在させてはいけない。よく、「A()のあとにB()を必ずやらなきゃいけない」場合に、「A()の中でB()を呼ぶ」ように実装してしまう。これは、単一責任の原則に反している場合が多い。できるだけ分離した方が、使い回しやすく、関数が複雑化しないためテストもしやすい。また、X()がA()とC()を順に呼び出し、C()の後にもB()を行うような場合、A()とC()でそれぞれ2回B()を呼び出すことになる。これは殆どの場合、悪い結果を生む。まず第一にパフォーマンスが低下する。もっと悪い場合だと、X()が本来A(),C()を連続して行い、B()でその出力を外部に通知するようなものだとしたら、A()が完了した段階で、B()によって中途半端な状態が外部に通知されてしまう。これは、ACIDの原則にも反することとなってしまう。
- SRS, Software Requirements Specification, ソフトウェア要求仕様
- Stack, スタック
- Stall
- 行き詰まりのこと。特に並列処理において、これ以上並列化できないという状態や、あるノードが遊んでしまう状態(アイドル状態)を示す。
- Statements, ステートメント
- Static, 静的
- Static Analysis, 静的解析
- Statistical hypothesis testing, 統計学的仮説検定
- STM, State Transition Matrix, 状態遷移表
- Stride, ストライド
- Structure, 構造体
- Structured Programming, 構造化プログラミング
- STS division, Source Transform Sink division, STS分割
- Stub, スタブ
- Stub-Based Dispatch, スタブベース・ディスパッチ
- Subroutine, サブルーチン
- Suffix tree, 接尾辞木
- Supervising Controller Pattern, 監視コントローラー パターン
- Syntax, シンタックス, 構文
- プログラミングソースコードの「書き方」。「構文」とよく言う。構文に則って書くことでコンパイルできる。構文を間違えると「構文エラー(Syntax error)」としてエラーになる。構文はプログラミング言語の仕様書に定義される。
- Syntax analysis, Parsing, 構文解析,パーサー
- コンパイラにおいて、ソースコードを構文を解析する機能。
- Synchronized, シンクロナイズド
T
- TCO, Tail Call Optimization, 末尾最適化、末尾呼び出しの最適化
- 関数末尾に別の関数を呼び出す前に、スタックを巻き戻してから関数を呼び出す最適化のこと。省メモリとなり、スタックオーバーフローを防ぐ事ができる。ただし、C言語では副作用が出る可能性があるため、特定条件が揃わなければ最適化は行われない。関数型言語であれば、ほとんどの場合、最適化が行われる。
- Task, タスク
- Template, テンプレート
- Tester-Doer Pattern, Tester-Doerパターン, テスター・ドゥアー・パターン
- ある関数が例外を発生する可能性がある場合に、その例外発生によるパフォーマンス低下を防ぐために、先にテストを実施すること。たとえば、関数の引数にnullを与えることでヌル参照例外が発生するような関数があった場合に、先にnullチェックを行うこと。
- Thunk, サンク
- Thread, スレッド
- 元は、Thread of execution、実行の脈絡という言葉の省略したもの。1本の糸の上をコンピュータの処理が進んでいく流れを「脈絡」と例え、その脈絡を表す糸が何本もある様子を表している。スレッドは、プロセス内に1つ以上存在し、主にプロセスのエントリポイント(main関数)が実行されるスレッドをメインスレッドという。その他のスレッドを総称してワーカースレッドと呼ぶが、特別な名前をつけて区別することが多い。またGUIアプリケーションにおいては、メインスレッドのことをUIスレッドと呼ぶことが多い。
- Thread-Free, スレッド・フリー
- Thread hog, スレッドホグ
- スレッドを大量に生成してしまい、コンピュータ資源を予想外に消費してしまう事。
- Thread group, スレッドグループ, Thread tile, スレッドタイル, Thread block
- マルチプロセッサで一度に実行されるスレッド群。スケジューリングの単位となる。
- Thread-Safe, スレッド・セーフ
- Thrashing,スラッシング
- キャッシュメモリのあるシステムの用語キャッシュヒットミスが大量に発生し、主記憶装置からキャッシュメモリへのコピーが大量に発生して、処理速度が低下してしまっている状態。
- Thrashing,スラッシング
- 仮想メモリのあるシステムの用語。ページイン、ページアウトなどが大量に発生し、物理メモリと仮想メモリへの行き来に関わる処理負荷ばかりになってしまっている状態。
- Throughput, スループット
- TLS, Thread Local Storage
- Token, 字句, トークン
- Tokenizer, 字句解析, トークナイザー
- Tracing Jit
- Translation Units, 翻訳単位
- Trie Tree, Prefix Tree, トライ木、プレフィックス木
- TryParse Pattern, TryParseパターン, トライ・パーズ・パターン
- ある関数が定常的に例外を発生する可能性がある場合に、その例外発生によるパフォーマンス低下を防ぐために、試行しながら実施すること。Tester-Doerパターンに似ているが、Tester-DoerのTester部分が重い処理になる場合にこのパターンを使用する。
- TSV, Tab-Separated Values
- タブで区切られたデータ。
- Turing Machine, チューリングマシン
- Type Inference, 型推論
U
- Ultra Threading
- GPU上でのマルチスレッディング。CPUのマルチスレッディングが多くて4スレッドなのに対して、ウルトラスレッディングでは、500を超えるスレッドを扱うために名付けられた。
- Undirected Graph, 無向グラフ
- Unification, ユニフィケーション, 単一化, 統一化
- 論理型プログラミングにおいて、命題を証明するための基本的な操作のことを指す。
- Union, 共用体
- Unrolled linked list
- Use case driven development, ユースケース駆動開発
- ユースケース(使われ方)の要件を単位として設計から開発、テストを行うこと。要件ごとの開発状況を把握しやすい。
V
- Variable, 変数
- Vector, ベクター
- Virtual, 仮想
- Virtual Method, 仮想メソッド
- VLIW, Very Long Instruction Word
- 一度に複数の命令を実行する命令並列化。流行らなかった。
W
- Weak-Pointer, ウィークポインタ
- Weak-Typedef, 弱いtypedef
- WFI,WFE
- ARM CPUに実装されているCPUクロックを停止させる命令のこと。
X
- XOR
- XOR linked list, XOR連結リスト
Y
- YAGNI, 今必要なことだけを行う
Z
- Zero-Overhead Principle, ゼロオーバーヘッドの原則
- ある機能を追加で実装する際に、その機能を使わない処理に対して影響を及ぼさないこと。C++はこの原則に従い機能拡張を行なっているので、たとえ何かの便利機能が追加されたとしても、それを使っていないコードには一切の影響を及ぼさない。
その他
- 説明変数
- 式を表す名前を持った変数のこと。
- 要約変数
- 式の持つ意味を要約した名前を持つ変数のこと。
参考