c 语言是基于汇编的,那么这么多年的积累了,能否基于汇编开发一个比 c 更好的语言,或者这些年 汇编和 c 语言之间的 架构是保持升级的吗? 或者还是很多年前的那一套?

2020-12-05 17:29:57 +08:00
 find456789

我了解到,c 语言是基于汇编语言的

当开发出了第一个版本的 c 语言, 接着在第一个版本的 c 上 ,用 c 开发第二个版本的 c, 以此类推

我的理解是,这里面应该会有一些老旧的代码在 c 里(即架构、性能落后的代码)

1 、我想问问,这些年来, 汇编和 c 语言之间的桥梁有保持更新吗? 或者还是很多年前的那一套呢?

2 、 能否基于汇编开发一个比 c 更好的语言? 工作量大吗?有什么参考资料来自学吗?

谢谢

3261 次点击
所在节点    问与答
27 条回复
creedowl
2020-12-05 21:38:12 +08:00
@find456789 简单来说 llvm 是将中间语言编译成机器码用的,c c 艹这些都可以编译到 llvm 用的中间语言,所以想开发一个新语言写个编译器将它编译成中间语言就可以了,具体可以学学编译原理
icegaze
2020-12-05 22:12:21 +08:00
我感觉,
高级语言是面对人的,
低级语言是面对机器的,
中间还差着一个操作系统呢…
汇编可以看作机器码的简易代替写法,
而 C 语言可以看作一种人能理解的伪语言。

不能说 C 语言并不是基于汇编语言的吧…

甚至如果充分理解 cpu 构架和操作系统里的各种驱动的话,也可以直接用 HEX 编辑器来写出一个机器码程序了吧…^_^
find456789
2020-12-05 22:18:30 +08:00
@creedowl

哦 谢谢大哥, 那我用其他语言 比如 js 、go 、python,试试也可以 在 llvm 上 开发一门新语言呀
creedowl
2020-12-05 23:24:46 +08:00
@find456789 #23 理论上是可以的
CEBBCAT
2020-12-05 23:40:49 +08:00
我读了 @creedowl 的回复,然后 Google 了一些关键词,花了半个小时,看了大概四五十个页面后做这个回复:

假如楼主想借由 llvm 开发一门新的语言,那么你的目标是 IR,也就是中间语言,那么结合其他语言自举的经验, 你可以使用任何一门你喜欢的语言实现一个 llvm 前端,用来把你的新语言—我们不妨叫它 X 语言—翻译到 IR,你甚至可以手写出新语言的 IR,我是这样理解的

附上一些可能有帮助的链接,你可以在里面拣选感兴趣的词,去 Google:
https://draveness.me/dsl/
https://blog.csdn.net/yayaayaya123/article/details/83993041
https://segmentfault.com/a/1190000002669213
https://zh.wikipedia.org/wiki/%E4%B8%AD%E9%96%93%E8%AA%9E%E8%A8%80
https://en.wikipedia.org/wiki/Three-address_code
https://blog.csdn.net/BaiHuaXiu123/article/details/89377250
---
看完这些网页后,我想我也可以“指点”一下你的正文了:
今天的 gcc 编译器可以做到不留存“老旧的代码(即架构、性能落后的代码)”,因为 gcc 这个二进制是从它的源码来的,不是一个套娃的关系
find456789
2020-12-06 00:51:40 +08:00
@CEBBCAT

谢谢大哥
whywhywhy
2020-12-06 10:37:18 +08:00
c
c++
c++++( c#)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/732472

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX