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


636

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


8
ウィキペディアによると、コンピューティングに関して「ブートストラップ」という言葉には4つの用途があります-en.wikipedia.org/wiki/Bootstrapping#Computing
Thomas Owens

1
HeDingesの投稿をこれで更新しました。私はアレックスがどのような形のブートストラップを見ていたのかについての明確化を探していました。
トーマスオーウェンス

ソフトウェア開発では、より複雑で高速なプログラミング環境が次々と開発されることを指します。
ラッキー

.NETソフトウェア開発では、登録またはロードする必要のあるサービスなど、アプリケーションが実行される環境のセットアップを指すと理解しています。
Neo

回答:


318

「ブートストラップ」は、「自分のブートストラップで自分を引き上げる」という用語に由来します。あなたがウィキペディアから得ることができるその多く。

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

「ブートストラップ」は、それ自体、より正確には先行バージョンを使用してシステムを構築するための用語としても使用されます。たとえば、ANTLRバージョン3は、ANTLRバージョン2で開発されたパーサーを使用して記述されています。


8
うわー、私はPDPのフロントパネルスイッチについてほとんど忘れていました。思い出をありがとう!!
ジェフホーンビー、

7
私が間違っていたら訂正してください。この回答は、ブートストラップとは何かについての技術的な詳細を説明していますが、質問のコンテキスト内で元の質問に回答することはありませんでした。
jayscript 2016年

5
@jayscript-この質問にどのように答えますか?それは慣用表現であり、慣用句は通常、それらを使用する社会的グループによってよく理解されており、その外では理解できません。私は例で答えようとしましたが、これはイディオムを翻訳しようとする数少ない方法の1つだと思います。

3
@kdgregory答えを探すためにここに来たので、この質問に答えることはできません。ブートストラップという言葉自体が、緩やかに関連しているいくつかの異なる技術的概念の比喩であり、混乱の原因となっているのではないかと思います。
jayscript 2016年

2
PDP 11 ?! ここに老人がいることに気づかなかった。:P
ジョンレッド

255

ブートストラップの例は、一部のWebフレームワークにあります。index.php(ブートストラッパー)を呼び出すと、フレームワークヘルパー、モデル、構成が読み込まれ、コントローラーが読み込まれて制御が渡されます。

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


50
Web開発(元の質問のコンテキストでした)に関しては、これが最良の答えだと思います。
cartbeforehorse

かなりLaravelに関連するようだが、Laravelは2009年ではありませんがまだあった
LppEdd

@Wajdan Aliいいえ、これは受け入れられる答えではありません。これは、ブートストラップという用語の新しい使用の微視的見解であり、実際にはずっと以前の用語の誤用であると主張する人もいます。「ブートストラップする」とは、ブートストラップによって自分を引き上げる、つまり、何かの力を利用して自身を活用することを指します。「コンピュータを起動する」という言葉の起源です。Web開発における現在のpopの使用法は、単語の唯一の(または元の)使用法ではありません。他の多くの回答がこれに適切に対処しています。
カラステ2018

3
@Kallaste、結構ですが、これは私が探していた答えであり、元の質問(「アプリケーション開発」)のコンテキストに基づいて、すでに指摘したように、それが最も適切な答えのようです。
1

@ aaron.bynum、いいえ、与えられた答えはウェブ開発フレームワークに適用され、間違いなくアプリケーション開発には適用されません。答えは誤解を招くものであり、欠陥があります。なぜなら、それは実際にブートストラップが何であるか、そしてそれがどこから来たのかについてのよくある誤解に依存しているからです。それは誤った情報を広めているだけです。それがあなたがここに探してここに来たのであれば結構ですが、SOは全体として正しい情報を評価します。したがって、私のコメント。
カラステ

51

ブートストラップに関するウィキペディアの記事を参照してください。

コンピューティングでの意味を説明するセクションとリンクがあります。この分野では4つの異なる用途があります。

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

「...単純なコンピュータープログラムがプログラムのより複雑なシステムをアクティブにする手法です。」

「ブートストラップという用語の別の使い方は、コンパイラを使用してそれ自体をコンパイルすることです。まず、新しいプログラミング言語のコンパイラの一部を既存の言語で記述して、新しい言語で記述された新しいコンパイラのプログラムをさらにコンパイルします。」


6
読者が回答を得るために複数のWebサイトをたどる必要がないように、引用または言い換えてください。
カートW.ロイヒト2009

5
「ソフトウェア業界:規格外の商品を合法的に販売し、そのアップグレードに課金するというユニークなビジネス。」
SteinÅsmul2014年

私はコンパイラでのブートストラップの答えを探していました。これは役に立ちました。
シラジアラム2017

49

「ブートストラップ」という用語は通常、システムが起動に依存している状況に適用されます。これは、鶏と卵の問題のようなものです。

例えば:

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

その場合、ブートストラップは、通常、外部エンティティの助けを借りて、循環依存を解除する方法を指します。

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


4
これは本当に問題の核心です。他の2つの答えは完全に見逃してしまいます。
アルトゥーロエルナンデス

1
この説明がソフトウェア開発全般に最も関連しているように感じます。コンセプトを本当に持ち帰ってくれました
ヴァンスパラシオ2018

24

アプリケーション開発のコンテキストでは、モジュール式のソフトウェアや自動更新可能なソフトウェアについて話すとき、通常「ブートストラップ」が登場します。

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


4
その特定のコンテキストで使用される「ブートストラップ」という用語を聞いたことがありません。
ボンベ

PHP

15

