Che cos'è il bootstrap?


636

Continuo a vedere il "bootstrap" menzionato nelle discussioni sullo sviluppo delle applicazioni. Sembra sia diffuso che importante, ma non ho ancora trovato nemmeno una scarsa spiegazione di cosa sia effettivamente il bootstrap; piuttosto, sembra che tutti dovrebbero sapere cosa significa. Non lo so, però. Per quanto ne so, ha qualcosa a che fare con le attività di inizializzazione richieste da un'applicazione all'avvio, ma potrei sbagliarmi completamente. Qualcuno può aiutarmi a capire questa idea?


8
Secondo Wikipedia, ci sono quattro usi della parola "bootstrap" per quanto riguarda l'informatica - en.wikipedia.org/wiki/Bootstrapping#Computing
Thomas Owens

1
Ho appena aggiornato il post di HeDinges con questo. Stavo cercando qualche chiarimento su quale forma di bootstrap stava guardando Alex.
Thomas Owens,

Nello sviluppo del software si riferisce allo sviluppo di ambienti di programmazione successivamente più complessi e più veloci.
Lucky

Nello sviluppo di software .NET, la mia comprensione è che si riferisce alla configurazione dell'ambiente in cui verrà eseguita l'applicazione, ad esempio tutti i servizi che devono essere registrati o caricati.
Neo

Risposte:


318

"Bootstrap" deriva dal termine "tirarti su dai tuoi bootstrap". Quanto puoi ottenere da Wikipedia .

Nell'informatica, un bootstrap loader è il primo pezzo di codice che viene eseguito all'avvio di una macchina ed è responsabile del caricamento del resto del sistema operativo. Nei computer moderni è archiviato nella ROM, ma ricordo il processo di bootstrap sul PDP-11, in cui si spuntavano i bit tramite gli switch del pannello frontale per caricare un particolare segmento del disco in memoria, e quindi eseguirlo. Inutile dire che il bootstrap loader è normalmente piuttosto piccolo.

"Bootstrap" è anche usato come termine per costruire un sistema usando se stesso - o più correttamente, una versione precedente. Ad esempio, ANTLR versione 3 viene scritta utilizzando un parser sviluppato in ANTLR versione 2.


8
Caspita, mi ero quasi dimenticato degli interruttori sul pannello frontale dei PDP. Grazie per i ricordi!!
Jeff Hornby,

7
Correggimi se sbaglio. Sebbene questa risposta spieghi i dettagli tecnici di ciò che può essere il bootstrap, non ha mai risposto alla domanda originale nel contesto della domanda.
jayscript

5
@jayscript - Come sceglieresti di rispondere a questa domanda? È un'espressione idiomatica, e gli idiomi sono in genere ben compresi dal gruppo sociale che li usa e incomprensibili al di fuori di esso. Ho provato a rispondere con l'esempio, che credo sia uno dei pochi modi per tentare di tradurre il linguaggio.

3
@kdgregory Non sarei in grado di rispondere a questa domanda poiché sono venuto qui per cercare risposte. Suppongo che la stessa parola bootstrap sia una metafora di diversi concetti tecnici che sono vagamente correlati, che potrebbe essere la fonte di confusione.
jayscript il

2
PDP 11 ?! Non mi ero reso conto che qui c'erano anziani. : P
John Red

255

Un esempio di bootstrap è in alcuni framework web. Si chiama index.php (il bootstrapper), quindi carica gli helper dei framework, i modelli, la configurazione, quindi carica il controller e gli passa il controllo.

Come puoi vedere, è un semplice file che avvia un processo di grandi dimensioni.


50
In termini di sviluppo web (che era il contesto della domanda originale), penso che questa sia la risposta migliore.
cartbeforehorse

Sembra abbastanza imparentato con Laravel, ma Laravel non era ancora lì nel 2009.
LppEdd

@Wajdan Ali No, questa non dovrebbe essere la risposta accettata. Questa è una visione microscopica di un nuovo uso del termine bootstrap, che alcuni sostengono sia in realtà un uso improprio di un termine molto precedente. "To bootstrap" si riferisce a tirarti su dai tuoi bootstrap, cioè per usare il potere di qualcosa per sfruttare se stesso. È l'origine del termine "per avviare il computer". L'attuale utilizzo pop nello sviluppo web non è l'unico (o originale) utilizzo della parola. Molte altre risposte si rivolgono in modo appropriato.
Kallaste,

3
@Kallaste, bene, ma questa è la risposta che ho cercato e, in base al contesto della domanda originale ("sviluppo di applicazioni"), sembra essere la risposta più appropriata come già sottolineato.
Bynary

