Qu'est-ce que le bootstrap?

636

Je continue de voir le "bootstrapping" mentionné dans les discussions sur le développement d'applications. Cela semble à la fois répandu et important, mais je n'ai pas encore trouvé une mauvaise explication de ce qu'est réellement le bootstrap; il semble plutôt que tout le monde soit censé savoir ce que cela signifie. Mais non. D'après ce que je peux comprendre, cela a quelque chose à voir avec les tâches d'initialisation requises d'une application au lancement, mais je peux me tromper complètement. Quelqu'un peut-il m'aider à comprendre cette idée?

Alex Basson
la source
8
Selon Wikipedia, il y a quatre utilisations du mot "bootstrapping" en ce qui concerne l'informatique - en.wikipedia.org/wiki/Bootstrapping#Computing
Thomas Owens
1
Je viens de mettre à jour le post HeDinges avec cela. Je cherchais des éclaircissements sur la forme de bootstrap qu'Alex envisageait.
Thomas Owens
Dans le développement de logiciels, il s'agit du développement d'environnements de programmation successivement plus complexes et plus rapides.
Lucky
Dans le développement de logiciels .NET, je crois comprendre que cela fait référence à la configuration de l'environnement dans lequel l'application s'exécutera, comme tous les services qui doivent être enregistrés ou chargés.
Neo

Réponses:

318

"Bootstrapping" vient du terme "vous tirer vers le haut par vos propres bootstraps." C'est ce que vous pouvez obtenir de Wikipedia .

En informatique, un chargeur d'amorçage est le premier morceau de code qui s'exécute au démarrage d'une machine et est responsable du chargement du reste du système d'exploitation. Dans les ordinateurs modernes, il est stocké dans la ROM, mais je me souviens du processus d'amorçage sur le PDP-11, où vous poussiez des bits via les commutateurs du panneau avant pour charger un segment de disque particulier dans la mémoire, puis l'exécutiez. Inutile de dire que le chargeur de démarrage est normalement assez petit.

"Bootstrapping" est également utilisé comme un terme pour construire un système en utilisant lui-même - ou plus correctement, une version précédente. Par exemple, ANTLR version 3 est écrit à l'aide d'un analyseur développé dans ANTLR version 2.


la source
8
Wow, j'avais presque oublié les commutateurs du panneau avant des PDP. Merci pour les souvenirs!!
Jeff Hornby
7
Corrigez-moi si je me trompe. Bien que cette réponse explique les détails techniques de ce que peut être l'amorçage, elle n'a jamais répondu à la question d'origine dans le contexte de la question.
jayscript
5
@jayscript - Comment choisiriez-vous de répondre à cette question? C'est une expression idiomatique, et les idiomes sont généralement bien compris par le groupe social qui les utilise et incompréhensibles en dehors de celui-ci. J'ai essayé de répondre par l'exemple, ce qui, selon moi, est l'une des rares façons de tenter de traduire l'idiome.
3
@kdgregory Je ne pourrais pas répondre à cette question car je suis venu ici pour chercher des réponses. Je suppose que le mot bootstrap lui-même est une métaphore de plusieurs concepts techniques différents qui sont vaguement liés, ce qui pourrait être une source de confusion.
jayscript
2
PDP 11?! Je n'avais pas réalisé que nous avions des personnes âgées ici. : P
John Red
255

Un exemple d'amorçage est dans certains frameworks web. Vous appelez index.php (le bootstrapper), puis il charge les frameworks helpers, les modèles, la configuration, puis charge le contrôleur et lui passe le contrôle.

Comme vous pouvez le voir, c'est un simple fichier qui démarre un gros processus.

