什么是自举?

问题描述 投票:584回答:13

我一直看到在应用程序开发的讨论中提到的“bootstrapping”。它似乎既广泛又重要,但我还没有看到一个关于实际引导的错误解释;相反,似乎每个人都应该知道这意味着什么。不过,我没有。我可以说,它与启动时应用程序所需的初始化任务有关,但我可能完全错了。任何人都可以帮我理解这个想法吗?

bootstrapping
13个回答
294
投票

“Bootstrapping”来自于“通过自己的引导来提升自己”这个术语。你可以从Wikipedia得到多少。

在计算中,引导加载程序是机器启动时运行的第一段代码,负责加载操作系统的其余部分。在现代计算机中,它存储在ROM中,但我记得PDP-11上的引导过程,您可以通过前面板开关戳位以将特定磁盘段加载到内存中,然后运行它。不用说,引导加载程序通常非常小。

“Bootstrapping”也被用作使用自身构建系统的术语 - 或者更准确地说,是一个先前版本。例如,ANTLR版本3是使用ANTLR版本2中开发的解析器编写的。


1
投票

就使用流行的Twitter Bootstrap而言,我觉得这种类型的引导是将模块化组件集成到Web应用程序中的行为,而Web应用程序甚至不需要确认模块化组件存在,直到它需要它或引用它为止。

开发人员可以通过简单地将其加载(引用)到Web应用程序中来无缝集成CSS Twitter Bootstrap主题的默认副本。 Vuola!然后,您可能需要覆盖其中的一些更改,但您可以这样做,即资源/组件不受影响且完全可重用。

同样的概念是Web Devs如何实现jQuery API等等,但Devs并没有真正表达为bootstrapping本身。它的作用是提高灵活性和可重用性,同时允许应用程序的不同组件/资源的隔离可以自由地驻留在同一服务器上或可能在CDN上。

注意:在计算引导处理MBR时,在UNIX中它需要一个特殊的引导加载程序或管理器,它是ROM中的一个小程序,它将操作系统加载到RAM中。如果你考虑一下,同样的概念发生在引导加载程序的操作中,检查MBR并基于该表加载操作系统,而OS不会发生这种情况。


1
投票

Bootstrapping在强化学习的背景下具有另一个含义,除了在软件开发中的应用(这里的大多数答案,例如kdgregory)以及Dirk Eddelbuettel讨论的统计学中的使用之外,对于开发人员来说可能是有用的。

来自Sutton and Barto

Widrow,Gupta和Maitra(1973)修改了Widrow和Hoff(1960)的最小均方(LMS)算法,以产生一个强化学习规则,可以从成功和失败信号中学习而不是从训练样例中学习。他们将这种形式称为“选择性自举适应”,并将其描述为“与评论家一起学习”,而不是“与老师一起学习。”他们分析了这一规则,并展示了如何学习如何玩二十一点。这是Widrow对强化学习的孤立尝试,他对监督学习的贡献更具影响力。

本书描述了各种强化算法,其中目标值基于先前的近似值作为引导方法:

最后,我们注意到DP [动态编程]方法的最后一个特殊属性。所有这些都基于对后继状态值的估计来更新状态值的估计。也就是说,他们根据其他估计更新估计数。我们将此概念称为引导。许多强化学习方法执行自举,即使那些不需要,如DP所要求的那样,也需要完整而准确的环境模型。

请注意,这与bootstrap上的wikipedia page上提到的bootstrap聚合和智能爆炸不同。


0
投票

我属于那些翻转开关进入启动程序的一代。在20世纪80年代早期,我研究了由印度电子公司(ECIL)开发的名为Micro-78的微型计算机。这是Altair 8800的一种克隆。我清楚地记得当使用切换开关输入小型启动程序并通过按下按钮执行时会发生什么。程序读取软盘第一个磁道中包含的第二个引导程序,并以第二个引导程序开始执行加载磁盘操作系统的方式覆盖它自身。我认为术语“引导程序”指的是第一个引导程序读取和覆盖第二个引导程序本身的过程,其方式是“利用第二个引导程序的附加功能”“自我提升”。这可能是“引导程序”的原始含义的起源。


-4
投票

