O que é bootstrapping?

636

Eu continuo vendo o "bootstrapping" mencionado nas discussões sobre desenvolvimento de aplicativos. Parece amplo e importante, mas ainda não encontrei uma explicação ruim sobre o que realmente é o bootstrap; ao contrário, parece que todo mundo deveria saber o que isso significa. Eu não, no entanto. Pelo que pude imaginar, tem algo a ver com as tarefas de inicialização exigidas de um aplicativo após o lançamento, mas posso estar completamente errado sobre isso. Alguém pode me ajudar a entender essa idéia?

Alex Basson
fonte
8
Segundo a Wikipedia, existem quatro usos da palavra "bootstrapping" no que diz respeito à computação - en.wikipedia.org/wiki/Bootstrapping#Computing
Thomas Owens
1
Acabei de atualizar o post da HeDinges com isso. Eu estava procurando esclarecimentos sobre que forma de inicialização Alex estava olhando.
9338 Thomas Owens
No desenvolvimento de software, refere-se ao desenvolvimento de ambientes de programação sucessivamente mais complexos e mais rápidos.
Sorte
No desenvolvimento de software .NET, meu entendimento é que ele se refere à configuração do ambiente em que o aplicativo será executado, como qualquer serviço que precise ser registrado ou carregado.
Neo

Respostas:

318

"Bootstrapping" vem do termo "elevando-se por suas próprias instruções". Isso você pode obter da Wikipedia .

Na computação, um carregador de autoinicialização é o primeiro código que é executado quando uma máquina é iniciada e é responsável por carregar o restante do sistema operacional. Nos computadores modernos, ele é armazenado na ROM, mas eu me lembro do processo de inicialização no PDP-11, onde você cutucava bits através dos comutadores do painel frontal para carregar um segmento de disco específico na memória e depois executá-lo. Escusado será dizer que o carregador de bootstrap é normalmente bem pequeno.

"Bootstrapping" também é usado como um termo para construir um sistema usando-se - ou mais corretamente, uma versão anterior. Por exemplo, o ANTLR versão 3 é gravado usando um analisador desenvolvido no ANTLR versão 2.


fonte
8
Uau, eu quase tinha esquecido os switches do painel frontal nos PDPs. Obrigado pelas memórias !!
10119 Jeff Hornby
7
Corrija-me se eu estiver enganado. Embora essa resposta explique detalhes técnicos sobre o que pode ser a inicialização, ela nunca respondeu à pergunta original dentro do contexto da pergunta.
jayscript
5
@ jayscript - Como você escolheria responder a esta pergunta? É uma expressão idiomática, e expressões idiomáticas são tipicamente bem compreendidas pelo grupo social que as usa e incompreensíveis fora dela. Tentei responder pelo exemplo, que acredito ser uma das poucas maneiras de tentar traduzir o idioma.
3
@kdgregory Não seria capaz de responder a essa pergunta, pois vim aqui em busca de respostas. Especulo que a própria palavra bootstrapping é uma metáfora para vários conceitos técnicos diferentes que são pouco relacionados, que podem ser a fonte de confusão.
jayscript
2
PDP 11 ?! Eu não tinha percebido que tínhamos gente velha aqui. : P
John Red
255

Um exemplo de inicialização está em algumas estruturas da web. Você chama index.php (o bootstrapper) e, em seguida, ele carrega os auxiliares da estrutura, modelos, configuração e, em seguida, carrega o controlador e passa o controle para ele.

Como você pode ver, é um arquivo simples que inicia um grande processo.

ryeguy
fonte
50
Em termos de desenvolvimento web (que foi o contexto da pergunta original), acho que essa é a melhor resposta.
cartbeforehorse
Parece muito relacionada com Laravel, mas Laravel ainda não estava lá em 2009.
LppEdd
@Wajdan Ali Não, esta não deve ser a resposta aceita. Essa é uma visão microscópica de um novo uso do termo bootstrapping, que alguns argumentariam ser realmente um uso incorreto de um termo muito anterior. "Bootstrap" refere-se a puxar-se pelos seus bootstraps, ou seja, usar o poder de algo para se alavancar. É a origem do termo "para inicializar o seu computador". O uso atual do pop no desenvolvimento da web não é o único (ou o original) uso da palavra. Muitas outras respostas abordam isso adequadamente.
Kallaste #
3
@ Kalaste, tudo bem, mas esta é a resposta que eu procurava e, com base no contexto da pergunta original ("desenvolvimento de aplicativos"), parece ser a resposta mais apropriada, como já foi apontado.
bynary
@ aaron.bynum, não, a resposta dada se aplica às estruturas de desenvolvimento da Web e, definitivamente, não ao desenvolvimento de aplicativos. A resposta é enganosa e falha, porque se baseia em um mal-entendido comum sobre o que realmente é o bootstrap e de onde veio. Está apenas espalhando desinformação. Se é isso que você veio procurar aqui, tudo bem, mas o SO como um todo valoriza as informações corretas. Assim meu comentário.
Kallaste
51

