编译是将抽象的一个层次转换为较低层次的过程。同时,transpiling是一个从一个抽象级别转换到另一个抽象级别的过程,类似于将java代码转换为Kotlin/python。这就是我对这两个进程的理解。请有人解释一下java代码和jvm字节码。我的推论正确吗?
发布于 2020-05-26 06:00:41
从人类语言到机器语言的高级/低级抽象
编译器将从较高级别语言转换为较低级别语言。更高/更低是指机器语言的抽象程度。这将包括Java语言到字节码。字节码更接近机器语言,更远离人类语言。
转换程序在具有类似抽象级别的语言之间进行转换。从EcmaScript 6转换到EcmaScript 5以与旧的web浏览器兼容将是一个例子。从Java语言到Kotlin的转换将是另一种,或者将斯威夫特转换为Kotlin。
见维基百科:编译器
中间表示
特别是用Java编译的字节码语言和通过LLVM编译的bitcode (来自Swift,生锈被称为中间代表(IR) )。IR是为进一步处理、优化和翻译而设计的,在其成为机器语言的过程中。
发布于 2020-05-26 06:02:23
从java代码到jvm字节代码的转换会考虑编译或转换吗?
根据你在问题中给出的定义,它是在编译。字节码指令集的抽象级别低于Java源代码。
尽管如此,编译和转译之间的这种区别有点模糊,因为“抽象级别”没有明确的定义。
例如,有人可能会说,由于C有时被称为“高级汇编语言”,C++处于比C更高的抽象级别,这是否使C++ -> C转换编译?或者,它们是否处于相同的抽象级别,从而使C++ -> C转换转换溢出?这并不完全是学术性的,因为C++语言的第一个实现确实将C++转换为C源代码.IIRC。
发布于 2020-05-26 05:50:59
它的工作原理如下:
首先,java源代码由名为“Compiler”的翻译程序转换成字节码文件。字节码文件获得具有.class扩展的名称,javac (java编译器)是编译.java文件的工具。 然后,
java是一种调用Java解释器“JVM”的工具。现在,JVM的工作开始了。当JVM调用时,
您可以在这里读到同样的内容:https://www.quora.com/How-does-the-Java-interpreter-JVM-convert-bytecode-into-machine-code
https://stackoverflow.com/questions/62015417
复制相似问题