我的理解是这样的,定义:

翻译 – 使用某种语言编写代码,使用其他语言生成代码.

Compilaton – 翻译成机器代码.

机器代码 – cpu的直接指令.

现在,从docs.oracle.com开始:

javac – Java programming language compiler

编译器…?我认为它是Java转换器,因为它生成的代码不是机器代码.字节码需要解释器(JVM)才能运行,因此它定义为不是机器代码.

从Wikipedia开始:

Java applications are typically compiled to bytecode

同样.根据定义,我会说Java被转换为字节码.互联网上还有更多的例子,我认为存在混淆,或者我只是遗漏了一些东西.

你能澄清一下吗?
翻译和编译有什么区别?

解决方法

这完全是定义的问题,对于“编译”的含义,没有单一的公认定义.在你看来,编译正在将某种语言的源代码转换为原生代码;因此,不生成机器代码的转换过程不应称为“编译”.在我的眼里(显然,javac文档编写者的眼睛也是),它应该.

实际上有很多不同的术语:翻译,编译,反编译,汇编,反汇编等.

就个人而言,我认为在“编译”下对所有这些术语进行分组是有意义的,因为所有这些过程都有很多共同之处:

>他们用一种正式语言将代码转换为另一种正式语言的代码.
>他们尽可能地保留输入代码的语义.
>它们都具有非常相似的设计,前端,后端和中间可能的优化器(learn more about compiler structure here).我已经看到了javac和本地编译器的内脏,它们相对相似.

此外,您对“生成本机代码”的定义存在问题:

>那些可以生成汇编但又不打算将其转换为机器代码的编译器,将其留给外部程序(通常称为“汇编程序”)呢?你会否认他们这个“编译器”的定义,因为最后一个微不足道的比较步骤?
>您如何对“机器代码”进行分类?如果明天a processor which can run Java Bytecode natively is created怎么办?

但这些只是我的意见.我认为,那里最常见的定义是:

>编译正在将更高级别语言的代码转换为更低级别的语言.示例:Java到Java字节码或C到x86机器码.
>反编译正在将较低级别语言的代码转换为较高级别的语言 – 实际上与编译相反.示例:Java字节码到Java.
>翻译或源到源编译正在将某种语言的代码转换为具有可比性“级别”的另一种语言.示例:ARM到x86,或C到Java.当两种语言实际上是同一语言的不同版本(例如Javascript 6到Javascript 5)时,也使用术语“转换器”.
>程序集正在将某些汇编语言中的代码转换为机器代码.
>反汇编既可以是反编译的同义词,也可以是汇编的反义词,具体取决于上下文.

根据这些定义,javac绝对可以被视为编译器.但同样,这些都在定义中:从技术角度来看,许多这些行动都有很多共同之处.

编译与翻译,“编译”Java到字节码?的更多相关文章

  1. ios – Xamarin Ahead-of-Time(AOT)编译器与普通编译器

    我的理解是Xamarin的Ahead-of-Time编译器直接将Xamarin.iOS应用程序编译为本机ARM汇编代码.然而,我没有得到的是为什么它需要被称为“Ahead-of-Time”而不仅仅是一个普通的编译器.Xamarin的AOT编译器和传统编译器之间有什么区别,还是仅仅是一个营销术语?没有.Xamarin在该段中传达的信息是,他们的代码比简单的基于字节码的语言执行得更快.对于iOS和Android,他们都能够在热代码路径上执行本机代码以提高性能.AOT和JIT这两个术语是关于他们如何做到这一点的

  2. IOS键盘默认按钮翻译

    实际上,我只需要在十进制键盘上将“done”/“pref”/“next”按钮翻译成俄语或其他语言.顺便说一下,本地化的应用程序在俄语中.此外,当我改变本地化语言时,所有其他按钮,如“取消”在其他控件被自动翻译.但不是这样.可以不经过定制吗?

  3. .dylib在Debug中链接,在XCode中找不到适用于iPhone的版本

    所以我已经将libxml2.2.dylib库包含在我的iPhoneXCode项目中,以创建一些Xml和XPath解析实用程序.当我编译并运行在模拟器和设备的调试模式时,我没有问题,但是,当我切换到发布模式我得到…

  4. 在编译的iOS应用程序(IPA)中加密内容

    由于IPA结构只是一个压缩文件,包含编译代码媒体内容,如图像&音频,我如何保护内容免受别人的窃取?是否有加密可以添加到IPA?

  5. ios – Swift 4向后兼容性

    一起使用.有没有办法在两个版本的Xcode中使这个工作?Swift4是否应该向后兼容?

  6. Swift与OC混合编译

    SWift调用OC新建swift文件此时系统自动生成-Bridging-Header.h文件并且TARGETS->BuildSettings->Objective-CBridgingHeader(搜索bridg)选项中会自动填入以上头文件的路径在-Bridging-Header.h中#import要调用的OC对象头文件OC调用Swift在OC文件中#import“

  7. Swift教程01-使用switfc终端命令编译运行swift程序

    应公司的要求,要我研究swift语言,然后给大家进行swift技术培训,买了4,5本swift相关的书籍就开始研究了.今天来介绍一下,swift相关的终端的命令.1.首先我们在桌面上建一个swift文件夹用来存放.swift源文件,打开终端输入cd加空格拖拽文件夹到终端(使用命令ls,cd目录也是等效)3.使用vi命令创建一个HelloWorld.swift源文件进入swift文件夹后,然后使用如

  8. [翻译]Swift编程语言——关于Swift

    Swift是一门用于iOS和OSX应用开发的新的编程语言,它以C和Objective-C语言为基础,但没有C语言的兼容性约束。Swift的酝酿花费了数年。Apple为了Swift改进了已有的编译器、调试器和框架的底层。对于Objective-C语言的开发者,Swift是那样的似曾相识。在这个基础之上,Swift引入了许多新的特性并且支持面向对象编程。Swift将现代编程语言的精华和苹果工程文化中的智慧结合在一起。所有这些使得Swift对于开发者和Apple都是一笔对未来可靠的投资。

  9. [翻译]Swift导览

    Swift导览第一次用一门新语言编程,通常要在屏幕上打印“Hello,World”。本章会通过展示如何完成一系列变成任务,来给你的Swift编程之旅开个好头。在Mac电脑上,下载playground,双击连接https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.playground.zip用Xcode将其打开。Swift中的值不会隐式转换类型。

  10. [翻译]Swift编程语言——基础

    基础Swift是一个门用于iOS和OSX开发的新语言。但是,Swift的很多内容同C语言、OC语言相似。Swift提供了C和OC语言的基础类型的自我版本,包括Int表示整型,Double和Float表示浮点数,Bool表示布尔值,String表示文字数据。Swift也广泛使用那种值不能修改的变量。在常见的类型之外,Swift引入了OC语言没有的高级类型,比如元组。从可选类型可以看得出来Swift是一门类型安全的语言。Swift会帮助你明确代码中可以操作的值的类型。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部