web-dev-qa-db-ja.com

ブートストラップとは何ですか?

私は、アプリケーション開発の議論で言及されている「ブートストラップ」を見続けています。それは広範囲かつ重要であるように思われます、しかし私はまだブートストラップが実際には何であるかについての貧弱な説明さえ出くわすことに出くわすことができません。そうではなくて、まるで誰もがそれが何を意味するのかを知っているはずのようです。私は違います。私が理解できる限りでは、起動時にアプリケーションに必要な初期化タスクと関係がありますが、それについてはまったく間違っている可能性があります。誰もが私がこの考えを理解するのを手伝ってくれる?

580
Alex Basson

「ブートストラップ」は、「自分のブートストラップで自分自身を引き上げる」という用語から来ています。 Wikipedia からあなたが得ることができるその分だけ。

コンピューティングでは、ブートストラップローダーはマシンの起動時に実行される最初のコードで、残りのオペレーティングシステムのロードを担当します。最近のコンピュータではROMに格納されていますが、PDP-11のブートストラッププロセスを思い出してください。フロントパネルのスイッチで特定のディスクセグメントをメモリにロードしてから実行します。言うまでもなく、ブートストラップローダーは通常かなり小さいです。

「ブートストラップ」は、それ自体を使用してシステムを構築するための用語としても使用されます。もっと正確に言えば、前バージョンです。例えば、 _ antlr _ バージョン3は、ANTLRバージョン2で開発されたパーサーを使用して書かれています。

286
kdgregory

ブートストラップの例は、いくつかのWebフレームワークにあります。あなたはindex.php(ブートストラップ)を呼び出し、そしてそれはフレームワークヘルパー、モデル、設定をロードしそしてそれからコントローラをロードしそしてそれに制御を渡す.

ご覧のとおり、大規模なプロセスを開始する単純なファイルです。

223
ryeguy

bootstrapping に関するウィキペディアの記事を参照してください。

Computing にそれが何を意味するのかを説明するセクションとリンクがあります。それは分野で4つの異なる用途があります。

ここにいくつかの引用があります、しかしより詳細な説明と代替の意味のために、上のリンクを調べてください。

「...これは、単純なコンピュータプログラムがより複雑なプログラムシステムを起動するための手法です。」

「ブートストラップという用語の別の使い方は、最初に新しいプログラミング言語のコンパイラのごく一部を既存の言語で書いて新しい言語で書かれた新しいコンパイラのより多くのプログラムをコンパイルすることによって、コンパイラを使って自分自身をコンパイルすることです。」

51
HeDinges

「ブートストラッピング」という用語は、通常、システムの起動がそれ自体に依存しているような状況、つまりチキンと卵の問題に当てはまります。

例えば:

  • Cで書かれたCコンパイラをどうやってコンパイルしますか?
  • OSをまだ実行していない場合、どうやってOSの初期化プロセスを開始しますか?
  • システム内の新しいピアについて調べるために、クライアントが現在知られているピアに依存している分散(ピアツーピア)システムをどのように開始しますか?

その場合、ブートストラッピングは、通常は外部エンティティの助けを借りて循環依存関係を破る方法を指す。

  • 他のCコンパイラを使って自分のコンパイラをコンパイル(ブートストラップ)し、それから自分自身のコンパイラを再コンパイルすることができます。
  • OSが提供する機能に依存せずに、初期プロセスを設定する別のコードを使用します。
  • 初期のピアのハードコードされたリスト、またはピアリストを提供するハードコードされたトラッカーURLを使用します

等.

28
Ivan Poliakov

アプリケーション開発の文脈では、「ブートストラップ」は通常、モジュール式ソフトウェアや自動更新可能ソフトウェアについて話すときに起こります。

不要な機能を含むアプリ全体をユーザーがダウンロードし、更新があるたびにそれを再ダウンロードして手動で更新するのではなく、ユーザーは小さな「ブートストラップ」実行可能ファイルをダウンロードして起動するだけです。ユーザーが必要とするアプリケーションの部分。さらに、ブートストラップコンポーネントはアップデートを探し、起動されるたびにそれらをインストールすることができます。

22

完全性のために、それはサンプルから母集団特性を推論するためにリサンプリング/シミュレーションを使用する統計学においてかなり重要な(そして比較的新しい)方法でもあります。それは独自の長い ブートストラップに関するウィキペディアの記事(統計) を持っています。

14

アレックス、コンピュータ起動時の動作はほとんどです。 (コンピュータの「起動」は、実際にはWordのブートストラップからきています)

最初に、あなたのBIOSの小さなプログラムが走ります。これには、より大きく、より複雑なプログラムをロードして実行するのに十分なマシンコードが含まれています。

その2番目のプログラムは、おそらくNTLDR(Windowsの場合)またはLILO(Linuxの場合)のようなもので、残りのオペレーティングシステムを実行して読み込み、実行することができます。

14
davewasthere