Veja no artigo da Wikipedia sobre bootstrapping .

Há uma seção e links explicando o que isso significa em computação . Possui quatro usos diferentes no campo.

Aqui estão algumas citações, mas para uma explicação mais aprofundada e significados alternativos, consulte os links acima.

"... é uma técnica pela qual um simples programa de computador ativa um sistema mais complicado de programas."

"Um uso diferente do termo bootstrapping é usar um compilador para se compilar, primeiro escrevendo uma pequena parte de um compilador de uma nova linguagem de programação em uma linguagem existente para compilar mais programas do novo compilador escritos na nova linguagem".

HeDinges
fonte
6
Você poderia citar ou parafrasear para que os leitores não precisem percorrer vários sites para obter sua resposta?
Kurt W. Leucht
5
"Indústria de software, o: negócio único de vender mercadorias abaixo do padrão legalmente e cobrar por suas atualizações."
Stein Åsmul 19/03/14
Eu estava procurando uma resposta Bootstrapping in Compiler . Isso foi útil.
Siraj Alam
49

O termo "inicialização" geralmente se aplica a uma situação em que um sistema depende de si próprio para iniciar, uma espécie de problema de galinha e ovo.

Por exemplo:

  • Como você compila um compilador C escrito em C?
  • Como você inicia um processo de inicialização do sistema operacional se ainda não o possui?
  • Como você inicia um sistema distribuído (ponto a ponto) em que os clientes dependem de seus pares atualmente conhecidos para descobrir novos pares no sistema?

Nesse caso, bootstrapping refere-se a uma maneira de quebrar a dependência circular, geralmente com a ajuda de uma entidade externa, por exemplo

  • Você pode usar outro compilador C para compilar (autoinicializar) seu próprio compilador e, em seguida, pode usá-lo para se recompilar
  • Você usa um trecho de código separado que configura o processo inicial sem depender de nenhuma função fornecida pelo sistema operacional
  • Você usa uma lista codificada de pares iniciais ou um URL de rastreador codificado que fornece a lista de pares

etc.

Ivan Poliakov
fonte
4
Isso realmente chega ao cerne da questão. Onde as outras duas respostas, perca completamente.
Arturo Hernandez
1
Eu sinto que essa explicação foi a mais relevante para o desenvolvimento de software em geral. Realmente trouxe o conceito para mim
Vance Palacio
24

No contexto do desenvolvimento de aplicativos, o "bootstrapping" geralmente aparece quando se fala de software modular e / ou atualizável automaticamente.

Em vez de o usuário baixar o aplicativo inteiro, incluindo recursos que ele não precisa, e baixar novamente e atualizá-lo manualmente sempre que houver uma atualização, o usuário baixa e inicia apenas um pequeno executável "bootstrap", que, por sua vez, baixa e instala aqueles partes do aplicativo que o usuário precisa. Além disso, o componente de auto-inicialização é capaz de procurar atualizações e instalá-las cada vez que é iniciado.

Michael Borgwardt
fonte
4
Eu nunca ouvi o termo “bootstrapping” usado nesse contexto específico.
Bombe
Comumente usado em relação à aplicações PHP (por exemplo, usando Composer para alcançar este objetivo)
AturSams
15

Alex, é praticamente o que o seu computador faz quando é inicializado. ('Inicializando' um computador na verdade vem da palavra inicialização)

Inicialmente, o pequeno programa em seu BIOS é executado. Ele contém código de máquina suficiente para carregar e executar um programa maior e mais complexo.

Esse segundo programa provavelmente é algo como NTLDR (no Windows) ou LILO (no Linux), que executa e pode carregar e executar o restante do sistema operacional.

davewasthere
fonte
2
Embora eu tenha lido todas as respostas (que se expandiram bem no termo e votei em algumas), essa comparação simples de "inicialização" ou "inicialização" me deu a melhor motivação para ler todas as outras para conectar os pontos. Srsly, foi como explicar um tópico complexo para uma criança de 5 anos e eles entenderam. Obrigado.
precisa
14

