Was ist Bootstrapping?

636

Ich sehe immer wieder "Bootstrapping", das in Diskussionen über die Anwendungsentwicklung erwähnt wird. Es scheint sowohl weit verbreitet als auch wichtig zu sein, aber ich habe noch keine schlechte Erklärung dafür gefunden, was Bootstrapping eigentlich ist. Vielmehr scheint es, als ob jeder nur wissen soll, was es bedeutet. Ich aber nicht. Soweit ich das beurteilen kann, hat dies etwas mit Initialisierungsaufgaben zu tun, die für eine Anwendung beim Start erforderlich sind, aber ich könnte völlig falsch liegen. Kann mir jemand helfen, diese Idee zu verstehen?

Alex Basson
quelle
8
Laut Wikipedia gibt es vier Verwendungen des Wortes "Bootstrapping" in Bezug auf Computer - en.wikipedia.org/wiki/Bootstrapping#Computing
Thomas Owens
1
Ich habe gerade den HeDinges-Beitrag damit aktualisiert. Ich suchte nach einer Klärung darüber, welche Form von Bootstrapping Alex betrachtete.
Thomas Owens
In der Softwareentwicklung bezieht es sich auf die Entwicklung von immer komplexeren und schnelleren Programmierumgebungen.
Glücklicher
Nach meinem Verständnis bezieht sich dies in der .NET-Softwareentwicklung auf die Einrichtung der Umgebung, in der die Anwendung ausgeführt wird, z. B. auf Dienste, die registriert oder geladen werden müssen.
Neo

Antworten:

318

"Bootstrapping" kommt vom Begriff "Ziehen Sie sich an Ihren eigenen Bootstraps hoch". So viel kann man von Wikipedia bekommen .

Beim Rechnen ist ein Bootstrap-Loader der erste Code, der beim Starten eines Computers ausgeführt wird und für das Laden des restlichen Betriebssystems verantwortlich ist. In modernen Computern ist es im ROM gespeichert, aber ich erinnere mich an den Bootstrap-Prozess auf dem PDP-11, bei dem Sie Bits über die Schalter auf der Vorderseite steckten, um ein bestimmtes Festplattensegment in den Speicher zu laden und dann auszuführen. Natürlich ist der Bootstrap-Loader normalerweise ziemlich klein.

"Bootstrapping" wird auch als Begriff für das Erstellen eines Systems verwendet, das sich selbst verwendet - oder genauer gesagt, eine Vorgängerversion. Beispielsweise wird ANTLR Version 3 mit einem in ANTLR Version 2 entwickelten Parser geschrieben.


quelle
8
Wow, ich hatte die Schalter an der Vorderseite der PDPs fast vergessen. Danke für die Erinnerungen!!
Jeff Hornby
7
Korrigieren Sie mich, wenn ich falsch liege. Obwohl diese Antwort technische Details darüber erklärt, was Bootstrapping sein kann, hat sie die ursprüngliche Frage im Kontext der Frage nie beantwortet.
Jayscript
5
@jayscript - Wie würden Sie diese Frage beantworten? Es ist ein idiomatischer Ausdruck, und Redewendungen werden in der Regel von der sozialen Gruppe, die sie verwendet, gut verstanden und sind außerhalb davon unverständlich. Ich habe versucht, mit gutem Beispiel zu antworten, was meiner Meinung nach eine der wenigen Möglichkeiten ist, Redewendungen zu übersetzen.
3
@kdgregory Ich könnte diese Frage nicht beantworten, da ich hierher gekommen bin, um nach Antworten zu suchen. Ich spekuliere, dass das Wort Bootstrapping selbst eine Metapher für verschiedene technische Konzepte ist, die lose miteinander verbunden sind, was zu Verwirrung führen kann.
Jayscript
2
PDP 11?! Ich hatte nicht bemerkt, dass wir hier alte Leute hatten. : P
John Red
255

Ein Beispiel für Bootstrapping finden Sie in einigen Webframeworks. Sie rufen index.php (den Bootstrapper) auf, laden dann die Framework-Helfer, Modelle und Konfigurationen, laden den Controller und geben die Steuerung an ihn weiter.

Wie Sie sehen können, ist es eine einfache Datei, die einen großen Prozess startet.