ryeguy
la source
50
En termes de développement web (qui était le contexte de la question d'origine), je pense que c'est la meilleure réponse.
cartbeforehorse
Semble assez lié à Laravel, mais Laravel n'était toujours pas là en 2009.
LppEdd
@Wajdan Ali Non, cela ne devrait pas être la réponse acceptée. Il s'agit d'une vue microscopique d'une nouvelle utilisation du terme bootstrap, dont certains diront qu'il s'agit en fait d'une mauvaise utilisation d'un terme beaucoup plus ancien. "Bootstrap" se réfère à vous tirer vers le haut par vos bootstraps, c'est-à-dire, utiliser la puissance de quelque chose pour se démultiplier. C'est l'origine du terme «démarrer votre ordinateur». L'utilisation pop actuelle dans le développement Web n'est pas la seule (ou l'original) utilisation du mot. De nombreuses autres réponses répondent à cette question de manière appropriée.
Kallaste
3
@Kallaste, très bien, mais c'est la réponse que je suis venue chercher, et, sur la base du contexte de la question d'origine ("développement d'application"), elle semble être la réponse la plus appropriée comme déjà indiqué.
2019
@ aaron.bynum, non, la réponse donnée s'applique aux frameworks de développement web, et certainement pas au développement d'applications. La réponse est trompeuse et erronée, car elle repose sur une méconnaissance courante de ce qu'est réellement le bootstrap et de sa provenance. Cela ne fait que répandre de la désinformation. Si c'est ce que vous êtes venu chercher ici, alors très bien, mais SO dans son ensemble valorise les informations correctes. D'où mon commentaire.
Kallaste
51

Voir sur l'article Wikipedia sur le bootstrap .

Il y a une section et des liens expliquant ce que cela signifie en informatique . Il a quatre utilisations différentes dans le domaine.

Voici quelques citations, mais pour une explication plus approfondie et d'autres significations, consultez les liens ci-dessus.

"... est une technique par laquelle un simple programme informatique active un système de programmes plus compliqué."

"Une utilisation différente du terme bootstrap consiste à utiliser un compilateur pour se compiler, en écrivant d'abord une petite partie d'un compilateur d'un nouveau langage de programmation dans un langage existant pour compiler plus de programmes du nouveau compilateur écrits dans le nouveau langage."

HeDinges
la source
6
Pourriez-vous s'il vous plaît citer ou paraphraser afin que les lecteurs n'aient pas à parcourir plusieurs sites Web pour obtenir leur réponse?
Kurt W. Leucht
5
"L'industrie du logiciel, l'entreprise unique de vendre légalement des produits de qualité inférieure et de facturer leurs mises à niveau."
Stein Åsmul
Je cherchais une réponse Bootstrapping dans le compilateur . C'était utile.
Siraj Alam
49

Le terme "bootstrapping" s'applique généralement à une situation où un système dépend de lui-même pour démarrer, une sorte de problème de poule et d'oeuf.

Par exemple:

  • Comment compiler un compilateur C écrit en C?
  • Comment démarrer un processus d'initialisation du système d'exploitation si vous n'avez pas encore le système d'exploitation en cours d'exécution?
  • Comment démarrer un système distribué (peer-to-peer) où les clients dépendent de leurs pairs actuellement connus pour découvrir de nouveaux pairs dans le système?

Dans ce cas, le bootstrapping fait référence à un moyen de briser la dépendance circulaire, généralement avec l'aide d'une entité externe, par exemple

  • Vous pouvez utiliser un autre compilateur C pour compiler (bootstrap) votre propre compilateur, puis vous pouvez l'utiliser pour se recompiler
  • Vous utilisez un morceau de code distinct qui configure le processus initial sans dépendre des fonctions fournies par le système d'exploitation
  • Vous utilisez une liste codée en dur de pairs initiaux ou une URL de suivi codée en dur qui fournit la liste de pairs

etc.

Ivan Poliakov
la source
4
Cela va vraiment au cœur de la question. Lorsque les deux autres réponses, manquez-le complètement.
Arturo Hernandez
1
Je pense que cette explication était la plus pertinente pour le développement de logiciels en général. J'ai vraiment ramené le concept à la maison
Vance Palacio
24

Dans le contexte du développement d'applications, le "bootstrap" apparaît généralement lorsque l'on parle de logiciels modulaires et / ou auto-actualisables.

Plutôt que l'utilisateur télécharge l'application entière, y compris les fonctionnalités dont il n'a pas besoin, et la retélécharge et la met à jour manuellement chaque fois qu'il y a une mise à jour, l'utilisateur télécharge et démarre uniquement un petit exécutable "bootstrap", qui à son tour télécharge et installe ces parties de l'application dont l'utilisateur a besoin. De plus, le composant d'amorçage est capable de rechercher des mises à jour et de les installer à chaque démarrage.

Michael Borgwardt
la source
4
Je n'ai jamais entendu le terme «bootstrapping» utilisé dans ce contexte particulier.
Bombe
Couramment utilisé en ce qui concerne les applications php (par exemple en utilisant Composer pour accomplir cela)
AturSams
15

Alex, c'est à peu près ce que fait votre ordinateur lorsqu'il démarre. (Le «démarrage» d'un ordinateur provient en fait du mot bootstrapping)

Initialement, le petit programme de votre BIOS s'exécute. Cela contient suffisamment de code machine pour charger et exécuter un programme plus grand et plus complexe.

Ce deuxième programme est probablement quelque chose comme NTLDR (sous Windows) ou LILO (sous Linux), qui s'exécute ensuite et est capable de charger, puis d'exécuter, le reste du système d'exploitation.

davewasthere
la source
2
Bien que j'aie lu toutes les réponses (qui ont bien développé le terme et j'en ai voté), cette simple comparaison "booting" aka "bootstrapping" m'a donné la meilleure motivation pour lire toutes les autres pour relier les points. Srsly, c'était comme expliquer un sujet complexe à un enfant de 5 ans et ils l'ont compris. Merci.
Chris22
14

Par souci d'exhaustivité, il s'agit également d'une méthode assez importante (et relativement nouvelle) en statistique qui utilise le rééchantillonnage / simulation pour déduire les propriétés d'une population à partir d'un échantillon. Il a son propre long article Wikipédia sur le bootstrap (statistiques) .

Dirk Eddelbuettel
la source
1
Relativement nouveau? Cela faisait partie de ma formation en statistique il y a au moins 15 ans.
Toon Krijthe
6
C'est pourquoi j'ai dit `` relativement '': les premiers articles d'Efron datent du début des années 1980 au lieu de dire le début de la littérature sur la robustesse des années 1960.
Dirk Eddelbuettel
4

Boot strapping le sens du dictionnaire est de démarrer avec un minimum de ressources. Dans le contexte d'un système d'exploitation, le système d'exploitation devrait pouvoir se charger rapidement une fois que l'autotest de mise sous tension (POST) détermine qu'il est sûr de réveiller le processeur. Le code de la sangle de démarrage sera exécuté à partir du BIOS. Le BIOS est une ROM de petite taille. Généralement, c'est une instruction de saut vers l'ensemble d'instructions qui chargera le système d'exploitation dans la RAM. La destination du saut est le secteur de démarrage du disque dur. Une fois que le programme de bios vérifie, c'est un secteur de démarrage valide qui contient l'adresse de départ du système d'exploitation stocké, c'est-à-dire s'il s'agit d'un MBR (Master Boot Record) valide ou non. S'il s'agit d'un MBR valide, le système d'exploitation sera copié dans la mémoire (RAM) à partir de là, le système d'exploitation se charge de la gestion de la mémoire et des processus.

achoora
la source
2

À mon humble avis, il n'y a pas de meilleure explication que le fait de savoir comment le premier compilateur a été écrit?

De nos jours, le chargement du système d'exploitation est le processus le plus courant appelé Bootstrapping

Ivanzinho
la source
Le lien que vous avez donné dans votre réponse a été très utile.
Siraj Alam
2

Bootstrapping a encore une autre signification dans le contexte de l' apprentissage par renforcement qui peut être utile à connaître pour les développeurs, en plus de son utilisation dans le développement de logiciels (la plupart des réponses ici, par exemple par kdgregory ) et de son utilisation dans les statistiques comme discuté par Dirk Eddelbuettel .

De Sutton et Barto :

Widrow, Gupta et Maitra (1973) ont modifié l'algorithme Least-Mean-Square (LMS) de Widrow et Hoff (1960) pour produire une règle d'apprentissage par renforcement qui pourrait apprendre des signaux de réussite et d'échec au lieu d'exemples de formation. Ils ont appelé cette forme d'apprentissage « adaptation sélective du bootstrap » et l'ont décrite comme «apprendre avec un critique» au lieu d '«apprendre avec un enseignant». Ils ont analysé cette règle et ont montré comment il pouvait apprendre à jouer au blackjack. Ce fut une incursion isolée dans l'apprentissage par renforcement par Widrow, dont les contributions à l'apprentissage supervisé étaient beaucoup plus influentes.

Le livre décrit divers algorithmes de renforcement où la valeur cible est basée sur une approximation précédente en tant que méthodes de bootstrap:

Enfin, nous notons une dernière propriété spéciale des méthodes DP [Dynamic Programming]. Tous mettent à jour les estimations des valeurs des États sur la base des estimations des valeurs des États successeurs. Autrement dit, ils mettent à jour les estimations sur la base d'autres estimations. Nous appelons cette idée d' amorçage générale . De nombreuses méthodes d'apprentissage par renforcement effectuent le bootstrap, même celles qui ne nécessitent pas, comme DP l'exige, un modèle complet et précis de l'environnement.

Notez que cela diffère de l'agrégation de bootstrap et de l'explosion d'intelligence qui sont mentionnées sur la page wikipedia sur le bootstrapping.

Scipio
la source
1

En ce qui concerne l'utilisation du populaire Twitter Bootstrap, j'ai l'impression que ce type de démarrage est l'action d'intégrer un composant modulaire dans une application Web sans que l'application Web doive même reconnaître que le composant modulaire existe jusqu'à ce qu'il en ait besoin ou qu'il le référence .

Le développeur peut intégrer de manière transparente une copie par défaut du thème CSS Twitter Bootstrap en la chargeant (référençant) simplement dans l'application Web. Vuola! Ensuite, vous devrez peut-être remplacer certaines de ces modifications, mais vous pouvez le faire de telle manière que la ressource / le composant soit intact et complètement réutilisable.

Ce même concept est la façon dont les développeurs Web implémentent les API jQuery et ainsi de suite, mais il n'est pas vraiment exprimé par les développeurs comme un bootstrap en soi. Ce qu'il fait, c'est qu'il améliore la flexibilité et la réutilisabilité tout en permettant à l'isolation de différents composants / ressources d'une application de résider librement sur le même serveur / s ou éventuellement sur un CDN.

REMARQUE: Dans le calcul des opérations d'amorçage avec le MBR et sous UNIX, il nécessite un chargeur de démarrage ou un gestionnaire spécial qui est un petit programme en ROM qui charge le système d'exploitation dans la RAM. Si vous y réfléchissez, le même concept a lieu dans l'action du chargeur d'amorçage vérifiant le MBR et chargeant le système d'exploitation en fonction de ce tableau, ce qui se produit sans que le système d'exploitation ait la moindre idée que cela se produit.

yardpenalty.com
la source
0

J'appartiens à la génération qui a basculé les commutateurs pour entrer dans un programme de démarrage. Au début des années 80, j'ai travaillé sur un micro-ordinateur appelé Micro-78, développé par Electronics Corporation of India Ltd (ECIL). C'était une sorte de clone de l'Altair 8800. Je me souviens clairement de ce qui se passe lorsqu'un petit programme de démarrage est entré à l'aide des interrupteurs à bascule et exécuté en appuyant sur un bouton. Le programme lit un deuxième programme de démarrage contenu dans la 1ère piste de la disquette et l'écrase sur lui-même de telle sorte que le deuxième programme de démarrage commence à s'exécuter pour charger un système d'exploitation de disque. Je pense que le terme "bootstrap" se réfère à ce processus de lecture et de remplacement du premier programme de démarrage sur lui-même, en quelque sorte "se redressant" avec les fonctionnalités supplémentaires du deuxième programme de démarrage.

Murthy KVM
la source
-3

En tant qu'humble débutant dans le monde de la programmation, et en feuilletant toutes les réponses ici après avoir vu ce mot utilisé beaucoup de manières apparemment légèrement différentes à différents endroits, j'ai trouvé la lecture de la page Wikipedia sur Bootstrapping (duh! Je n'y ai pas pensé soit au début) est très instructif pour comprendre les différences d'utilisation de ce mot. Serait-ce possible ...... en de très rares occasions ...... Wikipedia pourrait même avoir de meilleures explications de certains termes que .... (expurgé)? Vont-ils apporter des points de rep sur Wikipedia?

Pour moi, il semble que toutes les significations aient quelque chose à voir: commencer avec quelque chose d'aussi simple que possible Thing1, rendre quelque chose d'un peu plus complexe avec cette Thing2, et maintenant vous pouvez utiliser Thing2 pour effectuer une sorte de tâches plus efficacement et plus rapidement que vous ne le pourriez. à l'origine avec Thing1. Répétez ensuite de Thing2 à Thing 3 à l'infini ...

Je le vois comme étroitement lié à la fois à l'évolution biologique et aux `` couches d'abstraction '' (les débutants comme moi voient, ahem, Wikipedia, toux) - l'évolution des ordinateurs des années 40 avec commutateurs, code machine, assemblage, C, Python, IA que vous pouvez donner toutes sortes d'instructions complexes à aimer "faire le dîner% 4 ^% à mes exigences par défaut & ^ $% et nettoyer le sol que vous% $ £" @: ~ "en argot ivre anglais ou dialecte tribal d'Amazon sans eux 'levant une exception '(pour les débutants encore une fois ... vous l'avez deviné) - raté beaucoup de liens là-bas en raison d'une simple ignorance.

Ensuite, dans certaines significations logicielles spécifiques: Signification1: Thing1 est utilisé pour charger la dernière version de Thing2 (car bien sûr Thing2 sera plus grand que Thing1, tout comme Thing3 sera plus grand que Thing2).

Signification2: Thing1 est une langue de niveau inférieur (plus proche de 1001011100 .... 011001 que print ("Hello", user.name)) utilisée pour écrire un peu de la langue supérieure de Thing2, alors ce petit morceau de Thing2 est utilisé pour étendre Thing2 lui-même du niveau de vocabulaire bébé au niveau de vocabulaire adulte (Thing2 commence à être traité, ou à utiliser le terme technique correct `` compilé '') par la version bébé de lui-même (c'est un bébé intelligent!), tandis que la version bébé de Thing2 lui-même ne peut bien sûr être compilé que par Thing1, car il ne peut pas exister avant qu'il existe, duh!), puis la version enfant de Thing2 compile la version Surly Teenager de Thing2, à quel point la communauté de programmation décide si les `` problèmes '' de Surly Teenager ( terme logiciel et terme métaphore!) valent la peine de passer suffisamment de temps à être résolus pour être acceptés à long terme,ou de les abandonner (je ne sais pas où prendre l'analogie ici).

Si oui, Thing2 s'est «bootstrapé» lui-même (peut-être plusieurs fois) de la petite enfance à l'âge adulte: «l'enfant est le père de l'homme» (Wordsworth, suggère de ne pas chercher la citation ou l'auteur sur Stack Overflow) .

Will Croxford
la source