Para completar, também é um método bastante importante (e relativamente novo) nas estatísticas que usa reamostragem / simulação para inferir propriedades da população de uma amostra. Ele possui seu próprio artigo da Wikipedia sobre bootstrapping (estatísticas) .

Dirk Eddelbuettel
fonte
1
Relativamente novo? Fazia parte da minha formação em estatística há pelo menos 15 anos.
Toon Krijthe 10/08/09
6
Foi por isso que disse 'relativamente': os artigos iniciais de Efron são do início dos anos 80, em vez de dizer o começo da literatura de robustez dos anos 60.
Dirk Eddelbuettel
4

Inicializar o significado do dicionário é inicializar com recursos mínimos. No contexto de um sistema operacional, o sistema operacional deve ser capaz de carregar rapidamente assim que o POST (Power On Self Test) determinar que é seguro ativar a CPU. O código da cinta de inicialização será executado a partir do BIOS. BIOS é uma ROM de tamanho pequeno. Geralmente, é uma instrução de salto para o conjunto de instruções que carregará o sistema operacional na RAM. O destino do salto é o setor de inicialização no disco rígido. Depois que o programa da bios verifica, é um setor de inicialização válido que contém o endereço inicial do sistema operacional armazenado, ou seja, se é um MBR (Master Boot Record) válido ou não. Se for um MBR válido, o sistema operacional será copiado para a memória (RAM) de lá no sistema operacional e cuidará do gerenciamento de processos e memória.

achoora
fonte
2

IMHO não há uma explicação melhor do que o fato de como foi escrito o primeiro compilador?

Atualmente, o carregamento do sistema operacional é o processo mais comum conhecido como Bootstrapping

Ivanzinho
fonte
O link que você deu na sua resposta foi realmente útil.
Siraj Alam
2

O bootstrapping tem ainda outro significado no contexto do aprendizado por reforço que pode ser útil para os desenvolvedores, além de seu uso no desenvolvimento de software (a maioria das respostas aqui, por exemplo, pelo kdgregory ) e seu uso nas estatísticas, conforme discutido por Dirk Eddelbuettel .

De Sutton e Barto :

Widrow, Gupta e Maitra (1973) modificaram o algoritmo Least-Mean-Square (LMS) de Widrow e Hoff (1960) para produzir uma regra de aprendizado de reforço que poderia aprender com sinais de sucesso e falha em vez de com exemplos de treinamento. Eles chamaram essa forma de aprendizagem de " adaptação seletiva de inicialização " e a descreveram como "aprendendo com um crítico" em vez de "aprendendo com um professor". Eles analisaram essa regra e mostraram como ela poderia aprender a jogar blackjack. Essa foi uma incursão isolada no aprendizado por reforço por Widrow, cujas contribuições para o aprendizado supervisionado foram muito mais influentes.

O livro descreve vários algoritmos de reforço nos quais o valor-alvo é baseado em uma aproximação anterior como métodos de inicialização:

Finalmente, notamos uma última propriedade especial dos métodos DP [Dynamic Programming]. Todos eles atualizam estimativas dos valores dos estados com base nas estimativas dos valores dos estados sucessores. Ou seja, eles atualizam as estimativas com base em outras estimativas. Chamamos essa idéia geral de inicialização . Muitos métodos de aprendizado por reforço executam bootstrapping, mesmo aqueles que não exigem, como o DP exige, um modelo completo e preciso do ambiente.

Observe que isso difere da agregação de bootstrap e da explosão de inteligência mencionada na página da wikipedia sobre bootstrapping.

Scipio
fonte
1

Em termos de uso do popular Bootstrap do Twitter, sinto que esse tipo de bootstrap é a ação de integrar um componente modular a um aplicativo da Web, sem que o aplicativo da Web precise reconhecer o componente modular até que ele precise ou faça referência a ele .

O desenvolvedor pode integrar perfeitamente uma cópia padrão do tema CSS Twitter Bootstrap simplesmente carregando (fazendo referência) no aplicativo Web. Vuola! Pode ser necessário substituir algumas dessas alterações, mas você pode fazê-lo de forma que o recurso / componente seja intocado e completamente reutilizável.

Esse mesmo conceito é como os Web Devs implementam APIs jQuery e assim por diante, mas não é realmente expresso pelos Devs como bootstrapping por si só. O que ele faz é melhorar a flexibilidade e a reutilização, permitindo que o isolamento de diferentes componentes / recursos de um aplicativo resida livremente no mesmo servidor / s ou possivelmente em uma CDN.