@ aaron.bynum, no, la risposta fornita si applica ai framework di sviluppo web e sicuramente non allo sviluppo di applicazioni. La risposta è fuorviante e imperfetta, perché si basa su un malinteso comunemente ritenuto su cosa sia effettivamente il bootstrap e da dove provenga. Si sta solo diffondendo disinformazione. Se è quello che sei venuto qui a cercare, allora va bene, ma SO nel suo insieme valorizza le informazioni. Quindi il mio commento.
Kallaste,

51

Vedi l'articolo di Wikipedia sul bootstrap .

C'è una sezione e collegamenti che spiegano cosa significa in Informatica . Ha quattro diversi usi nel campo.

Ecco alcune citazioni, ma per una spiegazione più approfondita e significati alternativi, consultare i collegamenti sopra.

"... è una tecnica mediante la quale un semplice programma per computer attiva un sistema di programmi più complicato."

"Un uso diverso del termine bootstrap è quello di utilizzare un compilatore per compilare se stesso, scrivendo prima una piccola parte di un compilatore di un nuovo linguaggio di programmazione in un linguaggio esistente per compilare più programmi del nuovo compilatore scritto nel nuovo linguaggio."


6
Potresti per favore citare o parafrasare in modo che i lettori non debbano attraversare più siti Web per ottenere la loro risposta?
Kurt W. Leucht,

5
"L'industria del software: il business unico di vendere legalmente prodotti scadenti e di addebitare i loro aggiornamenti."
Stein Åsmul

Stavo cercando una risposta Bootstrapping nel compilatore . Questo è stato utile.
Siraj Alam,

49

Il termine "bootstrap" di solito si applica a una situazione in cui un sistema dipende da se stesso per l'avvio, una sorta di problema di pollo e uova.

Per esempio:

  • Come si compila un compilatore C scritto in C?
  • Come si avvia un processo di inizializzazione del sistema operativo se il sistema operativo non è ancora in esecuzione?
  • Come si avvia un sistema distribuito (peer-to-peer) in cui i client dipendono dai loro peer attualmente conosciuti per scoprire nuovi peer nel sistema?

In tal caso, il bootstrap si riferisce a un modo per interrompere la dipendenza circolare, di solito con l'aiuto di un'entità esterna, ad es

  • È possibile utilizzare un altro compilatore C per compilare (bootstrap) il proprio compilatore, quindi è possibile utilizzarlo per ricompilare se stesso
  • Si utilizza un pezzo di codice separato che imposta il processo iniziale senza dipendere da alcuna funzione fornita dal sistema operativo
  • Si utilizza un elenco hard-coded di peer iniziali o un URL tracker hard-coded che fornisce l'elenco peer

eccetera.


4
Questo è davvero al centro della domanda. Dove le altre due risposte, manca completamente.
Arturo Hernandez,

1
Penso che questa spiegazione sia stata la più rilevante per lo sviluppo del software in generale. Ho davvero portato il concetto a casa per me
Vance Palacio,

24

Nel contesto dello sviluppo di applicazioni, il "bootstrap" di solito si presenta quando si parla di software modulare e / o auto-aggiornabile.

Piuttosto che l'utente che scarica l'intera app, incluse le funzionalità di cui non ha bisogno, e scarica nuovamente e aggiorna manualmente ogni volta che c'è un aggiornamento, l'utente scarica e avvia solo un piccolo eseguibile "bootstrap", che a sua volta scarica e installa quelli parti dell'applicazione di cui l'utente ha bisogno. Inoltre, il componente bootstrap è in grado di cercare aggiornamenti e installarli ogni volta che viene avviato.


4
Non ho mai sentito il termine "bootstrap" usato in quel particolare contesto.
Bombe

Comunemente utilizzato per quanto riguarda le applicazioni php (ad esempio utilizzando Composer per ottenere questo risultato)
AturSams

15

Alex, è praticamente ciò che fa il tuo computer quando si avvia. ("Avvio" di un computer in realtà deriva dalla parola bootstrap)

Inizialmente, viene eseguito il piccolo programma nel BIOS. Che contiene abbastanza codice macchina per caricare ed eseguire un programma più grande e più complesso.

Quel secondo programma è probabilmente qualcosa come NTLDR (in Windows) o LILO (in Linux), che quindi esegue ed è in grado di caricare, quindi eseguire, il resto del sistema operativo.


2
Anche se ho letto tutte le risposte (che si sono estese bene sul termine e ne ho votato alcune), questo semplice confronto di "avvio" noto anche come "bootstrap" mi ha dato la migliore motivazione per leggere tutti gli altri per collegare i punti. Srsly, è stato come spiegare un argomento complesso a un bambino di 5 anni e lo capiscono. Grazie.
Chris22