作为编程世界中一个不起眼的初学者,在看到这个词在不同的地方使用了很多略显不同的方法之后,点击这里的所有答案,我发现在Bootstrapping上阅读维基百科页面(呃!我没想到它或者首先是非常有用的,以了解这个词的使用差异。难道......在极少数情况下......维基百科甚至可能对某些术语有更好的解释而不是....(编辑)?他们会在维基百科上带来代表点吗?

对我而言,似乎所有意义都与之相关:从尽可能简单的东西开始Thing1,使Thing2稍微复杂一点,现在你可以使用Thing2比你更有效率和快速地完成某些任务最初与Thing1。然后无限重复从Thing2到Thing 3 ......

我认为它与生物进化和'抽象层'密切相关(像我这样的新手,咳嗽,维基百科,咳嗽) - 从1940年开发的计算机与开关,机器代码,汇编,C,Python,AIs的演变你可以给出各种复杂的指示,喜欢“让%4 ^%的晚餐达到我的默认值和^ $%的要求,并清理地板你%$£”@:〜“醉酒俚语英语或亚马逊部落方言没有他们'提出异常'(对于新手再次......你猜对了) - 由于简单的无知而错过了很多链接。

然后在某些特定的软件含义中:含义1:Thing1用于加载Thing2的最新版本(因为当然Thing2将大于Thing1,就像Thing3将大于Thing2一样)。

含义2:Thing1是一种较低级别的语言(比打印(“Hello,”,user.name)更接近1001011100 .... 011001)用于写一点Thing2的高级语言,那么这一点Thing2是用于将Thing2本身从婴儿词汇水平扩展到成人词汇水平(Thing2开始被处理,或使用正确的技术术语'编译',由婴儿版本本身(它是一个聪明的宝宝!),而婴儿版本的Thing2本身当然只能由Thing1编译,因为它在它存在之前不能存在,对吧!),那么Thing2的子版本编译了Thing2的Surly Teenager版本,此时编程社区决定是否Surly Teenager的'问题'(软件术语和隐喻术语!)值得花费足够的时间来解决长期接受,或者放弃它们(不知道在哪里进行类比)。

如果是的话,那么从童年到成年,Thing2本身(可能是几次)“自我引导”:“孩子是男人的父亲”(华兹华斯,建议不要尝试在Stack Overflow上查阅引文或作者) 。


231
投票

引导的一个例子是在一些Web框架中。您调用index.php(引导程序),然后加载框架帮助程序,模型,配置,然后加载控制器并将控制权传递给它。

如您所见,它是一个启动大型进程的简单文件。


51
投票

请参阅关于bootstrapping的维基百科文章。

有一节和链接解释了它在Computing中的含义。它在该领域有四种不同的用途。

以下是一些引用,但有关更深入的解释和其他含义,请参阅上面的链接。

“...是一种简单的计算机程序激活更复杂的程序系统的技术。”

“术语bootstrapping的另一种用法是使用编译器自行编译,首先用现有语言编写新编程语言编译器的一小部分,以编译用新语言编写的新编译器的更多程序。”


33
投票

术语“引导”通常适用于系统依赖于自身启动的情况,即鸡和蛋的问题。

例如:

  • 你如何编译用C编写的C编译器?
  • 如果尚未运行操作系统,如何启动操作系统初始化过程?
  • 如何启动分布式(点对点)系统,客户端依赖于当前已知的对等体来查找系统中的新对等体?

在这种情况下,自举是指一种打破循环依赖的方法,通常借助于外部实体,例如,外部实体。

  • 您可以使用另一个C编译器来编译(引导)您自己的编译器,然后您可以使用它来重新编译自己
  • 您可以使用单独的代码来设置初始过程,而不依赖于操作系统提供的任何功能
  • 您使用硬编码的初始对等列表或提供对等列表的硬编码跟踪器URL

等等


22
投票

在应用程序开发的上下文中,在谈论模块化和/或可自动更新的软件时,通常会出现“引导”。

用户只需下载并启动一个小的“引导程序”可执用户需要的应用程序的一部分。此外,引导程序组件能够在每次启动时查找更新并安装它们。


14
投票

为了完整性,它在统计学中也是一种相当重要(且相对较新)的方法,它使用重采样/模拟来从样本中推断出种群属性。它有自己冗长的Wikipedia article on bootstrapping (statistics)


14
投票

亚历克斯,这几乎是你的电脑在启动时所做的事情。 ('引导'计算机实际上来自bootstrapping这个词)

最初,BIOS中的小程序运行。它包含足够的机器代码来加载和运行更大,更复杂的程序。

第二个程序可能类似于NTLDR(在Windows中)或LILO(在Linux中),然后执行并能够加载,然后运行其余的操作系统。


4
投票

启动捆绑字典意味着以最少的资源启动。在操作系统的上下文中,一旦开机自检(POST)确定可以安全地唤醒CPU,操作系统应该能够快速加载。引导带代码将从BIOS运行。 BIOS是一个小型ROM。通常,它是指令集的跳转指令,它将操作系统加载到RAM。 Jump的目标是硬盘中的Boot扇区。一旦bios程序检查它是一个有效的Boot扇区,它包含存储的OS的起始地址,即它是否是有效的MBR(主引导记录)。如果它是一个有效的MBR,操作系统将从那里复制到内存(RAM),操作系统负责内存和进程管理。


2
投票

恕我直言,没有一个比How was the first compiler written?更好的解释

目前,操作系统加载是最常见的过程,称为Bootstrapping

© www.soinside.com 2019 - 2024. All rights reserved.