NOTA: Na computação de inicialização, o MBR e no UNIX requerem um gerenciador ou gerenciador de inicialização especial, um pequeno programa em ROM que carrega o sistema operacional na RAM. Se você pensar bem, o mesmo conceito ocorre na ação do carregador de inicialização, verificando o MBR e carregando o sistema operacional com base nesta tabela, que ocorre sem que o sistema tenha alguma idéia de que isso ocorre.

yardpenalty.com
fonte
0

Eu pertenço à geração que ativou os switches para entrar em um programa de inicialização. No início dos anos 80, trabalhei em um microcomputador chamado Micro-78, desenvolvido pela Electronics Corporation of India Ltd (ECIL). Era uma espécie de clone do Altair 8800. Lembro-me claramente do que acontece quando um pequeno programa de inicialização é iniciado usando as chaves de alternância e executado pressionando um botão. O programa lê um segundo programa de inicialização contido na 1ª faixa do disquete e o sobrescreve de maneira que o segundo programa de inicialização comece a executar para carregar o sistema operacional do disco. Eu acho que o termo "bootstrap" se refere a esse processo do primeiro programa de inicialização, que lê e sobrescreve o segundo programa de inicialização, de uma maneira "se elevando" com a funcionalidade adicional do segundo programa de inicialização.

Murthy KVM
fonte
-3

Como um novato humilde no mundo da programação, e folheando todas as respostas aqui depois de ver essa palavra ser usada de maneiras aparentemente ligeiramente diferentes em lugares diferentes, achei a leitura da página da Wikipedia no Bootstrapping (duh! Não pensei em seja a princípio) é muito informativo para entender as diferenças no uso dessa palavra. Poderia ser ...... em ocasiões extremamente raras ...... A Wikipedia pode até ter melhores explicações para certos termos do que .... (editada)? Eles vão trazer pontos de representantes na Wikipedia?

Para mim, parece que todos os significados têm a ver com: começar com o mais simples possível Thing1, tornar algo um pouco mais complexo com o Thing2, e agora você pode usar o Thing2 para executar tarefas de maneira mais eficiente e rápida do que você poderia originalmente com Thing1. Em seguida, repita de Thing2 para Thing 3 ad infinitum ...

Eu o vejo intimamente conectado à evolução biológica e às 'Camadas de Abstração' (iniciantes como eu, ahem, Wikipedia, tosse) - a evolução dos computadores da década de 1940 com switches, código de máquina, Assembly, C, Python, AIs que você pode dar todos os tipos de instruções complexas para gostar de "fazer o jantar% 4 ^% para os meus requisitos padrão & ^ $% e limpar o chão com você% $ £" @: ~ "em gíria bêbada ou dialeto tribal da Amazônia ou inglês sem que eles levantem uma exceção '(para iniciantes novamente ... você adivinhou) - perdeu muitos links por causa da simples ignorância.

Então, em certos significados específicos de software: Significado1: O Thing1 é usado para carregar a versão mais recente do Thing2 (porque é claro que o Thing2 será maior que o Thing1, assim como o Thing3 será maior que o Thing2).

Significado2: Thing1 é um idioma de nível inferior (mais próximo de 1001011100 .... 011001 do que print ("Hello", nome de usuário))) usado para escrever um pouco do idioma superior do Thing2, então esse pouco do Thing2 é usado para expandir o Thing2 em si do nível de vocabulário do bebê para o nível de vocabulário do adulto (o Thing2 começa a ser processado, ou para usar o termo técnico correto 'compilado', pela versão do bebê em si (é um bebê inteligente!), enquanto a versão do bebê do Thing2 por si só, é claro, só poderia ser compilado pelo Thing1, porque ele não pode existir antes de existir, certo!), então a versão filho do Thing2 compila a versão Surly Teenager do Thing2, quando a comunidade de programação decide se os 'problemas' do Surly Teenager ( software termo e metáfora!) valem a pena gastar tempo suficiente para serem aceitos a longo prazo,ou abandoná-los (não tenho certeza para onde levar a analogia aqui).

Se sim, então o Thing2 se autodestruiu (possivelmente algumas vezes) desde a infância até a idade adulta: "a criança é o pai do homem" (Wordsworth, sugiro que não tente procurar a citação ou o autor em Stack Overflow) .

Will Croxford
fonte