j***a翻译编程语言,j***a翻译程序

kodinid 13 0

大家好,今天小编关注到一个比较意思的话题,就是关于java翻译编程语言问题,于是小编就整理了4个相关介绍Java翻译编程语言的解答,让我们一起看看吧。

  1. 如果有一种程序能将java代码自动转换成任何一种计算机与操作系统上的可执行程序,那会发生什么?
  2. 自然语言是怎样互相翻译的,有类似于Java的字节码吗?
  3. Java和c语言有什么不一样?C语言可以编写Unix系统,Java能替代c吗?
  4. Java能不能像C语言不通过JVM虚拟机直接编译成二进制机器码,让计算机直接运行?

如果有一种程序能将JAVA代码自动转换成任何一种计算机操作系统上的可执行程序,那会发生什么

j***a的优势现在已经不是跨平台,是成熟的商业架构

如果有一种工具将j***a翻译成其他更高效率编译型语言,那么J***a的市场份额就不会这么高了。

java翻译编程语言,java翻译程序-第1张图片-安济编程网
图片来源网络,侵删)

微信QQ后台一直更喜欢用C++之类的语言开发,因为对用户量巨大的网络服务,提高效率就是提高收益,如果提高20%的效率,那么就意味着剩下20%服务器,对腾讯、百度这样的大数据量访问的服务一年下来省下来的钱就是数亿元。

如果能将J***A结构翻译成其他语言,那么就会有很多人在不丢弃已有架构的基础上,体验更高的运行效率,慢慢就没有人再用J***A这样的离不开JVM的开发语言了。

Go余元是比J***A具有更高效率的开发语言,但是Go语言和J***A比缺少商业架构的选择,即便喜欢Go的新特性也不会选用,如果有熟悉的架构支撑,那么自然就选择Go语言了。其他语言也是一样。

java翻译编程语言,java翻译程序-第2张图片-安济编程网
(图片来源网络,侵删)

自然语言是怎样互相翻译的,有类似于J***a的字节码吗?

从一种语言A翻译成另外一种语言B,一种比较好的方式确实是首先将A翻译成通用的语言C(如英语)再将语言C翻译成语言A。

通常来说这也是一种可行的方式,也是在小语种间翻译常用的方式!


两种语言互译,在机器学习中是一个典型的序列生成问题,并且生成序列长度输入的序列长度不一致。常用的技术手段是使用Encoder-Decoder方式进行模型训练,例如Seq2Seq和注意力机制都取得了较好的效果

java翻译编程语言,java翻译程序-第3张图片-安济编程网
(图片来源网络,侵删)

模型需要的训练集为两种语言(A和B)的互译文本作为训练集。但是对于两种小语种来说这种训练集往往是难以获得的,所以通常的解决办法为找到一种中间语言C(通常为大语种,如英语),并且找到A和C以及B和C的互译训练集分别进行Encoder-Decoder模型训练,并将两个模型进行叠加以获得A和B的互译模型。

J***a和c语言有什么不一样?C语言可以编写Unix系统,J***a能替代c吗?

J***a不能完全替代C语言。J***a的程序是字节码不是机器码,执行时要通过虚拟机翻译成机器码之后才能运行。而C语言程序在编译之后已经是机器码了,可以直接运行。

J***a是实时编译,用J***a写的操作系统需要有另一个用虚拟机也就是操作系统来启动,这么做没有任何意义。因此,J***a不适合写操作系统。

J***a为什么要用虚拟机才能执行呢?这么做使得J***a的程序可以夸平台运行。虚拟机的作用是吸收操作系统之间的差异。而虚拟机对于J***a程序来说都是一样的。C语言做不到这一点,在不同的操作系统上,C语言程序必须要用源码重新编译,才能运行。

J***a和C语言有什么区别?在回答这个问题前我们得先了解这两门语言各自有什么特点和优势。

J***a是一门面向对象语言,主要特点如下

  • 跨平台性,J***a虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使得J***a语言具备跨平台性。
  • 简单性,J***a摒弃了C++里难以理解的多继承指针等概念,使得它更加严谨、简洁。
  • 面向对象
  • 安全性,J***a语言具有许多的安全特性。
  • 线程

C语言是一门面向过程计算机编程语言,主要特点如下

  • 简洁紧凑、灵活方便
  • 结构式语言
  • 语法限制不太严格,程序设计自由度大
  • C语言能进行位操作,能实现[_a***_]的大部分功能,可以直接对硬件进行操作
  • 生成目标代码质量高,程序执行效率高

