| English | 意味 |
|---|---|
| program library/ˈprəʊɡræm ˈlaɪbrəri/ | プログラムライブラリ |
| subroutines/ˈsʌbruːtiːnz/ | サブルーチン |
| library routines/ˈlaɪbrəri ruːˈtiːnz/ | ライブラリルーチン |
| static library/ˈstætɪk ˈlaɪbrəri/ | スタティックライブラリ |
| executable/ɪɡˈzekjʊtəbl/ | 実行可能ファイル |
| dynamic library/daɪˈnæmɪk ˈlaɪbrəri/ | ダイナミックリンクライブラリ |
インターネットを破壊した11行
- 2016年3月、あるプログラマーが公開リポジトリから
left-padという小さなライブラリを削除しました。これは11行長で、文字列の先頭にスペースを追加するだけでした。 - 数時間之内に、世界中の企業でビルドが失敗しました。数千のプログラムはこの11行を一度も書いていませんでした。すべて借用しており、それが機能しなくなった瞬間までその借用は目に見えませんでした。
- これが現代のソフトウェアの作り方です。プログラムライブラリは意図的な借用であり、このImplemented lesson は開発者にもたらすもの、それのコスト、そしてプログラムに接続される2つの方法を示しています。
プログラムライブラリとは何か
- プログラムライブラリとは、プログラム自身が書く代わりに使用できる、事前に書かれてテスト済みのルーチン、サブルーチン、クラス、モジュールの集合体です。
- 数学ライブラリ、グラフィックスライブラリ、ネットワークライブラリ、パスファインディングライブラリ、圧縮ライブラリ:それぞれ、必要なすべてのプログラムにとって一度問題領域を解決します。
- 開発中のソフトウェアは通常、このようなライブラリルーチンと、新しいプログラム固有のコードを組み合わせて構築されます。

新しいコードは小部分であり、借用されたコードは大部分である
コンピューティング概念ラボ
具体的な例を、それが示すコンピューティングのアイデアに基づいて分類せよ。
プログラムのライブラリとは:
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
ライブラリは、数学、グラフィックス、ネットワークなど、プログラムが自身で書く代わりに呼び出せる既成でテスト済みのコードを提供する。
既成、再利用可能、テスト済みのコードの集合はプログラム______である。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
ライブラリは時間を節約し、バグを減少させる。
開発者へのメリット
- ルーチンはすでに書かれてテスト済みなので、開発が早く安価になる。
- それらは信頼性が高い:多くのプログラムで使用されているため、ほぼエラーがない。
- 開発者はその分野(グラフィックス、暗号化、パスファインディングなど)の専門知識は不要であり、プログラムの独自の機能に時間を費やすことができる。
- プログラムは保守しやすい:共通コードが一处に存在し、チームが並列に作業でき、メンバー全員が同じルーチンを使用できるため。
ライブラリを使用する利点は、コードが:
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
ライブラリのコードはテスト済みで広く使用され標準化されており、再利用することで時間が节约され信頼性が向上する。
ライブラ routines を用いてソフトウェアを構築する開発者にとっての利点は何か?すべて選択せよ。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
テスト済みroutines 、専門知識不要、保守が容易。ただし、プログラム自身のコードは依然としてテストが必要である。
デメリット
- このルーチンが正確な要件に合致しない可能性があり、開発者が変更できないため、制約を回避して対応する必要がある。
- プログラムはライブラリに依存している: バグ、更新の欠如、または
left-padのような撤回されたライブラリは、プログラムの問題となる。 - ライブラリのライセンスにより、プログラムを販売・共有する方法が制限されたり、未使用のルーチンがプログラムを大型化させたりすることがある。
演習例:レストラン用ロボット
- レストラン用ロボットのソフトウェアを開発するチームは、テーブル間の最短経路を探すルーチンを含むプログラムライブラリを使用しています。このチームにとっての利点2つと欠点1つを説明してください。
- 利点: ルーチンは既に作成・テスト済みであるため、チームは時間を節約でき、その結果を信頼できる。利点: チーム自身が経路探索アルゴリズムを理解する必要がなく、ロボットの独自機能の開発に時間を割ける。
- 欠点: ルーチンがレストランの正確な要件(椅子の移動、片側通行通路など)に対応できない可能性がある。チームは変更できないため、その制約を回避する工夫をする必要がある。
- 各ポイントをこのチームおよびこのルーチンに結びつける。「時間を節約」よりも「経路探索アルゴリズムの作成とテストに要する時間を節約する」といった具体性のある記述の方が高い得点が得られる。
ロボットチームがライブラリのパスファインディングroutine を使用する際の欠点は何か?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
チームはライブラリコードを変更できないため、要件との不一致は回避策を講じるしかない。アルゴリズムを理解する必要がないことは利点であり、欠点ではない。
スティックライブラリ
- スティックライブラリは、プログラムがコンパイルおよびリンクされる際にエグゼキュータブルにコピーされる。
- その後、プログラムは単独で動作する:実行するために他のファイルは必要ない。
- コスト: 各プログラムに独自のコピーが含まれるためエグゼキュータブルが大きくなり、ライブラリの更新には使用该するすべてのプログラムを再ビルドする必要がある。
静的ライブラリと動的ライブラリの違いは、前者が:
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
静的ライブラリはエグゼクティブに組み込まれ、動的ライブラリは実行時にロードされ、プログラム間で共有される。
ダイナミックライブラリとDLLファイル
- ダイナミックライブラリは、Windows上のDynamic Link Library (DLL) またはLinux上の
.soファイルであり、別個のファイルとして残り、プログラムが呼び出すたびにメモリに読み込まれ、実行時に利用される。 - エグゼキュータブルが小さく、複数の実行中のプログラムがメモリ上で1つのコピーを共有できる。また、バグ修正や新デバイスのサポートのために DLL を一度だけ更新すれば、使用するプログラムを再コンパイルする必要がない。
- メモリはライブラリが必要としている間のみ消費される。コスト: DLL が存在しない場合や、誤ったバージョンの場合、プログラムは実行されない。

