高级语言到机器可执行的机器码,要经过什么过程?

大伯格
  • 371

例如,js java要经过什么过程才会变成机器码。
我想不明白 为什么有那么多语言,是什么导致不同语言做不同事情的

回复
阅读 3.5k
2 个回答
楼下的猫
  • 60
✓ 已被采纳

仅回答问题第一个问题,第二个问题因为涉及语言不多,不做分析。

高级语言分动态语言和静态语言。
动态语言就是解释型语言,拿到code,调用解释器执行即可。比如js。
静态语言就是编译型语言,要先把code经过预处理、编译、链接生成可执行文件。然后运行即可。比如c/c++等。

Java代码要先用javac编译成class文件,然后调用java执行即可。对于热点代码会使用jit把class再编译为二进制。所以Java即算解释型也算编译型吧。
图片描述

我可以大概讲讲V8,V8主要是这么几个过程,构建词法环境,生成抽象语法树,将生成的抽象语法树直接转换为机器码。这里需要说一下,V8是动态生成机器码的,并非经过汇编再有汇生成机器码。V8实际上自带一个用C++实现的“汇编器库”用来动态生成机器码。它提供一组C++ API,调用这个API的函数就可以在内存里生成机器码来。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