设为首页收藏本站

外链吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 495|回复: 5

编编程软件的软件是用什么编的?

[复制链接]

20

主题

120

帖子

170

积分

丨丶英勇青铜侠客

Rank: 1

UID
3543
金钱
50
在线时间
0 小时
注册时间
2019-10-2
发表于 2020-1-15 06:58:06 | 显示全部楼层 |阅读模式
我是外行,大家别拍我...感觉这问题好像可以一路追溯上去...那最根本的计算机语言是啥呢?
回复

使用道具 举报

20

主题

117

帖子

167

积分

丨丶英勇青铜侠客

Rank: 1

UID
6725
金钱
50
在线时间
0 小时
注册时间
2019-10-5
发表于 2020-1-15 06:58:15 | 显示全部楼层
这就像一个“先有蛋,还是先有鸡”的问题

语言晚期版本的编译器可能是用他的早期版本的编译器编译的
而一种语言的第一个编译器,是另外一种语言的编译器编译得到的
而第一个语言的编译器,是由纸带打孔实现的
回复

使用道具 举报

13

主题

122

帖子

158

积分

丨丶英勇青铜侠客

Rank: 1

UID
7917
金钱
36
在线时间
0 小时
注册时间
2019-10-6
发表于 2020-1-15 06:58:20 | 显示全部楼层
受邀来答,先简单写一下自己的观点吧。

最根本的一定是机器语言/汇编语言,这种语言是cpu强相关的,是直接指挥cpu进行运算的接口。
但是现在大多数的编译器应该都是c/c++写的吧,因为真要每个语言都从机器语言写起来肯定是很累的。

另外其实从一般编译器的实现来说,是要分成两个部分的,一个是编译器本身,一个是编译器生成的“机器码”(或者更加通用的说法是目标语言)。而且这个还要看这个语言是不是有执行器,如果有执行器的话只要对应到执行器的api就可以了。

要说执行器的范例的话,最有名的应该就是jvm了,各种基于jvm的语言都不需要最终把代码转换成为机器语言,只要编译为.class文件就可以了。这些.class文件就可以看成是对jvm的api的调用。

而无执行器的编译语言则需要生成机器语言/汇编语言了,但是这也完全不意味编译器需要用汇编语言来写。比如我已经有一个旧版本的c++语言编译器了,那么再开发新版本的c++或者其他语言编译器的时候,我就可以直接用c++来写逻辑部分,只要最后输出为汇编语言的文件就可以了。

比如我最终需要将一行代码翻译称为mov a b,我的c++代码有可能是如下这个样子(假定cout直接输出到汇编语言的文件中)。
if (true == moveflag){
    cout << "mov a b"
}

希望可以解答题主的疑问,如果还有其他问题可以交流
回复

使用道具 举报

21

主题

127

帖子

179

积分

丨丶英勇青铜侠客

Rank: 1

UID
1072
金钱
52
在线时间
0 小时
注册时间
2019-10-1
发表于 2020-1-15 06:58:28 | 显示全部楼层
用旧的编译器去编写新的版本编译器。
至于旧的怎么来的话。其实就是对于010101这样子的东西抽象成jnp mov add之类的汇编指令。
然后在抽象。
这边有个百科编译原理_互动百科
编译原理这门课挺难的。最根本的语言么。就是001010110,这个用各种各样的逻辑电路时序电路实现的。
回复

使用道具 举报

18

主题

144

帖子

190

积分

丨丶英勇青铜侠客

Rank: 1

UID
1409
金钱
46
在线时间
0 小时
注册时间
2019-10-1
发表于 2020-1-15 06:58:47 | 显示全部楼层
自举(bootstrapping)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

MIP|论坛新贴|论坛标签|网站地图|外链吧

GMT+8, 2020-1-27 11:05 , Processed in 3.213921 second(s), 48 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2019-9-1 WLB.biz

快速回复 返回顶部 返回列表