两者的部分区

  • C语言可以直接操作内存,J***a不能直接操作。
  • C语言可以封装动态dll,J***a不行。
  • J***a跨平台性相对于C语言高。
  • C语言有指针,J***a没有指针。
  • J***a拥有垃圾回收机制可自动管理内存,而C语言中必须由程序贝释放内存***。
  • 在J***a中引入了package的概念,使面向对象和面向组件开发更加方便,而在C语言中没有package概念,需要其他方式来实现。

J***a是否可以取代c吗?

答案是不能。一方面,C语言具有高效率以及对底层硬件的直接操作的优势。而J***a相比于C语言其优势在于跨平台性,但是运行效率相对于C语言较低,而且无法直接对硬件操作。另一方面,两者主要应用场景领域不同,J***a适合企业级开发,而C适合如操作系统,虚拟机,设备驱动程序开发的领域。

所以C是不会被J***a所替代的。希望我的回答能给你带来帮助。

J***a语言和C语言的区别还是相对比较明显的,从语言自身的定位来看,J***a语言属于面向对象语言的代表,在构建复杂业务逻辑方面具有一定的优势,而C语言则是面向过程编程语言的代表。

总的来说,J***a和C之间的不同,可以通过以下几个方面来进行描述:

第一:应用场景不同。J***a语言属于“全场景”编程语言之一,可以应用于Web开发、Android开发、大数据开发等场景,而C语言的应用场景则相对比较集中,主要应用于操作系统开发和嵌入式开发领域。由于J***a语言的应用场景更多,所以目前IT行业内J***a开发的岗位也相对更多一些

第二:技术体系不同。J***a是面向对象编程语言,虽然也借鉴了C语言的很多写法,但是在技术体系的设计上更注重可、安全性和可扩展性,所以J***a语言更契合互联网的应用环境,这也是J***a在互联网时代得到快速发展的一个重要原因。由于J***a语言极强的扩展性能,所以J***a语言可以在互联网时代、移动互联网时代和大数据时代都能够找到自己位置

第三:发展道路不同。虽然J***a语言的出现要比C语言晚一些,但是J***a语言的发展道路与C语言还是具有明显的区别,或者说J***a的开发人员并不是想让J***a取代C语言。J***a语言的发展道路主要可以体现出三个特点,第一是跨平台;第二是***整合能力强;第三是并发处理能力强。可以说J***a语言在设计上是希望解决C语言之上的问题,也就是网络问题。

实际上,与J***a语言同时代的Python语言,在设计思想上与J***a也有很多共同点,只不过Python语言更注重库的作用,语言风格更开放(胶水语言),而J***a语言依托在当时的Sun技术体系下,则显得要相对“严谨一些”,当时的Sun技术体系也想基于J***a成就一个新的开发模式,只不过后来的EJB并没有取得设想的结果

我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。

如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!

只有J***A可能被别的语言代替,C语言的地位暂时不可动摇,除非天才出现,因为C语言的高效率以及对底层硬件的直接操作,C可以算是无所不能了,而J***A,主要是其无视平台,但是效率很低,而且无法直接对硬件操作,微软的.NET,解决跨平台的需求,同样做得到无视平台,所以,J***A永远比不了C,因为即使是微软,它也没想到过开发什么取代C

J***a能不能像C语言不通过JVM虚拟机直接编译成二进制机器码,让计算机直接运行?

从语言设计的角度看是可以的,重新设计一下编译器就能实现,但从工程实践的角度看是不可行的。

其一,J***a语言最大的特点就是跨平台可移植,一次开发,一次编译,多平台执行,这一特性就是靠JVM(J***a虚拟机)实现的,如果改写编译器像C语言一样直接编译成了可执行程序,就失去了跨平台特性。

其二,J***a语言设计之初就设计成为了一款严重依赖JRE(J***a运行时环境)的语言,有部分语言设计上的缺陷必须依赖JVM来解决,比如GC(垃圾回收),我们知道,J***a语言是没有内存回收能力的,因此还得靠JVM,在工程实践中,如果软件不能进行内存回收,后果将是灾难性的。

其三,J***a语言是面向对象的,区别于同是面向对象的C++,J***a还有一个动态特性。

它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法实现的。在C++程序设计过程中,每当在类中增加一个实例变量或一种成员函数后,引用该类的所有子类都必须重新编译,否则将导致程序崩溃。J***a从如下几方面***取措来解决这个问题。J***a编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码中保存传递解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。这样,一个在存储器生成的对象不在编译过程中决定,而是延迟到运行时由解释器确定的。这样,对类中的变量和方法进行更新时就不至于影响现存的代码。解释执行字节码时,这种符号信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。而这一切同样依赖JRE。

以上几点决定了J***a不能像C语言一样直接编译成机器码,当然,还有一些其它因素,但我认为上面几点是最主要的。