Ryeguy
quelle
50
In Bezug auf die Webentwicklung (die der Kontext der ursprünglichen Frage war) denke ich, dass dies die beste Antwort ist.
Cartbeforehorse
Scheint ziemlich verwandt mit Laravel zu sein, aber Laravel war 2009 immer noch nicht da.
LppEdd
@ Wajdan Ali Nein, dies sollte nicht die akzeptierte Antwort sein. Dies ist eine mikroskopische Ansicht einer neuen Verwendung des Begriffs Bootstrapping, von der einige behaupten würden, dass sie tatsächlich einen Missbrauch eines viel früheren Begriffs darstellt. "Bootstrap" bezieht sich darauf, sich an den Bootstraps hochzuziehen, dh die Kraft von etwas zu nutzen, um sich selbst zu nutzen. Es ist der Ursprung des Begriffs "um Ihren Computer zu starten". Die aktuelle Pop-Verwendung in der Webentwicklung ist nicht die einzige (oder die ursprüngliche) Verwendung des Wortes. Viele andere Antworten sprechen dies angemessen an.
Kallaste
3
@Kallaste, gut, aber das ist die Antwort, nach der ich gesucht habe, und basierend auf dem Kontext der ursprünglichen Frage ("Anwendungsentwicklung") scheint es die am besten geeignete Antwort zu sein, wie bereits erwähnt.
bis zum
@ aaron.bynum, nein, die Antwort gilt für Webentwicklungs-Frameworks und definitiv nicht für die Anwendungsentwicklung. Die Antwort ist irreführend und fehlerhaft, da sie auf einem weit verbreiteten Missverständnis darüber beruht, was Bootstrapping tatsächlich ist und woher es stammt. Es verbreitet nur Fehlinformationen. Wenn es das ist, wonach Sie hierher gekommen sind, dann ist das in Ordnung, aber SO als Ganzes gibt es korrekte Informationen. Also mein Kommentar.
Kallaste
51

Siehe den Wikipedia-Artikel zum Bootstrapping .

Es gibt einen Abschnitt und Links, die erklären, was es in Computing bedeutet . Es hat vier verschiedene Anwendungen auf dem Gebiet.

Hier sind einige Zitate, aber für eine ausführlichere Erklärung und alternative Bedeutungen konsultieren Sie die obigen Links.

"... ist eine Technik, mit der ein einfaches Computerprogramm ein komplizierteres Programmsystem aktiviert."

"Eine andere Verwendung des Begriffs Bootstrapping besteht darin, einen Compiler zu verwenden, um sich selbst zu kompilieren, indem zuerst ein kleiner Teil eines Compilers einer neuen Programmiersprache in eine vorhandene Sprache geschrieben wird, um mehr Programme des neuen Compilers zu kompilieren, die in der neuen Sprache geschrieben sind."

HeDinges
quelle
6
Könnten Sie bitte zitieren oder umschreiben, damit die Leser nicht mehrere Websites durchlaufen müssen, um ihre Antwort zu erhalten?
Kurt W. Leucht
5
"Software Industry, das: einzigartige Geschäft, bei dem minderwertige Waren legal verkauft und deren Upgrades in Rechnung gestellt werden."
Stein Åsmul
Ich suchte nach einer Antwort Bootstrapping in Compiler . Das war hilfreich.
Siraj Alam
48

Der Begriff "Bootstrapping" bezieht sich normalerweise auf eine Situation, in der ein System zum Starten von sich selbst abhängt, eine Art Henne-Ei-Problem.

Zum Beispiel:

  • Wie kompiliert man einen in C geschriebenen C-Compiler?
  • Wie starte ich einen Betriebssysteminitialisierungsprozess, wenn das Betriebssystem noch nicht ausgeführt wird?
  • Wie starten Sie ein verteiltes (Peer-to-Peer-) System, bei dem die Clients von ihren derzeit bekannten Peers abhängig sind, um sich über neue Peers im System zu informieren?

In diesem Fall bezieht sich Bootstrapping auf eine Möglichkeit, die zirkuläre Abhängigkeit zu brechen, normalerweise mit Hilfe einer externen Entität, z

  • Sie können einen anderen C-Compiler verwenden, um Ihren eigenen Compiler zu kompilieren (Bootstrap), und ihn dann verwenden, um sich selbst neu zu kompilieren
  • Sie verwenden einen separaten Code, der den anfänglichen Prozess einrichtet, ohne von den vom Betriebssystem bereitgestellten Funktionen abhängig zu sein
  • Sie verwenden eine fest codierte Liste der ersten Peers oder eine fest codierte Tracker-URL, die die Peer-Liste bereitstellt

usw.

Ivan Poliakov
quelle
4
Dies ist wirklich der Kern der Frage. Wo die anderen beiden Antworten, verpassen Sie es komplett.
Arturo Hernandez
1
Ich bin der Meinung, dass diese Erklärung für die Softwareentwicklung im Allgemeinen am relevantesten war. Wirklich brachte das Konzept für mich nach Hause
Vance Palacio
23

Im Zusammenhang mit der Anwendungsentwicklung tritt normalerweise "Bootstrapping" auf, wenn es sich um modulare und / oder automatisch aktualisierbare Software handelt.

Anstatt dass der Benutzer die gesamte App einschließlich der nicht benötigten Funktionen herunterlädt und sie bei jedem Update erneut herunterlädt und manuell aktualisiert, lädt der Benutzer nur eine kleine ausführbare "Bootstrap" -Datei herunter und startet sie, die diese wiederum herunterlädt und installiert Teile der Anwendung, die der Benutzer benötigt. Darüber hinaus kann die Bootstrap-Komponente bei jedem Start nach Updates suchen und diese installieren.

Michael Borgwardt
quelle
4
Ich habe den in diesem speziellen Kontext verwendeten Begriff „Bootstrapping“ nie gehört.
Bombe
Wird häufig in Bezug auf PHP-Anwendungen verwendet (z. B. mit Composer, um dies zu erreichen)
AturSams,
15

Alex, es ist so ziemlich das, was dein Computer macht, wenn er hochfährt. ('Booten' eines Computers kommt eigentlich vom Wort Bootstrapping)

Zunächst wird das kleine Programm in Ihrem BIOS ausgeführt. Das enthält genug Maschinencode, um ein größeres, komplexeres Programm zu laden und auszuführen.

Dieses zweite Programm ist wahrscheinlich so etwas wie NTLDR (unter Windows) oder LILO (unter Linux), das dann den Rest des Betriebssystems ausführt und laden und dann ausführen kann.

Davewasthere
quelle
2
Obwohl ich alle Antworten gelesen habe (was den Begriff gut erweitert und einige abgestimmt hat), gab mir dieser einfache "Boot" -Vergleich, auch bekannt als "Bootstrapping" -Vergleich, die beste Motivation, alle anderen zu lesen, um die Punkte zu verbinden. Srsly, es war, als würde man einem 5-Jährigen ein komplexes Thema erklären, und sie bekommen es. Vielen Dank.
Chris22
14

Der Vollständigkeit halber ist es auch eine ziemlich wichtige (und relativ neue) Methode in der Statistik, die Resampling / Simulation verwendet, um Populationseigenschaften aus einer Stichprobe abzuleiten. Es gibt einen eigenen langen Wikipedia-Artikel zum Thema Bootstrapping (Statistik) .

Dirk Eddelbuettel
quelle
1
Relativ neu? Es war vor mindestens 15 Jahren Teil meiner Statistikausbildung.
Toon Krijthe
6
Deshalb habe ich "relativ" gesagt: Efrons erste Artikel stammen aus den frühen 1980er Jahren, im Gegensatz zum Beginn der Robustheitsliteratur aus den 1960er Jahren.
Dirk Eddelbuettel
4

Das Bootstrapping des Wörterbuchs bedeutet, mit minimalen Ressourcen zu starten. Im Kontext eines Betriebssystems sollte das Betriebssystem in der Lage sein, schnell zu laden, sobald der Power On Self Test (POST) feststellt, dass es sicher ist, die CPU aufzuwecken. Der Bootstrap-Code wird im BIOS ausgeführt. Das BIOS ist ein kleines ROM. Im Allgemeinen ist es eine Sprunganweisung zu dem Befehlssatz, der das Betriebssystem in den RAM lädt. Das Ziel des Sprunges ist der Bootsektor auf der Festplatte. Sobald das BIOS-Programm überprüft hat, handelt es sich um einen gültigen Bootsektor, der die Startadresse des gespeicherten Betriebssystems enthält, dh ob es sich um einen gültigen MBR (Master Boot Record) handelt oder nicht. Wenn es sich um einen gültigen MBR handelt, wird das Betriebssystem von dort in den Speicher (RAM) kopiert. Das Betriebssystem kümmert sich um die Speicher- und Prozessverwaltung.

Achoora
quelle
2

IMHO gibt es keine bessere Erklärung als die Tatsache, wie der erste Compiler geschrieben wurde?

Heutzutage ist das Laden des Betriebssystems der häufigste Prozess, der als Bootstrapping bezeichnet wird

Ivanzinho
quelle
Der Link, den Sie in Ihrer Antwort angegeben haben, war wirklich hilfreich.
Siraj Alam
2

Bootstrapping hat im Kontext des verstärkenden Lernens eine weitere Bedeutung , die für Entwickler nützlich sein kann, zusätzlich zu seiner Verwendung in der Softwareentwicklung (die meisten Antworten hier, z. B. von kdgregory ) und seiner Verwendung in Statistiken, wie von Dirk Eddelbuettel diskutiert .

Von Sutton und Barto :

Widrow, Gupta und Maitra (1973) modifizierten den Least-Mean-Square (LMS) -Algorithmus von Widrow und Hoff (1960), um eine Verstärkungslernregel zu erstellen, die aus Erfolgs- und Misserfolgssignalen anstelle von Trainingsbeispielen lernen kann. Sie nannten diese Form des Lernens " selektive Bootstrap-Anpassung " und beschrieben sie als "Lernen mit einem Kritiker" anstatt "Lernen mit einem Lehrer". Sie analysierten diese Regel und zeigten, wie man lernen kann, Blackjack zu spielen. Dies war ein isolierter Streifzug durch Widrow, dessen Beiträge zum überwachten Lernen viel einflussreicher waren.

Das Buch beschreibt verschiedene Verstärkungsalgorithmen, bei denen der Zielwert auf einer vorherigen Näherung als Bootstrap-Methode basiert:

Schließlich stellen wir eine letzte besondere Eigenschaft der DP-Methoden [Dynamic Programming] fest. Alle aktualisieren Schätzungen der Werte von Zuständen basierend auf Schätzungen der Werte von Nachfolgestaaten. Das heißt, sie aktualisieren Schätzungen auf der Grundlage anderer Schätzungen. Wir nennen diese allgemeine Idee Bootstrapping . Viele Verstärkungslernmethoden führen Bootstrapping durch, auch solche, die nicht, wie DP erfordert, ein vollständiges und genaues Modell der Umgebung erfordern.

Beachten Sie, dass dies von der Bootstrap-Aggregation und der Intelligenz-Explosion abweicht, die auf der Wikipedia-Seite zum Bootstrapping erwähnt werden.

Scipio
quelle
1

In Bezug auf die Verwendung des beliebten Twitter-Bootstraps denke ich, dass diese Art des Bootstrapings die Integration einer modularen Komponente in eine Webanwendung ist, ohne dass die Webanwendung die vorhandene modulare Komponente bestätigen muss, bis sie benötigt wird oder auf sie verweist .

Der Entwickler kann eine Standardkopie des CSS Twitter Bootstrap-Themas nahtlos integrieren, indem er es einfach in die Webanwendung lädt (referenziert). Vuola! In diesem Fall müssen Sie möglicherweise einige dieser Änderungen überschreiben. Sie können dies jedoch so tun, dass die Ressource / Komponente unberührt und vollständig wiederverwendbar ist.

Mit demselben Konzept implementieren Web Devs jQuery-APIs usw., aber es wird von Devs nicht wirklich als Bootstrapping an sich ausgedrückt. Dies verbessert die Flexibilität und Wiederverwendbarkeit und ermöglicht gleichzeitig die Isolierung verschiedener Komponenten / Ressourcen einer App, die sich entweder auf demselben Server oder möglicherweise auf einem CDN frei befinden können.

HINWEIS: Bei der Berechnung von Bootstrapping-Geschäften mit dem MBR und unter UNIX ist ein spezieller Bootloader oder Manager erforderlich, bei dem es sich um ein kleines Programm im ROM handelt, das das Betriebssystem in den RAM lädt. Wenn Sie darüber nachdenken, findet das gleiche Konzept in der Aktion des Bootstrap Loader statt, der den MBR überprüft und das Betriebssystem basierend auf dieser Tabelle lädt, ohne dass das Betriebssystem eine Ahnung davon hat, dass dies geschieht.

yardpenalty.com
quelle
0

Ich gehöre zu der Generation, die Schalter umgelegt hat, um ein Boot-Programm aufzurufen. In den frühen 1980er Jahren arbeitete ich an einem Mikrocomputer namens Micro-78, der von der Electronics Corporation of India Ltd. (ECIL) entwickelt wurde. Es war eine Art Klon von Altair 8800. Ich erinnere mich genau, was passiert, wenn ein kleines Boot-Programm mit den Kippschaltern eingegeben und per Knopfdruck ausgeführt wird. Das Programm liest ein zweites Startprogramm, das in der ersten Spur der Diskette enthalten ist, und überschreibt es auf sich selbst, so dass das zweite Startprogramm ausgeführt wird, um ein Festplattenbetriebssystem zu laden. Ich denke, der Begriff "Bootstrap" bezieht sich auf diesen Prozess des ersten Bootprogramms, das das zweite Bootprogramm auf sich selbst liest und überschreibt, in einer Weise, die sich mit der zusätzlichen Funktionalität des zweiten Bootprogramms "hochzieht".

Murthy KVM
quelle
-3

Als bescheidener Anfänger in der Welt des Programmierens und durchblätternd alle Antworten hier, nachdem ich gesehen hatte, dass dieses Wort an verschiedenen Stellen auf scheinbar leicht unterschiedliche Weise verwendet wurde, fand ich das Lesen der Wikipedia-Seite über Bootstrapping (duh! Ich habe nicht daran gedacht es ist entweder zunächst sehr informativ, Unterschiede in der Verwendung dieses Wortes zu verstehen . Könnte es sein, dass ...... in äußerst seltenen Fällen ...... Wikipedia möglicherweise sogar bessere Erklärungen für bestimmte Begriffe hat als .... (redigiert)? Werden sie jedoch Wiederholungspunkte auf Wikipedia einbringen?

Mir scheint, dass alle Bedeutungen etwas damit zu tun haben: Beginnen Sie mit etwas so Einfachem wie möglich, Ding1, machen Sie etwas etwas Komplexeres mit diesem Ding2, und jetzt können Sie mit Thing2 einige Aufgaben effizienter und schneller erledigen, als Sie könnten ursprünglich mit Thing1. Dann wiederholen Sie von Thing2 bis Thing 3 ad infinitum ...

Ich sehe es als eng verbunden sowohl mit der biologischen Evolution als auch mit 'Layers of Abstraction' (Neulinge wie ich, ahem, Wikipedia, Husten) - die Evolution von Computern aus den 1940er Jahren mit Schaltern, Maschinencode, Assembly, C, Python, AIs, die Sie geben können Alle Arten von komplexen Anweisungen, wie "Machen Sie das% 4 ^% Abendessen zu meinen Standard- & ^ $% -Anforderungen und reinigen Sie den Boden, den Sie% $ £" @: ~ "in betrunkenem Slang-Englisch oder Amazonas-Stammes-Dialekt, ohne dass sie eine Ausnahme auslösen '(wieder für Neulinge ... Sie haben es erraten) - habe dort aufgrund einfacher Ignoranz viele Links verpasst.

Dann in bestimmten spezifischen Software-Bedeutungen: Bedeutung1: Mit Thing1 wird die neueste Version von Thing2 geladen (da Thing2 natürlich größer als Thing1 ist, genauso wie Thing3 größer als Thing2 ist).

Bedeutung2: Thing1 ist eine niedrigere Sprache (näher an 1001011100 .... 011001 als print ("Hallo", Benutzername)), die verwendet wird, um ein wenig von der höheren Sprache von Thing2 zu schreiben, dann ist dies ein kleines bisschen von Thing2 wird verwendet, um Thing2 selbst von der Baby-Vokabelebene zur Erwachsenen-Vokabelebene zu erweitern (Thing2 wird von der Baby-Version von sich selbst verarbeitet (oder es ist ein cleveres Baby!), während die Baby-Version von Thing2 den korrekten Fachbegriff "kompiliert" verwendet selbst könnte natürlich nur von Thing1 kompiliert werden, weil es nicht existieren kann, bevor es existiert, richtig duh!), dann kompiliert die Kinderversion von Thing2 die Surly Teenager-Version von Thing2, und an diesem Punkt entscheidet die Programmier-Community, ob Surly Teenagers 'Probleme' ( Software-Begriff und Metapher-Begriff!) sind es wert, genügend Zeit für die Lösung aufzuwenden, um langfristig akzeptiert zu werden.oder sie aufzugeben (nicht sicher, wohin man die Analogie hier nehmen soll).

Wenn ja, dann hat sich Thing2 (möglicherweise einige Male) von der Kindheit bis zum Erwachsenenalter "gebootet": "Das Kind ist der Vater des Mannes" (Wordsworth, schlagen Sie vor, nicht das Zitat oder den Autor von Stack Overflow nachzuschlagen). .

Will Croxford
quelle