我一直看到在应用程序开发讨论中提到的“引导”。它看起来既广泛又重要,但是对于自举实际上是什么,我甚至还没有得到很好的解释。相反,似乎每个人都应该知道它的意思。我不知道 据我所知,它与应用程序启动时所需的初始化任务有关,但是我可能完全错了。谁能帮我理解这个想法?
我一直看到在应用程序开发讨论中提到的“引导”。它看起来既广泛又重要,但是对于自举实际上是什么,我甚至还没有得到很好的解释。相反,似乎每个人都应该知道它的意思。我不知道 据我所知,它与应用程序启动时所需的初始化任务有关,但是我可能完全错了。谁能帮我理解这个想法?
Answers:
“引导”来自术语“用自己的引导程序拉起自己”。你可以从Wikipedia那里得到很多。
在计算中,引导程序加载器是计算机启动时运行的第一段代码,负责加载其余的操作系统。在现代计算机中,它存储在ROM中,但是我想起了PDP-11上的引导过程,在该过程中,您可以通过前面板开关戳一些位,以将特定的磁盘段加载到内存中,然后运行它。不用说,引导加载程序通常很小。
“ Bootstrapping”也用作使用自身(或更正确地说是其前身版本)构建系统的术语。例如,ANTLR版本3是使用ANTLR版本2开发的解析器编写的。
在某些Web框架中有一个引导示例。您调用index.php(引导程序),然后它加载框架帮助程序,模型,配置,然后加载控制器并将控制权转交给它。
如您所见,这是一个启动大型过程的简单文件。
请参阅有关引导的Wikipedia文章。
有一节和链接解释了在计算中的含义。它在该领域有四种不同用途。
这里有一些引号,但是要获得更深入的解释和替代含义,请查阅上面的链接。
“ ...是一种通过简单的计算机程序来激活更复杂的程序系统的技术。”
“引导”一词的另一种用法是使用编译器自行编译,方法是先用现有语言编写一小部分新编程语言的编译器,然后再编译用该新语言编写的新编译器的更多程序。”
术语“自举”通常适用于系统依赖于自身启动的情况,有点像鸡和鸡蛋的问题。
例如:
在那种情况下,自举是指一种打破循环依赖的方法,通常借助于外部实体,例如
等等
在应用程序开发的上下文中,当谈论模块化和/或自动更新的软件时,通常会出现“引导”。
用户只下载并启动一个小的“ bootstrap”可执行文件,然后下载并安装这些应用程序,而不是用户下载整个应用程序(包括他不需要的功能,然后重新下载并在有更新时手动对其进行更新)。用户需要的应用程序部分。此外,引导程序组件能够在每次启动时查找更新并进行安装。
亚历克斯,这几乎是计算机启动时的工作。(“引导”计算机实际上来自引导一词)
最初,BIOS中的小程序运行。它包含足够的机器代码来加载和运行更大,更复杂的程序。
第二个程序可能类似于NTLDR(在Windows中)或LILO(在Linux中),然后执行并能够加载并运行其余的操作系统。
为了完整起见,它也是统计中的一种相当重要(相对较新)的方法,该方法使用重采样/模拟来推断样本的总体属性。它在Wikipedia上有其关于引导程序(统计)的冗长文章。
引导学习在强化学习的上下文中还有另一种含义,除了在软件开发中的使用(大多数答案,例如,由kdgregory提供)以及在Dirk Eddelbuettel讨论的统计中的使用之外,对于开发人员来说可能也是有用的。
从萨顿和巴托出发:
Widrow,Gupta和Maitra(1973)修改了Widrow和Hoff(1960)的最小均方(LMS)算法,以生成强化学习规则,该规则可以从成功和失败信号中学习,而不必从训练示例中学习。他们称这种学习形式为“ 选择性引导适应 ”,并将其描述为“与批评家一起学习”,而不是“与老师一起学习”。他们分析了这个规则,并展示了如何学习二十一点。这是Widrow对强化学习的一次孤立尝试,Widrow对监督学习的贡献更具影响力。
本书描述了各种强化算法,其中目标值基于先前的近似作为自举方法:
最后,我们注意到DP [动态编程]方法的最后一个特殊属性。它们都基于后继状态值的估计来更新状态值的估计。也就是说,他们根据其他估算值更新估算值。我们称这种一般想法为自举。许多强化学习方法执行自举,甚至不需要DP所要求的完整且准确的环境模型。
请注意,这与引导过程中维基百科页面上提到的引导程序聚合和智能爆炸有所不同。
就使用流行的Twitter Bootstrap而言,我觉得这种类型的引导是将模块化组件集成到Web应用程序中的操作,而Web应用程序甚至不必承认模块化组件的存在,直到需要它或引用它为止。 。
开发人员只需将其加载(引用)到Web应用程序中,即可无缝集成CSS Twitter Bootstrap主题的默认副本。哇!然后,您可能需要覆盖其中的某些更改,但是您可以采用这样的方法,使资源/组件保持不变并且可以完全重用。
Web Devs如何实现jQuery API等是相同的概念,但是Devs并没有真正将其表达为引导本身。它的作用是提高灵活性和可重用性,同时允许隔离应用程序的不同组件/资源,使其可以自由地驻留在同一台服务器或CDN上。
注意:在使用MBR进行计算引导时,在UNIX中,它需要特殊的引导程序或管理器,它是ROM中的一个小程序,可以将OS加载到RAM中。如果您考虑一下,引导加载程序将检查此MBR并基于此表加载OS,这是在操作系统不知道会发生这种情况的情况下发生的。
我属于一代人,他们拨动开关进入启动程序。在1980年代初期,我研究了由印度电子公司(ECIL)开发的微型计算机Micro-78。它是Altair 8800的一种复制品。我清楚地记得使用拨动开关输入一个小的启动程序并按一个按钮执行时会发生什么情况。该程序读取软盘的第一磁道中包含的第二个引导程序,并以使第二个引导程序开始执行以加载磁盘操作系统的方式对其进行覆盖。我认为术语“引导程序”是指第一个引导程序在自身上读取并覆盖第二个引导程序的过程,以“拉起自身”的方式使用第二个引导程序的附加功能。
作为编程界的谦虚初学者,在看到这个词在不同地方以明显不同的方式大量使用后,我翻阅了这里的所有答案,我发现阅读了有关Bootstrapping的Wikipedia页面(du!我没想到(无论是一开始)还是非常有帮助的,以了解该词在用法上的差异。难道是……在极少数情况下……维基百科对某些术语的解释可能比……(已编辑)更好?他们会在Wikipedia上带来代表点吗?
对我而言,似乎所有含义都与之相关:从尽可能简单的Thing1开始,使该Thing2变得更复杂,现在您可以使用Thing2比您可以更高效,更快速地执行某种任务最初与Thing1。然后无限重复从Thing2到Thing 3 ...
我认为它与生物进化和“抽象层”紧密相连(像我这样的新手,ahem,Wikipedia,咳嗽)-1940年代带有开关,机器代码,汇编,C,Python和AI的计算机的进化各种复杂的说明,例如用醉酒语英语或亚马逊部落方言“使%4 ^%晚餐达到我的默认&^ $%要求并清洁地板%%£” @:〜“,而不会引起异常'(再次为新手...您猜对了)-由于简单的无知而错过了很多链接。
然后在某些特定的软件含义中:含义1:Thing1用于加载Thing2的最新版本(因为Thing2当然比Thing1大,就像Thing3比Thing2大一样)。
含义2:Thing1是一种较低级的语言(比print(“ Hello,”,user.name)更接近于1001011100 .... 011001),用于编写Thing2的高级语言,那么Thing2的这一点是用于将Thing2本身从婴儿词汇水平扩展到成人词汇水平(Thing2本身的婴儿版本(这是一个聪明的婴儿!)开始被处理,或使用正确的技术术语“已编译”),而Thing2的婴儿版本本身当然只能由Thing1编译,因为它在存在之前就不存在,对吧!),然后Thing2的子版本编译Thing2的Surly Junior版本,这时编程社区决定Surly Junior的“问题”(软件术语和隐喻术语!)值得花足够的时间解决,以便长期接受,或抛弃它们(不确定在这里进行类比)。
如果是的话,那么Thing2从婴儿期到成年期已经(可能几次)“陷入僵局”:“孩子是男人的父亲”(华兹华斯,建议不要尝试使用引号或Stack Overflow上的作者) 。