アレックス、それは起動時にコンピュータが行うこととほとんど同じです。(コンピューターの「起動」は、実際にはブートストラップという言葉に由来します)

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

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


2
私はすべての回答を読みました(用語はよく拡張され、いくつか投票しました)が、この単純な「ブート」または「ブートストラップ」の比較は、ドットを接続するために他のすべてを読む最高の動機を与えてくれました。Srslyは、5歳の子供に複雑なトピックを説明するようなものでした。ありがとう。
Chris22、18年

14

完全を期すために、サンプルから母集団の特性を推測するためにリサンプリング/シミュレーションを使用する統計学では、これはかなり重要な(そして比較的新しい)メソッドでもあります。ブートストラップ(統計)に関する独自の長いWikipediaの記事があります。


1
比較的新しい?それは少なくとも15年前に私の統計教育の一部でした。
トゥーンクライテ2009

6
それが私が「相対的に」言った理由です。エフロンの最初の記事は、1960年代の堅牢性に関する文献の始まりとは対照的に、1980年代初頭のものです。
Dirk Eddelbuettel、2009

4

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



2

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

サットンとバルトから:

Widrow、Gupta、およびMaitra(1973)は、WidrowおよびHoff(1960)の最小二乗(LMS)アルゴリズムを変更して、トレーニング例からではなく、成功と失敗の信号から学習できる強化学習ルールを作成しました。彼らはこの形式の学習を「選択的ブートストラップ適応」と呼び、「教師と一緒に学ぶ」のではなく「批評家と一緒に学ぶ」と説明しました。彼らはこのルールを分析し、ブラックジャックをプレイする方法を学ぶ方法を示しました。これは、教師付き学習への貢献がはるかに大きな影響を与えたウィドロウによる強化学習への孤立した進出でした。

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

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

これは、ブートストラップに関するウィキペディアのページで言及されている、ブートストラップの集約とインテリジェンスの爆発とは異なります


1

人気のあるTwitterブートストラップの使用に関しては、このタイプのブートストラップは、モジュールコンポーネントが必要になるか参照するまで、Webアプリケーションがモジュールコンポーネントの存在を確認する必要なく、モジュールコンポーネントをWebアプリケーションに統合するアクションだと思います。 。

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

これと同じ概念は、Web DevsがjQuery APIなどを実装する方法ですが、実際にはそれ自体がブートストラップとしてDevsによって表現されていません。アプリのさまざまなコンポーネント/リソースを分離して、同じサーバーまたはCDNに自由に常駐できるようにすると同時に、柔軟性と再利用性を向上させます。

注:MBRおよびUNIXでのブートストラップ処理の計算では、OSをRAMにロードするROM内の小さなプログラムである特別なブートローダーまたはマネージャーが必要です。考えてみれば、ブートストラップローダーがMBRをチェックし、このテーブルに基づいてOSをロードするアクションでも同じ概念が発生します。


0

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


-3

プログラミングの世界の謙虚な初心者であり、この単語がさまざまな場所で明らかに少し異なる方法で多く使用されているのを見た後、ここですべての答えをめくるので、ブートストラップに関するウィキペディアのページを読んだことがわかりました最初はどちらか)違いを理解するのに非常に有益ですこの単語の使用法のです。それは……非常にまれな機会に…………ウィキペディアは特定の用語について……(編集済み)よりも良い説明があるかもしれませんか?彼らはウィキペディアに担当者ポイントを持ち込みますか?

私には、すべての意味が何か関係しているようです:可能な限りシンプルなThing1から始めて、そのThing2で少し複雑なものにし、Thing2を使用して、ある種のタスクをより効率的かつ迅速に実行できるようになりましたもともとはThing1。次に、Thing2からThing 3まで無限に繰り返します...

私はそれを生物学的進化と「抽象化の層」(私のような初心者、エヘム、ウィキペディア、咳)の両方に密接に関連していると考えています-スイッチ、マシンコード、アセンブリ、C、Python、AIを備えた1940年代のコンピューターからの進化「%4 ^%の夕食をデフォルトの&^ $%要件にして、床を掃除します%$£」@:〜のような複雑な指示は、例外を発生させることなく、酔ったスラング英語またはAmazon部族の方言で'(初心者のために...あなたはそれを推測した)-単純な無知のためにそこにたくさんのリンクを逃した。

次に、特定の特定のソフトウェアの意味では:意味1:Thing1は、Thing2の最新バージョンをロードするために使用されます(もちろん、Thing2はThing1よりも大きいため、Thing3はThing2よりも大きいためです)。

意味2:Thing1は、Thing2の上位言語を少し書くために使用される下位レベルの言語(print( "Hello、"、user.name)よりも1001011100 .... 011001に近い)であり、Thing2のこの小さなビットはThing2自体を赤ん坊の語彙レベルから成人の語彙レベルに拡張するために使用されます(Thing2は、それ自体の赤ん坊バージョン(それは賢い赤ん坊です!)によって処理または開始され、正しい専門用語「コンパイル済み」を使用します。もちろん、それ自体はThing1によってのみコンパイルできますが、存在する前に存在することはできないため、Thing2の子バージョンは、Surly TeenagerバージョンのThing2をコンパイルします。ソフトウェア用語とメタファー用語!)は、長期的に受け入れられるように解決するのに十分な時間を費やす価値があります。またはそれらを放棄する(ここで類推する場所がわからない)。

「はい」の場合、Thing2はそれ自体を(おそらく数回)ベビーストラップから成人まで「ブートストラップ」します。 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.