编译与翻译,“编译”Java到字节码?
我的理解是这样的,定义:
翻译 – 使用某种语言编写代码,使用其他语言生成代码. Compilaton – 翻译成机器代码. 机器代码 – CPU的直接指令. 现在,从docs.oracle.com开始:
编译器…?我认为它是Java转换器,因为它生成的代码不是机器代码.字节码需要解释器(JVM)才能运行,因此它定义为不是机器代码. 从Wikipedia开始:
同样.根据定义,我会说Java被转换为字节码.互联网上还有更多的例子,我认为存在混淆,或者我只是遗漏了一些东西. 你能澄清一下吗? 解决方法
这完全是定义的问题,对于“编译”的含义,没有单一的公认定义.在你看来,编译正在将某种语言的源代码转换为原生代码;因此,不生成机器代码的转换过程不应称为“编译”.在我的眼里(显然,javac文档编写者的眼睛也是),它应该.
实际上有很多不同的术语:翻译,编译,反编译,汇编,反汇编等. 就个人而言,我认为在“编译”下对所有这些术语进行分组是有意义的,因为所有这些过程都有很多共同之处: >他们用一种正式语言将代码转换为另一种正式语言的代码. 此外,您对“生成本机代码”的定义存在问题: >那些可以生成汇编但又不打算将其转换为机器代码的编译器,将其留给外部程序(通常称为“汇编程序”)呢?你会否认他们这个“编译器”的定义,因为最后一个微不足道的比较步骤? 但这些只是我的意见.我认为,那里最常见的定义是: >编译正在将更高级别语言的代码转换为更低级别的语言.示例:Java到Java字节码或C到x86机器码. 根据这些定义,javac绝对可以被视为编译器.但同样,这些都在定义中:从技术角度来看,许多这些行动都有很多共同之处. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 当jdbc与sqlite3数据库连接时,我该怎么做
- Java安全例外无效的SHA1 Jar文件
- java – 如何取消AsyncRestTemplate HTTP请求,如
- Springboot在IDEA热部署的配置方法
- java – Android Maven没有启动模拟器
- java – 拒绝HostKey:使用gradle ssh插件部署JA
- java – JPA的EntityManager应该是RequestScoped
- java – 为什么时区模式“OOOO”没有显示完整的
- java – 使用JAX-WS更改运行时生成的WSDL中的sch
- java – 为什么10 >> 2 5 >> 2评估为零?