ブートストラップという意味は、最小限のリソースで起動することです。 OSのコンテキストでは、パワーオンセルフテスト(POST)で安全にCPUをウェイクアップさせることができるとOSが判断した後は、OSが迅速にロードできるはずです。ブートストラップコードはBIOSから実行されます。 BIOSは小型のROMです。一般的には、オペレーティングシステムをRAMにロードする命令セットへのジャンプ命令です。ジャンプ先はハードディスクのブートセクタです。 BIOSプログラムがチェックすると、保存されたOSの開始アドレスを含む有効なブートセクタ、つまり有効なMBR(マスターブートレコード)かどうかが確認されます。それが有効なMBRである場合、OSはそこからそこからメモリ(RAM)にコピーされ、メモリおよびプロセス管理の面倒を見る。

4
achoora

私見 についての事実より良い説明はありません/ /最初のコンパイラはどのように書かれましたか?

最近のオペレーティングシステムのロードは、ブートストラップと呼ばれる最も一般的なプロセスです。

2
Ivanzinho

人気のあるTwitter Bootstrapの使用に関しては、このタイプのブートストラップは、Webアプリケーションがそれを必要とするまで、またはそれを参照するまで存在することを認識する必要もなく、Webアプリケーションに統合するアクションだと私は思います。 。

開発者はCSS Twitter BootstrapテーマのデフォルトコピーをWebアプリケーションにロード(参照)するだけでシームレスに統合できます。ヴォーラ!その場合、これらの変更のいくつかをオーバーライドする必要があるかもしれませんが、リソース/コンポーネントが変更されずに完全に再利用できるように変更することができます。

これと同じ概念がWeb開発者がjQuery APIなどを実装する方法ですが、開発者自身がブートストラップとして表現することは実際にはありません。それは、アプリケーションのさまざまなコンポーネント/リソースの分離を同じサーバーまたはCDN上に自由に配置できるようにしながら、柔軟性と再利用性を向上させることです。

注:ブートストラップ処理の計算ではMBRを扱い、UNIXではROM内の小さなプログラムで、OSをRAMにロードする特別なブートローダまたはマネージャが必要です。あなたがそれについて考えるならば、同じ概念がブートストラップローダーがMBRをチェックしてこのテーブルに基づいてOSをロードするという動作で起こります。OSはこれが起こるという考えを持っていなくても起こります。

1
yardpenalty

ブートストラップは、強化学習のコンテキストでさらに別の意味を持ち、ソフトウェア開発での使用に加えて、開発者にとって知っておくと役立つ場合があります(ほとんどの回答はこちら、たとえば kdgregory )および Dirk Eddelbuettel で説明した統計での使用。

サットンとバルト から:

Widrow、Gupta、およびMaitra(1973)は、Widrow and Hoff(1960)の最小平均二乗(LMS)アルゴリズムを修正して、トレーニング例からではなく成功および失敗信号から学習できる強化学習ルールを作成しました。彼らはこの形式の学習を「選択的bootstrap adaptation」と呼び、「で学ぶ」の代わりに「評論家で学ぶ」と説明した彼らはこのルールを分析し、ブラックジャックのプレイ方法を示しました。これはウィドローによる強化学習への孤立した進路であり、ウィドローの教師付き学習への貢献ははるかに影響力がありました。

この本は、ターゲット値がbootstrapメソッドとしての以前の近似に基づいているさまざまな強化アルゴリズムについて説明しています。

最後に、DP [動的プログラミング]メソッドの最後の特別なプロパティに注意してください。それらはすべて、後続状態の値の推定値に基づいて状態値の推定値を更新します。つまり、他の推定値に基づいて推定値を更新します。この一般的なアイデアをbootstrappingと呼びます。 DPが必要とするように、環境の完全かつ正確なモデルを必要としないものでも、多くの強化学習方法がブートストラップを実行します。

これは、ブートストラップの wikipediaページ で説明されているbootstrap集約およびインテリジェンス爆発とは異なることに注意してください。

1
Scipio

私はブートプログラムに入るためにスイッチを弾いた世代に属します。私は1980年代初頭に、Electronics Corporation of India Ltd(ECIL)によって開発されたMicro-78と呼ばれるマイクロコンピュータに取り組みました。これはAltair 8800の一種のクローンでした。小さなブートプログラムがトグルスイッチを使って入力され、ボタンを押すことによって実行されたときに何が起こるかはっきり覚えています。プログラムはフロッピーディスクの第1トラックに含まれる第2ブートプログラムを読み取り、それを上書きして第2ブートプログラムがディスクオペレーティングシステムをロードするために実行を開始するようにする。 「ブートストラップ」という用語は、最初のブートプログラムが2番目のブートプログラムを追加して2番目のブートプログラムの機能を追加して「上書き」するというプロセスを指すと思います。それが「ブートストラッププログラム」の本来の意味の起源かもしれません。

0
Murthy KVM