语言规范是如何创建的

我想问一下,java是用什么写的,结果在stackexchange上找到了一个答案,说, 你不用语言写语言,它是一个规范,但是JDK是用C写的

现在,我的问题是,如果 JDK 是用 C 编写的,那么 Java 是否基本上是 C 语言的一种不同形式,例如扩展或其他东西,添加了更多功能?这个规范是如何创建的,这三件事之间的关系是什么:

  • 解释规范的工具(如 JDK)

  • 规范本身

  • 创建工具所用的语言。


芜湖不芜
浏览 85回答 1
1回答

天涯尽头无女友

我认为您误解了一些事情,所以让我们先了解基础知识:计算机程序只不过是一组由处理器读取然后执行的指令。一个接一个执行的任务列表。Java 使用称为 Java 运行时环境 (JRE) 的东西。JRE 有点(不完全是)虚拟处理器,它有自己的指令集,称为 java 字节码。这个“虚拟处理器”在您的操作系统内部运行。Java 运行时环境是用某种语言编写的。Sun JRE 是用 C 语言编写的。C 代码又被编译成您的真实处理器的机器代码(您的处理器可以理解的代码)。Java被编译成java字节码。所以回答你的问题:规范只不过是对java编程语言应该如何表现以及它看起来像什么的描述。基本上是一个普通的文本文档,你可以用类似 word 的东西来写。有了这个规范,程序员就可以构建一个编译器。编译器是一个像这样更改 java 代码的程序:for (int i = 2; i < 1000; i++) {&nbsp; &nbsp; for (int j = 2; j < i; j++) {&nbsp; &nbsp; &nbsp; &nbsp; if (i % j == 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue outer;&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println (i);}进入看起来像这样的字节码0:&nbsp; &nbsp;iconst_21:&nbsp; &nbsp;istore_12:&nbsp; &nbsp;iload_13:&nbsp; &nbsp;sipush&nbsp; 10006:&nbsp; &nbsp;if_icmpge&nbsp; &nbsp; &nbsp; &nbsp;449:&nbsp; &nbsp;iconst_210:&nbsp; istore_211:&nbsp; iload_212:&nbsp; iload_113:&nbsp; if_icmpge&nbsp; &nbsp; &nbsp; &nbsp;3116:&nbsp; iload_117:&nbsp; iload_218:&nbsp; irem19:&nbsp; ifne&nbsp; &nbsp; 2522:&nbsp; goto&nbsp; &nbsp; 3825:&nbsp; iinc&nbsp; &nbsp; 2, 128:&nbsp; goto&nbsp; &nbsp; 1131:&nbsp; getstatic&nbsp; &nbsp; &nbsp; &nbsp;#84; // Field java/lang/System.out:Ljava/io/PrintStream;34:&nbsp; iload_135:&nbsp; invokevirtual&nbsp; &nbsp;#85; // Method java/io/PrintStream.println:(I)V38:&nbsp; iinc&nbsp; &nbsp; 1, 141:&nbsp; goto&nbsp; &nbsp; 244:&nbsp; return执行此操作的编译器程序可以用任何语言编写,但建议将其编写为 C++ 等低级语言,以使编译过程更快。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java