09 - プログラミングの概念とパラダイム
ソフトウェア設計とアーキテクチャ
Relevant DSS-P Skills
- 3. テクノロジー > 3.1 ソフトウェア開発 > ソフトウェア設計手法
設計原則
- Orthogonality and DRY principle - システム内のあらゆる知識は単一の、曖昧さのない、権威ある表現を持たなければなら ないという原則です
- Separation of concerns - コンピュータプログラムを個別のセクションに分離するための設計原則です
- Design by Contract - ソフトウェアコンポーネントに対して形式的で正確かつ検証可能なインターフェース仕様を規定する、ソフトウェア設計のアプローチです
- Law of Demeter - ソフトウェア、特にオブジェクト指向プログラムを開発するための設計ガイドラインです
- Hyrum's Law - 暗黙のインターフェースの法則であり、API の利用者が十分な数に達すると、システムの観測可能なすべての振る舞いに誰かが依存するようになるというものです
- SOLID - The principle of OOD - オブジェクト指向設計をより理解しやすく、柔軟で保守しやすいものにすることを意図した、5 つの設計原則の頭字語です
- Single responsibility
- Open–closed
- Liskov substitution
- Interface segregation
- Dependency inversion
- The Reactive Manifesto - アプリケーションが応答性、耐障害性、弾力性を持ちメッセージ駆動であることを目指す、システム アーキテクチャに対する首尾一貫したアプローチです
- Unix philosophy - ソフトウェア開発に対する文化的規範と哲学的アプローチの集合です
- KISS principle - ほとんどのシステムは複雑にするよりもシンプルに保つ方がうまく機能するとする設計原則です
- Wirth's law - ソフトウェアはハードウェアが高速化する以上に急速に低速化しているとするコンピュータ性能に関する格言です
設計のベストプラクティス
- Resource acquisition is initialization (RAII) - リソースのライフサイクルをオブジェクトの寿命に結びつけるプログラミングイディオムです
- Rob Pike's 5 Rules of Programming - 最適化の努力をどこに向けるべきかについての一連のルールであり、計測とデータ構造の重要性を強調するものです
- The Zen of Python - コンピュータプログラムを書くための 19 の指導原則を集めたもので、Python プログラミング言語の設計に影響を与えたものです
- The twelve-factor app - 現代的なクラウドプラットフォームでの展開に適した Software-as-a-Service アプリケーションを構築するための方法論です
デザインパターン
- Software design pattern - ソフトウェア設計において特定の文脈内で頻繁に発生する問題に対する、一般的で再利用可能な解決策です
- Entity–control–boundary - オブジェクト指向システムにおけるクラスの責務の構造化を助ける、ソフトウェア設計・分析で使用されるアーキテクチャパターンです
- Command Query Responsibility Segregation - データストアの読み取り操作と更新操作を分離するパターンです
- Fluent interface - メソッドチェーンに基づいてオブジェクト指向 API を設計する手法であり、ソースコードの可読性を通常の文章に近づけることを目標としています
- Model-view-controller pattern - 関連するプログラムロジックを 3 つの相互接続された要素に分割する、ユーザーインターフェース開発によく使われるソフトウェア設計パターンです
- Dependency injection - オブジェクトや関数が依存する他のオブジェクトや関数を受け取る設計パターンです
アーキテクチャスタイル
- Three-tier architecture - プレゼンテーション、アプリケーション処理、データ管理の各機能が論理的に分離された、クライアントサーバーアーキテクチャです
- Microservices architecture - 単一のアプリケーションを、それぞれが独自のプロセスで動作し軽量な仕組みで通信する小さなサービス群として開発するアプローチです
- Event-driven architecture - イベントの生成、検知、消費、およびそれへの反応を促進するソフトウェアアーキテクチャパラダ イムです
- Resource-oriented architecture - リソースのネットワークという形でソフトウェアを設計・開発するための、ソフトウェアアーキテクチャおよびプログラミングパラダイムのスタイルです
- Background processing - メインアプリケーションの応答性を維持しながら、バックグラウンドでタスクを実行することです
アーキテクチャ記述
- System - 一定の規則に従って相互作用または相互関連し、統一された全体を形成する要素の集合です
- Systems architecture - システムの構造、振る舞い、その他の視点を定義する概念モデルです
- 4+1 architectural view model - 「複数の並行するビューの使用に基づいてソフトウェア集約型システムのアーキテクチャを記述する」ために使用されるビューモデルです
- The C4 model - 学びやすく開発者に優し い、ソフトウェアアーキテクチャ図の作成アプローチです
- UML - ソフトウェア集約型システムの成果物を可視化、仕様化、構築、文書化するためのグラフィカル言語です
- Flowchart - ワークフローやプロセスを表現する図の一種です
- Conway's law - 組織は自らのコミュニケーション構造を反映したシステムを設計するという格言です
- Systems architecture - システムの構造、振る舞い、その他の視点を定義する概念モデルです
- 関連標準
- ISO/IEC/IEEE 42010 (Architecture description) - システムおよびソフトウェアのアーキテクチャ記述に関する国際標準規格です
ドメイン駆動設計 (DDD)
- Domain-driven design - そのドメインの専門家からの入力に従って、ドメインに一致するようにソフトウェアをモデル化することに重点を置いた、主要なソフトウェア設計アプローチです
- Ubiquitous Language - 開発者とユーザーの間で共通かつ厳密な言語を構築する実践です
- Anemic domain model - ドメインオブジェクトが検証、計算、ルールなどのビジネスロジックをほとんど、あるいはまったく含まないプログラミングのアンチパターンです
- Object-oriented analysis and design - オブジェクト指向プログラミングを適用し、ソフトウェア開発プロセス全体を通じて視覚的モデリングを使用することで、アプリケーション、システム、またはビジネスを分析・設計するための技術的アプローチです
- Use case - 目標を達成するために、役割 (Unified Modeling Language ではアクターと呼ばれる) とシステムとの間の相互作用を定義する、一連の行動またはイベントステップの一覧です
- Ontology - 1 つ、複数、またはすべての議論領域を構成する概念、データ、実体間のカテゴリ、性質、関係を表現し、形式的に命名・定義したものです
- Semantic network - ネットワーク内の概念間の意味的関係を表現するナレッジベースです
- WordNet - 英語 の大規模な語彙データベースです
- Semantic network - ネットワーク内の概念間の意味的関係を表現するナレッジベースです
- Database design - データベースモデルに従ったデータの編成です
コアプログラミング概念
Relevant DSS-P Skills
- 3. テクノロジー > 3.1 ソフトウェア開発 > コンピュータサイエンス
言語の仕組みと実行
- Source code - 通常は プレーンテキストとして、人間が読めるプログラミング言語を使って書かれた、コメントを含む場合もあるコードの集合です
- Statement - 実行すべき何らかの動作を表現する、命令型プログラミング言語の構文単位です
- Expression - 評価してその値を決定できる、プログラミング言語における構文的実体です
- 演算子とオペランド
- Literal - ソースコード内で固定値を表現するための表記法です
- テンプレート文字列またはリテラル
- Heredoc - ソースコードの一部を、あたかも別のファイルであるかのように扱う、ファイルリテラルまたは入力ストリームリテラルです
- Constant - プログラムの通常の実行中に変更できない値です
- Variable - 値と呼ばれる既知または未知の量の情報を含む、シンボリックな名前と対応付けられた抽象的な記憶場所です
- Scope - コンピュータプログラム内で、名前とエンティティの束縛 (名前束縛) が有効となる領域です
- Data type - 通常は可能な値の集合と許される操作によって指定される、データ値の集合または分類です
- Primitives - プログラミング言語が基本的な構成要素として提供する、他のデータ型を用いずに定義されるデータ型です
- Nominal type system - データ型の互換性と同等性が明示的な宣言や型名によって決定される、型システムの主要な分類の 1 つです
- Structural type system - 型の互換性と同等性が型の実際の構造や定義によって決定される、型システムの主要な分類です
- Duck typing - 特定のメソッドやプロパティの有無に基づいて型の互換性を判定する、ダックテストの応用です
- Union type - そのインスタンスに格納できる複数の許容されたプリミティブ型を指定するデータ型定義です
- Type variance - 複合型のサブタイプとその構成要素のサブタイプとの間の関係です
- Type safety - プログラミング言語が型エラーをどの程度抑止または防止するかの度合いです
- Reference - プログラムがコンピュータのメモリや他の記憶装置内の特定のデータに間接的にアクセスできるようにする値です
- Null pointer - ポインタや参照が有効なオブジェクトを参照していないことを示すために保存された値です
メモリ管理
- Reference counting - リソースへの参照、ポインタ、ハンドルの数を保持するプログラミング技法です
- Garbage collection - コレクタがもはや使用されていないオブジェクトが占有するメモリの回収を試みる、自動メモリ管理の一形態です
- Smart pointer - ポインタを模倣しつつ、自動メモリ管理や境界チェックなどの追加機能を提供する抽象データ型です
- Memory safety - メモリアクセスを扱う際に、様々なソフトウェアのバグやセキュリティ脆弱性から保護されている状態です
制御フロー構造
- Control flow - 命令型プログラムの個々の文、命令、関数呼び出しが実行または評価される順序です
- Continuation - プログラムの計算処理の、ある時点以降の残りを表すデータ構造です
- call-with-current-continuation - 特に Scheme プログラミング言語において継続を捕捉し呼び出すために使用される、制御フロー演算子です
- Exception handling - プログラムの実行中に発生する例外への対応処理です
- Finite-state machine - ある時点で有限個の状態のうちのちょうど 1 つを取り得る抽象機械を表現する、計算の数学的モデルです
基礎的な技法と特性
- State - ある瞬間において、コンピュータプログラムまたはシステムがアクセスできる、保存された情報です
- Function - 特定のタスクを実行する、1 つの単位としてまとめられたプログラム命令の並びです
- Parameter - 入力として与えられるデータの一部を参照するために、サブルーチンや関数で使用される特別な種類の変数です
- Anonymous function - 識別子に束縛されていない関数定義です
- Immutable object - 作成後に状態を変更できないオブジェクトです
- Generic Programming - 必要に応じて後からインスタンス化される、後で指定される型を用いてアルゴリズムを記述するプログラミングスタイルです
- Assertion - コード内のある地点で、述語 (ブール値を返す関数) が常に真であることが期待されるという表明です
- Autovivification - 新しい変数やデータ構造が初めて使用される際に必要に応じて自動的に作成されることです
モジュール構造と組織化
- Cohesion - モジュール内の要素がどの程度まとまっているかの度合いです
- Coupling - ソフトウェアモジュール間の相互依存の度合いであり、2 つのルーチンやモジュールがどの程度密接に結びついているか、およびモジュール間の関係の強さを測る尺度です
プログラミングパラダイム
Relevant DSS-P Skills
- 3. テクノロジー > 3.1 ソフトウェア開発 > コンピュータサイエンス
オブジェクト指向プログラミング
- Object-oriented Programming - オブジェクト、すなわちデータと関数をカプセル化するソフトウェアエンティティに基づくプログラミングパラダイムです
- Abstraction - 問題に適したクラスをモデル化し、最も関連性の高い詳細レベルで作業することで、システムの複雑さを隠す過程です
- Encapsulation - データとそのデータを操作するメソッドをひとまとめにすること、またはオブジェクトの一部の構成要素への直接アクセスを制限することです
- Polymorphism - 異なる型のエンティティに対して単一のインターフェースを提供することです
- Dynamic dispatch - 実行時にポリモーフィックな操作 (メソッドまたは関数) のどの実装を呼び出すかを選択する処理です
- Inheritance - 類似した実装を保持したまま、あるオブジェクトやクラスを別のオブジェクトやクラスに基づいて構成する仕組みです
- Class - 状態の初期値と振る舞いの実装を提供する、オブジェクトを作成するための拡張可能なプログラムコードのテンプレートです
- Interface - データを含まず、メソッドシグネチャとして振る舞いを定義する抽象型です
- Method - オブジェクトに関連付けられ、暗黙的にそのオブジェクトに対して作用する手続きです
- This keyword - 現在の関数呼び出しやメソッド呼び出しに関連付けられたオブジェクトを参照するために、多くのオブジェクト指向プログラミング言語で使用されるキーワードです
- Prototype-based programming - プロトタイプとして機能する既存のオブジェクトを再利用する過程を通じて、振る舞いの再利用を行うオブジェクト指向プログラミングのスタイルです
関数型プログラミング
- Functional Programming - 関数の適用と合成によってプログラムを構築するプログラミングパラダイムです
- Algebraic data type - 他の型を組み合わせて形成される複合データ型です
- Pattern matching - あるパターンの構成要素が存在するかどうかを、与えられたトークン列に対して確認する行為です
- First-class function - 関数を第一級オブジェクトとして扱う (例えば変数に代入したり引数として渡したりできる) プログラミング言語の性質です
- Referential transparency - 式をプログラムの振る舞いを変えることなくその対応する値に置き換えられるという、式の性質です
- Closure - 関数と、その関数の非局所変数のための参照環境とを組み合わせたものです
- Side-effect - 操作、関数、式が、そのローカル環境の外部にある状態変数の値を変更する、観測可能な影響です
- Monad - プログラム断片 (関数) を組み合わせ、その戻り値を追加の計算を伴う型でラップする構造を持つ、ソフトウェア設計パターンです
- Currying - 複数の引数を取る関数を、それぞれが単 一の引数を取る関数の並びに変換する技法です
リアクティブプログラミングとその他
- Reactive Programming - データストリームと変化の伝播を扱う宣言型プログラミングパラダイムです
- Functional Reactive Programming (FRP) - 関数型プログラミングの構成要素を用いたリアクティブプログラミングのためのプログラミングパラダイムです
- 言語とフレームワーク
- Aspect-oriented Programming - 横断的関心事の分離を可能にすることでモジュール性を高めることを目指すプログラミングパラダイムです
- Cross-cutting concern - プログラムのある側面が、そのいずれにもカプセル化されることなく複数のモジュールに影響を与えることです
スクリプト言語
Relevant DSS-P Skills
- 3. テクノロジー > 3.1 ソフトウェア開発 > コンピュータサイエンス
Python
- Python - 素早く作業を行いシステムをより効果 的に統合できるようにするプログラミング言語です
- コア機能
- Python import system - Python コードをモジュールやパッケージに整理し、コードの再利用と大規模アプリケーションの構造化を容易にする仕組みです
- Special method names - 先頭と末尾に二重アンダースコアが付くことで識別される、特殊な構文によって呼び出される操作をクラスが実装できるようにするメソッドです
- Type Hints - 変数、関数パラメータ、戻り値の型注釈のための標準的な構文であり、静的解析に使用されます
- typing module - 型ヒントに対する実行時サポートを提供する標準ライブラリモジュールです
- Mypy - 動的型付けと静的型付けの利点を組み合わせることを目指す、Python 用のオプションの静的型チェッカーです
- f-string - 'f' または 'F' を接頭辞に持つ文字列リテラルの一種で、最小限の構文で文字列定数の中に式を埋め込むことができます
- with statement - リソース管理のための try/finally 文の標準的な使用をカプセル化することで、例外処理を簡略化する文です
- contextlib - with 文を伴う一般的なタスクのためのユーティリティを提供するモジュールです
- Generators - yield 文を持つ関数を用いて定義される、イテレータを作成するためのシンプルで強力な方法です
- Decorators - 関数やメソッドを変換するための '@' 記号を用いた構文で、多くの場合それらを非侵襲的に変更・強化するために使用されます
- Coroutine -
async defで定義される特殊なジェネレータ関数であり、実行を中断・再開でき協調的マルチタスクを可能にします - Lambda -
lambdaキーワードを用いて定義される、単一の式に限定された小さな無名関数です - Data Classes - 主にデータを保存するために使用されるクラスを簡潔に作成する方法を提供する、モジュールおよびデコレータであり、特殊メソッドを自動的に生成します
- Pattern Matching - シーケンス、マ ッピング、オブジェクト構造を含む複雑なパターンに対する値のマッチングを可能にする、switch 文に類似した機能を提供する機能です
- Unpacking Operator -
*によるイテラブルのアンパック演算子と**による辞書のアンパック演算子の拡張された使用法であり、より多くの位置で、任意の回数、かつ追加の状況においてアンパックを可能にします
- 主要ライブラリ
- 開発ツール
- IPython - 履歴機能、タブ補完、特殊なマジックコマンドを備えた、Python に対するリッチな対話型インターフェースです
- コア機能
JavaScript と TypeScript
- JavaScript/ECMAScript - ECMAScript 言語を定義する標準規格です
- モジュールシステム
- CommonJS - ブラウザ外での JavaScript のためのエコシステムを規定することを目標とするプロジェクトです
- ES modules - 再利用のために JavaScript コードをパッケージ化する公式の標準形式です
- UMD - ブラウザ、および AMD や CommonJS ベースのシステムで使用するための、Universal Module Definition のパターン群です
- コア機能
- Event-driven - ユーザーの操作、センサーの出力、他のプログラムからのメッセージといったイベントによってプログラムの流れが決定されるプログラミングパラダイムです
- Spread and rest operators - 配列式や文字列などのイテラブルを、0 個以上の引数や要素が期待される場所で展開できるようにする構文で す
- Generator - ジェネレータ関数によって返されるオブジェクトで、イテラブルプロトコルとイテレータプロトコルの両方に準拠します
- 主要ライブラリ
- Typescript - JavaScript を基盤として構築される強く型付けされたプログラミング言語で、あらゆる規模でより優れたツールを提供します
- Union Types - 複数の型を 1 つに組み合わせる方法です
- Type Aliases - 任意の型に対する名前です
- Type Assertions - コンパイラに「信じてほしい、自分が何をしているか分かっている」と伝える方法です
- Mapped Types - PropertyKeys の共用体を使用して別の型のキーを反復処理し、新しい型を作成する汎用型です
- Nominal typing techniques - デフォルトでは構造的型システムを持つ TypeScript において、公称型をシミュレートする方法です
- Declaration Files - ライブラリの型を定義するファイルです
- Decorators - クラス宣言、メソッド、アクセサ、プロパティ、パラメータに付与できる特殊な種類の宣言です
- TS 型ユーティリティ
- json-schema-to-typescript - JSONSchema を TypeScript の型宣言にコンパイルするツールです
- Json Schema to TS - FromSchema メソッドにより JSON スキーマから TS の型を直接推論できます
- モジュールシステム
- チュートリアルと実践
- 33 JS Concepts - すべての JavaScript 開発者が知っておくべき 33 の概念に関する記事をまとめたリポジトリです
- JS Project Guidelines - JavaScript プロジェクトのためのベストプラクティス集です
- Callback Hell - 非同期処理を扱う際にコールバック関数がネストしていくことです
- NodeSchool - Web ソフトウェアのスキルを教える一連のオープンソースワークショップです
- Node.js Best Practices - Node.js のベストプラクティスに関する上位ランクのコンテンツをまとめたものです
Ruby、Perl とその他
- Ruby - シンプルさと生産性に重点を置いた動的なオープンソースプログラミング言語です
- コア機能
- Percent notation - パーセント記号と区切り文字を使用して、文字列、配列、正規表現などの様々なリテラル型を生成するための簡潔な構文です
- Fiber - 実行の一時停止と再開によって協調的マルチタスクを可能にする、軽量な並行処理プリミティブです
- proc - コードのブロックを、保存、渡し、実行できるオブジェクトにカプセル化する仕組みです
- lambda - 厳密な引数チェックとローカライズされた return の振る舞いを強制する、特殊なブロックオブジェクトです
- then - オブジェクト自身をブロックに渡してその結果を返すメソッドで、関数型スタイルのメソッドチェーンを容易にします
- define_method -
define_methodを使用して実行時にメソッドを作成・登録する機能で、コードの柔軟性を高め重複を減らします - instance_eval - 特定のオブジェクトインスタンスのコンテキスト内でブロックや文字列を評価し、その内部スコープとプライベートメソッドへのアクセスを可能にするメソッドです
- ライブラリ
- 開発ツール
- IRB (Interactive Ruby) - 標準入力から読み込んだ Ruby の式を対話的に実行するツールです
- コア機能
- Perl - 2 つの高水準で汎用的、インタプリタ型かつ動的なプログラミング言語のファミリーです
- コア機能
- Special variables - Perl にとって特別な意味を持つ変数です
- Built-in regex - Perl における正規表現の構文です
- Context - 式が評価される際にどのように振る舞うかを決定する式の性質です
- Scalar values - 単一のデータ項目です
- Reference - 他のデータを「指し示す」スカラーデータ型です
- Quote-like operators - 一連の汎用的な引用演算子です
- I/O operators - ファイルハンドルからの読み取りなど、入出力操作に使用される演算子です
- コア機能
- Tcl - 幅広い用途に使用される動的プログラミング言語とグラフィカルユーザーインターフェースツールキットです
- Event-driven by design - GUI とネットワーキングに最適な組み込みのイベントループです
- Lua - 強力で効率的、軽量かつ組み込み可能なスクリプト言語です
- Emacs Lisp - Emacs テキストエディタを拡張・カスタマイズするために使用されるプログラミング言語です
- S-expression - 入れ子になったリスト (木構造) データのための記法です
- Homoiconicity - 一部のプログラミング言語が持つ性質で、プログラムの主要な表現がその言語自体のプリミティブな型のデータ構造でもあるというものです
非同期処理と並行性
Relevant DSS-P Skills
- 3. テクノロジー > 3.1 ソフトウェア開発 > コンピュータサイエンス
- Concurrent computing - 複数の計算を逐次的にではなく並行して実行する計算の形態です
- Coroutine - 実行を中断・再開できるようにすることで、非プリエンプティブなマルチタスクのためにサブルーチンを一般化したコンピュータプログラムの構成要素です
- Async/await - 非同期でノンブロッキングな関数を、通常の同期的な関数と似た方法で構造化できるようにする構文的機能です
- Futures and promises - プログラムの実行を同期させるために使用される構造体であり、最初は未知である結果のプロキシを表現します
- Semaphore - 並行システムにおいて複数のスレッドによる共通リソースへのアクセスを制御するために使用される変数または抽象データ型です
- Mutex - 複数の実行スレッドによって状態が同時に変更またはアクセスされることを防ぐ、同期プリミティブです
- Channel - メッセージパッシングによるプロセス間通信 と同期のためのモデルです
- Thread safety - マルチスレッド環境に適用可能なコンピュータコードの性質で、共有データ構造の正しい操作を保証するものです
- Deadlock - あるグループのエンティティの各メンバーが、他のメンバーが行動を起こすのを待っているために誰も先に進めなくなる、並行計算における状況です
言語解析
Relevant DSS-P Skills
- 3. テクノロジー > 3.1 ソフトウェア開発 > コンピュータサイエンス
- 概念
- Formal language - 単語、すなわち文字、記号、トークンの有限列の集合です
- Well-formed formula - 形式言語の一部である、与えられたアルファベットからの記号の有限列です
- Formal grammar - 形式言語における文字列の生成規則の集合です
- Chomsky hierarchy - 形式文法のクラスの包含階層です
- Rewriting - 式の部分項を他の項で置き換える手法の幅広い範囲です
- Confluence - 書き換えシステムの性質であり、そのシステム内のどの項が複数の方法で書き換えられて同じ結果に至るかを記述するものです
- Automata theory - 抽象機械とオートマトン、およびそれらを用いて解決できる計算上の問題を研究する分野です
- Finite-state machine - ある時点で有限個の状態のうちのちょうど 1 つを取り得て、何らかの入力に応じてある状態から別の状態へ遷移する、計算の数学的モデルです
- Lexical analysis - テキストを、レキサープログラムによって定義されたカテゴリに属する意味のある字句トークンに変換することです
- Parsing - 形式文法の規則に従う記号列を部分に分解して解析する処理です
- BNF syntax - 文脈自由文法のための記法技法であり、計算機で使用される言語の構文を記述するためによく使用されます
- AST - プログラミング言語で書かれたソースコードの抽象的な構文構造を木で表現したものです
- Formal language - 単語、すなわち文字、記号、トークンの有限列の集合です
- パーサージェネレーター
- レキサージェネレーター
- パーサー/ライブラリ
- tree-sitter - パーサジェネレータツールおよびインクリメンタルパーシングライブラリです
- ts-morph - TypeScript Compiler API のラッパーです
プログラム翻訳
Relevant DSS-P Skills
- 3. テクノロジー > 3.1 ソフトウェア開発 > コンピュータサイエンス
- 概念
- Compiler - あるプログラミング言語で書かれたコンピュータコードを別の言語に翻訳するコンピュータプログラムで す
- Transpiler - あるプログラミング言語で書かれたプログラムのソースコードを入力として受け取り、同じまたは別のプログラミング言語で等価なソースコードを生成する翻訳器の一種です
- Intermediate representation - コンパイラや仮想マシンがソースコードを表現するために内部的に使用するデータ構造またはコードです
- Program optimization - ソフトウェアシステムのある側面をより効率的に動作させたり、使用するリソースを削減したりするために変更する過程です
- Machine code - コンピュータの中央処理装置 (CPU) が直接実行できる機械語命令で書かれたコンピュータプログラムです
- Cross compiler - コンパイラが動作しているプラットフォーム以外のプラットフォーム向けに実行可能コードを生成できるコンパイラです
- Linker - 1 つ以上のオブジェクトファイルを受け取り、単一の実行可能ファイルに結合するコンピュータシステムプログラムです
主要なコンパイラ基盤
- LLVM Compiler Infrastructure - モジュール化され再利用可能なコンパイラおよびツールチェーン技術の集合です
- gcc - C、C++、Objective-C、Fortran、Ada、Go、D のフロントエンドを含む GNU Compiler Collection です
- rustc - Rust プログラミング言語のコンパイラです
個別の翻訳系とビルドツール
- MinGW-w64 - Windows システム上で GCC コンパイラをサポートするために作られた、元の mingw.org プロジェクトの発展形です
- Go build command - Go のソースコードを管理するためのツールです
- 静的バイナリ実行ファイル
- GopherJS - Go から JavaScript へのコンパイラです
- Bunster - シェルスクリプトを自己完結型の実行可能プログラムに変換するシェルコンパイラです
リンカ (スタンドアロン)
- mold - モダンなリンカです
- ランタイムライブラリ
プログラム実行
Relevant DSS-P Skills
- 3. テクノロジー > 3.1 ソフトウェア開発 > コンピュータサイエンス
- 概念
- Runtime System - プログラムが書かれた言語のために、コンピュータ上で実行されるプログラムの部分です
- Bytecode - ソフトウェアインタプリタによる効率的な実行のために設計された命令セットの一形態です
- Just-in-time compilation - プログラムの実行中にコンパイルを行うことを伴う、コンピュータコードの実行方式です
- Global interpreter lock - Python オブジェクトへのアクセスを保護し、複数のスレッドが同時に Python バイトコードを実行するのを防ぐミューテックスです
ランタイム実装
-
Javascript
- Node.js - 無料でオープンソースのクロスプラットフォーム JavaScript ランタイム環境です
- libuv - 非同期 I/O に重点を置いたマルチプラットフォーム対応サポートライブラリです
- Deno - TypeScript と JavaScript のためのモダンなランタイムです
- Deno Deploy - JavaScript、TypeScript、WebAssembly をエッジで実行できる分散型 HTTP サービスです
- Deno Subhosting - SaaS プロバイダが V8 アイソレートを使用して信頼できない顧客のコードを大規模に安全に実行するためのプラットフォームです
- Bun - JavaScript と TypeScript の実行、ビルド、テスト、デバッグのための高速なオールインワンツールキットです
- WinterJS - SpiderMonkey エンジンと Tokio ランタイムを使用して Rust 上に構築された、非常に高速な JavaScript ランタイムです
- Node.js - 無料でオープンソースのクロスプラットフォーム JavaScript ランタイム環境です
-
Python
-
Ruby
- CRuby (default)
- JRuby - Java Virtual Machine 上で動作する Ruby プログラミング言語の実装です
-
Java SE - 現代的なアプリケーション開発のための、最も実績があり信頼性が高く安全な開発プラットフォームです
- Java HotSpot VM - Oracle Corporation が提供する、デスクトップとサーバー向けの主要な Java Virtual Machine です
- JMX API - Java Platform の標準的な一部である Java Management Extensions 技術です
- JDK tools - アプリケーションを作成しビルドするためのコマンドラインツールです
- GraalVM - アヘッドオブタイムの Native Image コンパイルを備えた先進的な JDK です
- OpenJDK - Java Platform, Standard Edition のオープンソース実装を共同開発するための場です
- Eclipse Temurin - OpenJDK のオープンソースでエンタープライズ対応かつ TCK 認定済みのビルドです
-
.NET - モダンなアプリと強力なクラウドサービスを構築するための、無料でオープンソースのクロスプラットフォームフレームワークです
- CLR - .NET Framework の仮想マシンコンポーネントです
-
ランタイムユーティリティ