アプリケーション開発の議論で言及されている「ブートストラップ」を繰り返し見ています。広く普及しているように見えますが、実際のところ、ブートストラップが実際に何であるかについての不十分な説明すらありません。むしろ、誰もがそれが何を意味するのかを知っているはずだと思われます。しかし、私はしません。私が理解できる限りでは、起動時にアプリケーションに必要な初期化タスクと関係がありますが、それは完全に間違っている可能性があります。誰かがこのアイデアを理解するのを手伝ってくれる?
アプリケーション開発の議論で言及されている「ブートストラップ」を繰り返し見ています。広く普及しているように見えますが、実際のところ、ブートストラップが実際に何であるかについての不十分な説明すらありません。むしろ、誰もがそれが何を意味するのかを知っているはずだと思われます。しかし、私はしません。私が理解できる限りでは、起動時にアプリケーションに必要な初期化タスクと関係がありますが、それは完全に間違っている可能性があります。誰かがこのアイデアを理解するのを手伝ってくれる?
回答:
「ブートストラップ」は、「自分のブートストラップで自分を引き上げる」という用語に由来します。あなたがウィキペディアから得ることができるその多く。
コンピューティングでは、ブートストラップローダーは、マシンの起動時に実行される最初のコードであり、オペレーティングシステムの残りの部分をロードします。最近のコンピューターではROMに格納されていますが、PDP-11のブートストラッププロセスを思い出します。このプロセスでは、フロントパネルのスイッチを介してビットを読み取り、特定のディスクセグメントをメモリにロードして実行します。言うまでもなく、ブートストラップローダーは通常かなり小さいです。
「ブートストラップ」は、それ自体、より正確には先行バージョンを使用してシステムを構築するための用語としても使用されます。たとえば、ANTLRバージョン3は、ANTLRバージョン2で開発されたパーサーを使用して記述されています。
ブートストラップの例は、一部のWebフレームワークにあります。index.php(ブートストラッパー)を呼び出すと、フレームワークヘルパー、モデル、構成が読み込まれ、コントローラーが読み込まれて制御が渡されます。
ご覧のとおり、これは大きなプロセスを開始する単純なファイルです。
ブートストラップに関するウィキペディアの記事を参照してください。
コンピューティングでの意味を説明するセクションとリンクがあります。この分野では4つの異なる用途があります。
ここにいくつかの引用がありますが、より詳細な説明と代替の意味については、上のリンクを参照してください。
「...単純なコンピュータープログラムがプログラムのより複雑なシステムをアクティブにする手法です。」
「ブートストラップという用語の別の使い方は、コンパイラを使用してそれ自体をコンパイルすることです。まず、新しいプログラミング言語のコンパイラの一部を既存の言語で記述して、新しい言語で記述された新しいコンパイラのプログラムをさらにコンパイルします。」
「ブートストラップ」という用語は通常、システムが起動に依存している状況に適用されます。これは、鶏と卵の問題のようなものです。
例えば:
その場合、ブートストラップは、通常、外部エンティティの助けを借りて、循環依存を解除する方法を指します。
等
アプリケーション開発のコンテキストでは、モジュール式のソフトウェアや自動更新可能なソフトウェアについて話すとき、通常「ブートストラップ」が登場します。
ユーザーは、必要のない機能を含むアプリ全体をダウンロードし、更新があるたびにアプリを再ダウンロードして手動で更新するのではなく、小さな「ブートストラップ」実行可能ファイルをダウンロードして開始するだけで、ダウンロードしてインストールします。ユーザーが必要とするアプリケーションの部分。さらに、ブートストラップコンポーネントは、更新を検索し、起動するたびにインストールすることができます。
アレックス、それは起動時にコンピュータが行うこととほとんど同じです。(コンピューターの「起動」は、実際にはブートストラップという言葉に由来します)
最初に、BIOSの小さなプログラムが実行されます。これには、より大きく複雑なプログラムをロードして実行するのに十分なマシンコードが含まれています。
その2番目のプログラムは、おそらくNTLDR(Windowsの場合)またはLILO(Linuxの場合)のようなものであり、実行され、残りのオペレーティングシステムをロードして実行できます。
完全を期すために、サンプルから母集団の特性を推測するためにリサンプリング/シミュレーションを使用する統計学では、これはかなり重要な(そして比較的新しい)メソッドでもあります。ブートストラップ(統計)に関する独自の長いWikipediaの記事があります。
辞書の意味のブートストラップとは、最小限のリソースで起動することです。OSのコンテキストでは、パワーオンセルフテスト(POST)が安全にCPUを起動できると判断すると、OSは迅速にロードできるはずです。ブートストラップコードはBIOSから実行されます。BIOSは小さなサイズのROMです。一般に、オペレーティングシステムをRAMにロードする一連の命令へのジャンプ命令です。ジャンプの宛先は、ハードディスクのブートセクターです。BIOSプログラムがチェックすると、それは、保存されているOSの開始アドレス、つまり有効なMBR(マスターブートレコード)かどうかを含む有効なブートセクターです。有効なMBRの場合、OSはそこからメモリ(RAM)にコピーされ、OSがメモリとプロセスの管理を行います。
私見最初のコンパイラはどのように書かれたのかについての説明よりも優れた説明はありません。
最近のオペレーティングシステムの読み込みは、ブートストラップと呼ばれる最も一般的なプロセスです。
ブートストラップは、ソフトウェア開発での使用(ここでのほとんどの回答、たとえばkdgregoryによる)と、Dirk Eddelbuettelで説明されている統計での使用に加えて、開発者にとって知っておくと役立つ強化学習のコンテキストでさらに別の意味があります。。
サットンとバルトから:
Widrow、Gupta、およびMaitra(1973)は、WidrowおよびHoff(1960)の最小二乗(LMS)アルゴリズムを変更して、トレーニング例からではなく、成功と失敗の信号から学習できる強化学習ルールを作成しました。彼らはこの形式の学習を「選択的ブートストラップ適応」と呼び、「教師と一緒に学ぶ」のではなく「批評家と一緒に学ぶ」と説明しました。彼らはこのルールを分析し、ブラックジャックをプレイする方法を学ぶ方法を示しました。これは、教師付き学習への貢献がはるかに大きな影響を与えたウィドロウによる強化学習への孤立した進出でした。
この本は、ターゲット値がブートストラップ法としての以前の近似に基づいているさまざまな強化アルゴリズムについて説明しています。
最後に、DP [動的プログラミング]メソッドの最後の特別なプロパティに注意してください。それらのすべては、後継者の状態の値の推定に基づいて状態の値の推定を更新します。つまり、他の見積もりに基づいて見積もりを更新します。これを一般的な考え方と呼びますブートストラップ。多くの強化学習手法は、ブートストラップを実行します。DPが要求するように、環境の完全かつ正確なモデルを必要としないものでも、ブートストラップを実行します。
これは、ブートストラップに関するウィキペディアのページで言及されている、ブートストラップの集約とインテリジェンスの爆発とは異なります。
人気のあるTwitterブートストラップの使用に関しては、このタイプのブートストラップは、モジュールコンポーネントが必要になるか参照するまで、Webアプリケーションがモジュールコンポーネントの存在を確認する必要なく、モジュールコンポーネントをWebアプリケーションに統合するアクションだと思います。 。
開発者は、CSS Twitter BootstrapテーマのデフォルトのコピーをWebアプリケーションにロード(参照)するだけでシームレスに統合できます。ヴォオラ!次に、これらの変更の一部をオーバーライドする必要がある場合がありますが、リソース/コンポーネントが変更されず、完全に再利用できるように変更できます。
これと同じ概念は、Web DevsがjQuery APIなどを実装する方法ですが、実際にはそれ自体がブートストラップとしてDevsによって表現されていません。アプリのさまざまなコンポーネント/リソースを分離して、同じサーバーまたはCDNに自由に常駐できるようにすると同時に、柔軟性と再利用性を向上させます。
注:MBRおよびUNIXでのブートストラップ処理の計算では、OSをRAMにロードするROM内の小さなプログラムである特別なブートローダーまたはマネージャーが必要です。考えてみれば、ブートストラップローダーがMBRをチェックし、このテーブルに基づいてOSをロードするアクションでも同じ概念が発生します。
私はスイッチをめくってブートプログラムに入る世代に属しています。1980年代初頭に、Electronics Corporation of India Ltd(ECIL)が開発したMicro-78と呼ばれるマイクロコンピューターに取り組みました。それはAltair 8800の一種のクローンでした。トグルスイッチを使用して小さなブートプログラムを入力し、ボタンを押して実行するとどうなるかをはっきりと覚えています。プログラムは、フロッピーディスクの最初のトラックに含まれる2番目のブートプログラムを読み取り、2番目のブートプログラムがディスクオペレーティングシステムをロードするために実行を開始するように、自身に上書きします。「ブートストラップ」という用語は、最初のブートプログラムが2番目のブートプログラムを読み取り、2番目のブートプログラムの追加機能で「自分自身を引き上げる」方法で上書きするこのプロセスを指していると思います。
プログラミングの世界の謙虚な初心者であり、この単語がさまざまな場所で明らかに少し異なる方法で多く使用されているのを見た後、ここですべての答えをめくるので、ブートストラップに関するウィキペディアのページを読んだことがわかりました最初はどちらか)違いを理解するのに非常に有益ですこの単語の使用法のです。それは……非常にまれな機会に…………ウィキペディアは特定の用語について……(編集済み)よりも良い説明があるかもしれませんか?彼らはウィキペディアに担当者ポイントを持ち込みますか?
私には、すべての意味が何か関係しているようです:可能な限りシンプルな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はそれ自体を(おそらく数回)ベビーストラップから成人まで「ブートストラップ」します。 。