コンパイル時にコピーされる、あるいは実行時に読み込まれて共有される
動的ライブラリは多くのプログラムで共有され、一度更新すれば全てに適用される。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
実行時にロードされるため、一つの共有動的ライブラリが多くのプログラムにサービス提供し、更新すれば再ビルドせずに全てを修正できる。
各特性を静的または動的ライブラリに対応させよ。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
静的リンクはコードをエグゼクティブにコピーする(大きく、単独完結);動的リンクは実行時に共有ライブラリをロードする(小さく、一度更新で全て対応)。
DLL routine を使用するプログラムのイベントを順序立てて記せ。
難易度 3/5 · 200 コイン + 今日初回完了時に小ボーナス付与
読み込みは実行時に発生し、最初の呼び出しのときに行われ、一つのコピーで全プログラムをサービスする。
演習例:DLLファイルの利点
- ソフトウェア開発者が DLL ファイルを使用しています。その利点を説明してください。 [4]
- エグゼキュータブルファイルが小さい。ライブラリのコードがエグゼキュータブルにコピーされていないためである。
- メモリ内の DLL の1つのコピーを、使用するすべての実行中のプログラムが共有するため、メモリを節約できる。
- バグ修正や新デバイスへの対応のために DLL を更新しても、それを呼び出すプログラムを再コンパイルしたり再インストールしたりする必要がない。
- ライブラリは必要なときにのみ読み込まれるため、ルーチンが使用されている間のみメモリが消費される。
スティックかダイナミックかの選択
- プログラムを何もインストールできないマシン、組み込みデバイス、または単一のダウンロードファイル上で実行する場合:スティック。エグゼキュータブルが自己完結型であるためである。
- 1つのシステム内で多くのプログラムが同じルーチンを共有する場合、またはルーチンが頻繁に更新される場合:ダイナミック。1つの共有コピーは小さく、一度の更新で全てに対応できるためである。
- トレードオフで正当化される:自己完結型だが大きく、更新のために再ビルドが必要か、小さく共有可能だがファイルの存在に依存するか。
デバイス上で他のものをインストールできない環境で単一のファイルから実行しなければならないプログラムには、ダイナミック・ライブラリを使用すべきである。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
ダイナミック・ライブラリは別ファイルであり、存在している必要がある。スタティック・ライブラリはエグゼクティブにコピーされるため、これは自己完結型プログラムにちょうど必要なことである。
見落としやすいポイント
- DLLは実行時に読み込まれ、コンパイル時には読み込まれない。その一言がポイントである。
- 利点は開発者に対するもの:すでに作成・テスト済みであるため、専門知識が不要、保守が容易である。「プログラムが高速に動作する」はリストに含まれない。
- ライブラリはコードであり、ツールではない。IDE がツールであり、ライブラリはプログラムが呼び出す対象である。
- 欠点はライブラリの使用に伴う欠点でなければならない:変更できない、要件に合わない、依存関係。「金銭がかかる」は通常は要点ではない。
理解できましたか
- プログラムライブラリとは、プログラムが自身でコードを書く代わりに呼び出す、事前に作成・テスト済みのコード群である
- 利点:高速かつ低コストでの開発、信頼性の高いルーチン、当該分野の専門知識が不要、保守が容易、チームによる並列作業が可能;欠点:要件に合わない、変更できない、依存関係
- スティック: コンパイル時にエグゼキュータブルにコピーされ、自己完結型だが大きく、更新のために再ビルドが必要
- ダイナミック (DLL): 実行時に読み込まれる別個のファイル、小型、多くのプログラムで共有、一度の更新で全てに対応