目前来说是不可能的,为什么要搞一个JVM 虚拟机?你应该回看一下这个J***A的JVM诞生历史,当初搞一个虚拟机目的很简单,做为一个中间层向下与近硬件打交道,向上这是我们的程序层,屏蔽了向下的复杂性、兼容性等,提供一个跨平台WindowsLinux、Unix的基础平台,然后我们写代码就不需要考虑代码的移植问题。

你要直接机器码跳过JVM虚拟机层,那么不是又回到当初搞一个JVM的问题么?这样太折腾人了,不是不能做。

肯定是可以的,而且目前就有成熟的解决方案,不过,在回答这个问题之前,需要先明确一点,就是为什么J***a 需要JVM虚拟机?然后再来讨论可行的实现方案。

众所知周,J***a 是跨平台的,能够实现程序代码的“一次编译,到处运行”,无论在哪个操作系统上,J***a 代码都会被编译为统一的J***a 字节码文件,然后再交由JVM虚拟机来运行;J***a 程序员只要编写一套程序,便同时能在Linux,Windows和Mac x等不同操作系统上运行,JVM在其中扮演了一个不可或缺的重要角色

不同操作系统的实现方式不一,各个操作操作都有自己的一套处理方式和规范,J***a 的跨平台功能就是基于不同操作系统实现不同JVM,在哪个操作系统上运行就调用哪个操作系统的JVM来运行J***a 程序。

正式由于JVM虚拟机的存在,J***a 跨平台才得以实现,也才会有那么多的企业、组织和开发者青睐J***a 语言,让J***a 语言二十多年来长盛不衰,更是有衍生了不少除J***a 之外的,基于JVM运行的优秀编程语言,比如:Kotlin、Scala、Groovy、Clojure、Ceylon等。

GCJ 是GNU Compiler for the J***a Programing Language 的简称,翻译过来就是“为J***a 语言实现的GNU编译器”,GCJ编译工具就包含在包含在GCC中,只要下载了GCC,就能使用GCJ。

使用GCJ编译工具可以把J***a 源程序编译为字节码文件,也能将J***a 字节码文件编译为本地机器码,更是能实现J***a 源程序直接编译为本机可运行的本地机器码。而本地机器码就可在本机直接运行。

非常感谢有机会回答你的问题

不能的,原因要从J***a和c语言的特性去分析

1.C语言一样直接编译成了可执行程序,让计算机直接运行,但是其需要高度依赖编译链,不能跨平台,如果你有接触过嵌入式就懂了,一个开发板就对应一个编译链,必须用指定的编译链编译出来的可执行程序,才能跑起来的

2.

一次开发,一次编译,多平台执行,J***a语言最大的特点就是跨平台可移植,这一特性就是靠JVM(J***a虚拟机)实现的,编译一次,只要装有JVM的平台,都可以运行,比如window,Linux,Android等平台,如果改写编译器像C语言一样直接编译成了可执行程序,就失去了跨平台特性。

C语言的编译过程如下:

C源程序-->预编译处理(.c)-->编译、优化程序(.s、.a***)-->汇编程序(.obj、.o、.a、.ko)-->链接程序(.exe、.elf、.axf等),如图1所示。其实编译里面还包括词法分析、语法分析、语义分析,就不展开说了。

而J***a的执行可以分为两大步骤,如图2所示,第一是编译,这一过程就是调用的j***ac命令,编译成对应的.class文件。第二是解释执行,这一过程是调用的j***a命令,其实我理解的是调用了J***a里的jvm,即j***a虚拟机。JVM其实计算机把高级语言解析成机器码都会存在一个类似这样的中间件。在c#中,我知道先编译成CIL托管代码,然后Jit编译器在CLR(公共语言运行时)这样一个库下把托管代码解释成可执行文件.exe或者dll。现在我就把JVM看作是JIT编译器。把要执行的代码翻译给计算机听,然后机器执行,大致也就是这么个道理。当然了J***a程序还是通过解释器进行解释执行时,当JVM发现某个方法或代码块运行特别频繁的时候,就会认为这是“热点代码”(Hot Spot Code)。然后JIT会把部分“热点代码”翻译成本地机器相关的机器码,并进行优化,然后再把翻译后的机器码缓存起来,以备下次使用。总的来说还是需要JVM。

如果你想把J***a编译成二进制机器码,那要重新开发一个编译器,将J***a源代码通过编译(包括词法分析、语法分析、语义分析,中间代码,优化等)生成汇编语言,然后再转化成机器码。这样以来,每个平台(X86,ARM,MIPS,PowerPC等)都需要重新编译生成相应平台的机器码,而且如果没有JVM,就没有GC(垃圾自动回收)功能了。


到此,以上就是小编对于j***a翻译编程语言的问题就介绍到这了,希望介绍关于j***a翻译编程语言的4点解答对大家有用。

标签: 语言 j***a 机器码