14

Per completezza, è anche un metodo piuttosto importante (e relativamente nuovo) nelle statistiche che utilizza il ricampionamento / simulazione per inferire le proprietà della popolazione da un campione. Ha un suo lungo articolo di Wikipedia sul bootstrap (statistiche) .


1
Relativamente nuovo? Faceva parte della mia educazione statistica almeno 15 anni fa.
Toon Krijthe

6
Questo è il motivo per cui ho detto "relativamente": gli articoli iniziali di Efron risalgono ai primi anni '80, invece di dire l'inizio della letteratura sulla robustezza degli anni '60.
Dirk Eddelbuettel,

4

Avviare il significato del dizionario significa avviare con risorse minime. Nel contesto di un sistema operativo, il sistema operativo dovrebbe essere in grado di caricare rapidamente una volta che il Power On Self Test (POST) determina che è possibile riattivare la CPU in modo sicuro. Il codice della cinghia di avvio verrà eseguito dal BIOS. Il BIOS è una ROM di piccole dimensioni. Generalmente si tratta di un'istruzione di salto all'insieme di istruzioni che caricherà il sistema operativo nella RAM. La destinazione del Jump è il settore Boot nel disco rigido. Una volta verificato il programma bios, si tratta di un settore di avvio valido che contiene l'indirizzo iniziale del sistema operativo memorizzato, ovvero se si tratta di un MBR (Master Boot Record) valido o meno. Se è un MBR valido, il sistema operativo verrà copiato nella memoria (RAM) da lì il sistema operativo si occuperà della gestione della memoria e dei processi.



2

Il bootstrap ha ancora un altro significato nel contesto dell'apprendimento per rinforzo che può essere utile conoscere per gli sviluppatori, oltre al suo uso nello sviluppo di software (la maggior parte delle risposte qui, ad esempio da kdgregory ) e al suo uso nelle statistiche come discusso da Dirk Eddelbuettel .

Da Sutton e Barto :

Widrow, Gupta e Maitra (1973) hanno modificato l'algoritmo Least-Mean-Square (LMS) di Widrow e Hoff (1960) per produrre una regola di apprendimento di rinforzo che potrebbe imparare dai segnali di successo e fallimento invece che da esempi di addestramento. Hanno chiamato questa forma di apprendimento " adattamento selettivo del bootstrap " e l'hanno descritta come "apprendimento con un critico" anziché "apprendimento con un insegnante". Hanno analizzato questa regola e mostrato come si potrebbe imparare a giocare a blackjack. Questa era un'incursione isolata nell'apprendimento per rinforzo di Widrow, i cui contributi all'apprendimento supervisionato erano molto più influenti.

Il libro descrive vari algoritmi di rinforzo in cui il valore target si basa su un'approssimazione precedente come metodi bootstrap:

Infine, notiamo un'ultima proprietà speciale dei metodi DP [Dynamic Programming]. Tutti aggiornano le stime dei valori degli stati in base alle stime dei valori degli stati successivi. Cioè, aggiornano le stime sulla base di altre stime. Questa idea generale viene chiamata bootstrap . Molti metodi di apprendimento del rinforzo eseguono il bootstrap, anche quelli che non richiedono, come DP richiede, un modello completo e accurato dell'ambiente.

Si noti che questo differisce dall'aggregazione bootstrap e dall'esplosione dell'intelligence menzionata nella pagina wikipedia sul bootstrap.


1

In termini di utilizzo del popolare Bootstrap di Twitter, penso che questo tipo di bootstrap sia l'azione di integrazione di un componente modulare in un'applicazione Web senza che l'applicazione Web debba riconoscere che il componente modulare esiste fino a quando non ne ha bisogno o non fa riferimento a esso .

Lo sviluppatore può integrare senza problemi una copia predefinita del tema Bootstrap CSS di Twitter semplicemente caricandola (facendo riferimento) nell'applicazione Web. Vuola! Quindi potrebbe essere necessario sovrascrivere alcune di queste modifiche, ma è possibile farlo in modo tale che la risorsa / componente sia intatta e completamente riutilizzabile.

Questo stesso concetto è il modo in cui gli sviluppatori Web implementano le API jQuery e così via, ma non è espresso da Dev come avvio automatico di per sé. Ciò che fa è migliorare la flessibilità e la riusabilità consentendo allo stesso tempo all'isolamento di diversi componenti / risorse di un'app di risiedere liberamente sullo stesso server / i o eventualmente su una rete CDN.

