我一直看到在应用程序开发的讨论中提到的"bootstrapping".它似乎既广泛又重要,但我还没有看到一个关于实际引导的错误解释; 相反,似乎每个人都应该知道这意味着什么.不过,我没有.我可以说,它与启动时应用程序所需的初始化任务有关,但我可能完全错了.任何人都可以帮我理解这个想法吗?
请原谅我的无知.我正在尝试使用PHP并且让我的脚湿透浏览,并且不得不问一个我多年来一直在想的问题:
当你编写一种全新的编程语言时,你会写什么?
对于你们所有的程序员来说,这听起来真的很愚蠢,我对他们非常尊重,但这对我来说是一个令人困惑的鸡蛋和鸡蛋.你是做什么?对自己说今天我要发明一种新语言!然后开火...记事本?是否所有编译器都是基于以前存在的语言构建的,例如一个人打扰一个,可以将所有编程语言设计成一个怪异的分支树,这个树最终在......我不知道,有些旧吗?
凭借我虚弱的智慧,我觉得这很有吸引力......请教育我!
What language is used to build low level languages like c++ and java?
How could you build the first language with no language?
可能重复:
第一个编译器是如何编写的?
这个问题一直困扰着我.要编译一个程序,你需要一个编译器,它也是一种程序,那么编译编译器的是什么?有人告诉我,第一批编译器是用汇编或机器代码编写的.但考虑到这一点,那仍然不是完整的故事.毕竟,如果没有操作系统和驱动程序,机器代码如何从硬盘驱动器转移到CPU?司机必须以某种方式编程.
我知道早期的计算机有开关,允许你翻转开关指示位.我想知道如何从开关跳转到一种让CPU读取机器代码而不需要计算机程序告诉它这样做的方法.
我已经完成了编译器课程并自己制作了一个基础知识,我对第一个编译器仍然存在这种挥之不去的疑问.
从高级别到低级别,我看到运行的代码可以说是C或C++,它可以通过它的编译器转换为相应的汇编语言(比如说gcc).此代码依赖于平台(假设我在intel x86架构上).
现在问题是,硬件如何运行程序集?
我记得从我的计算机组织类中,每个汇编语句都转换为特定的格式(取决于处理器),例如,像mov ax,bx这样的语句被转换为它的操作码,比如0110 101010 101000.假设汇编程序解析我的汇编语言程序中的每个语句都将其转换为机器代码,那么第一个汇编程序是如何编写的?
我和我的朋友正在讨论,并意识到这可能是提出这个问题的最佳地点吗?
一种新语言是如何诞生的?这个新语言必须用一些旧语言OLD编写(例如C++在初始阶段用C语言编写),或者这是如何创建的?而且,如果没有编译器,这种语言NEW如何才能自行运行?那么,必须要有一些编译器吗?谁为它编写编译器?
那么,所有这些如何协同工作,新语言及其编译器,新语言与旧基础语言的关系如何?
C编译器是用C语言编写的,我知道的很多.使用了哪些语言/工具/指令来创建C编译器成为自托管的初始功能?
更新:
我知道引用一种语言是什么,正是这项研究提出了这个问题.我无法在任何地方找到我的问题的答案.
我在这里有一个非常天真的问题,我希望你能纠正我在这里提出的任何错误概念.问题如下:
我在我的机器上安装了ubuntu,现在我用语言编写helloWorld.c程序C.现在,在操作系统上我安装了一个编译器,当我执行我的helloWorld.c程序时,操作系统安排编译器,基本上将我的代码编译成机器代码,最终,我执行.
现在我的内核代码是用C编写的,那么我的机器如何解释该代码呢?说我的内核代码helloWorld.c,现在不需要任何编译器,来编译这段代码.另外,如果我在ROM或其他东西中对编译器进行硬编码,那么它的语言是什么?汇编语言?
如果我已经清楚了解问题,请告诉我.
谢谢.
编辑:通过内核代码我的意思是,操作系统的代码.操作系统代码.我猜它是用C写的吗?
任何人都知道从.c源代码到最终可执行文件的完整操作链.exe?
我已经下载了gcc的源代码,发现它c-parser.y也是用c编写的:
extdef:
fndef
| datadef
| ASM_KEYWORD '(' expr ')' ';'
{ STRIP_NOPS ($3);
if ((TREE_CODE ($3) == ADDR_EXPR
&& TREE_CODE (TREE_OPERAND ($3, 0)) == STRING_CST)
|| TREE_CODE ($3) == STRING_CST)
assemble_asm ($3);
else
error ("argument of `asm' is not a constant string"); }
| extension extdef
{ pedantic = $<itype>1; }
;
Run Code Online (Sandbox Code Playgroud)
所以任何人都知道c的自托管的完整故事?
UPDATE
我知道如何编写一些脚本编译器,其中大部分都依赖于c编译器.
所以我现在问c编译器是如何工作的.