NOTA: nel calcolo del bootstrap si occupa dell'MBR e in UNIX richiede uno speciale bootloader o gestore che è un piccolo programma nella ROM che carica il sistema operativo nella RAM. Se ci pensate, lo stesso concetto si svolge nell'azione del bootstrap loader che controlla l'MBR e carica il sistema operativo in base a questa tabella che si verifica senza che il sistema operativo abbia idea che ciò avvenga.


0

Appartengo alla generazione che ha attivato gli switch per accedere a un programma di avvio. All'inizio degli anni '80, ho lavorato su un microcomputer chiamato Micro-78, sviluppato da Electronics Corporation of India Ltd (ECIL). Era una sorta di clone di Altair 8800. Ricordo distintamente cosa succede quando un piccolo programma di avvio è stato inserito utilizzando gli interruttori a levetta ed eseguito premendo un pulsante. Il programma legge un secondo programma di avvio contenuto nella prima traccia del disco floppy e lo sovrascrive su se stesso in modo tale che il secondo programma di avvio inizi l'esecuzione per caricare un sistema operativo del disco. Penso che il termine "bootstrap" si riferisca a questo processo del primo programma di avvio che legge e sovrascrive il secondo programma di avvio su se stesso, in un modo "tirandosi su" con la funzionalità aggiuntiva del secondo programma di avvio.


-3

Essendo un umile principiante nel mondo della programmazione e sfogliando tutte le risposte qui dopo aver visto questa parola usare molto in modi apparentemente leggermente diversi in luoghi diversi, ho trovato la lettura della pagina di Wikipedia su Bootstrapping (duh! Non ho pensato a o all'inizio) è molto istruttivo per capire le differenze nell'uso di questa parola. Potrebbe essere ...... in occasioni estremamente rare ...... Wikipedia potrebbe anche avere spiegazioni migliori di alcuni termini rispetto a .... (redatto)? Porteranno punti rep su Wikipedia?

A me sembra che tutti i significati abbiano a che fare con: iniziare con qualcosa il più semplice possibile Thing1, rendere qualcosa leggermente più complesso con quel Thing2, e ora puoi usare Thing2 per svolgere qualche tipo di attività in modo più efficiente e veloce di quanto potresti originariamente con Thing1. Quindi ripeti da Thing2 a Thing 3 all'infinito ...

Lo vedo come strettamente connesso sia all'evoluzione biologica sia a "Layers of Abstraction" (i neofiti come me vedono, ahem, Wikipedia, tosse) - l'evoluzione dai computer degli anni '40 con switch, codice macchina, Assembly, C, Python, AIs che puoi dare tutti i tipi di istruzioni complesse che mi piacciono "prepara la cena% 4 ^% secondo i miei requisiti predefiniti & ^ $% e pulisci il pavimento% $ £" @: ~ "in dialetto tribale inglese o Amazon ubriaco senza che sollevino un'eccezione '(di nuovo per i neofiti ... hai indovinato) - ci sono mancati molti collegamenti lì a causa della semplice ignoranza.

Quindi, in alcuni significati software specifici: Significato1: Thing1 viene utilizzato per caricare l'ultima versione di Thing2 (poiché, naturalmente, Thing2 sarà più grande di Thing1, così come Thing3 sarà più grande di Thing2).

Significato2: Thing1 è un linguaggio di livello inferiore (più vicino a 1001011100 .... 011001 rispetto a print ("Hello", nome.utente) utilizzato per scrivere un po 'della lingua più alta di Thing2, quindi questo bit di Thing2 è usato per espandere Thing2 stesso dal livello del vocabolario del bambino al livello del vocabolario per adulti (Thing2 inizia a essere elaborato, o per usare il termine tecnico corretto 'compilato', dalla versione del bambino di se stesso (è un bambino intelligente!), mentre la versione per bambini di Thing2 ovviamente potrebbe essere compilato solo da Thing1, perché non può esistere prima che esista, giusto duh!), quindi la versione figlio di Thing2 compila la versione Suring Teenager di Thing2, a quel punto la comunità di programmazione decide se i 'problemi' di Surly Teenager ( termine del software e termine della metafora!) vale la pena dedicare abbastanza tempo alla risoluzione per essere accettato a lungo termine,o di abbandonarli (non sono sicuro di dove prendere l'analogia qui).

Se sì, allora Thing2 ha "Bootstrapped" stesso (possibilmente alcune volte) dall'infanzia all'età adulta: "il bambino è il padre dell'uomo" (Wordsworth, suggerisci di non provare a cercare la citazione o l'autore su Stack Overflow) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.