java、c#、c++多种语言混合编写的程序如何打包为一个exe文件

Python014

java、c#、c++多种语言混合编写的程序如何打包为一个exe文件,第1张

这个是一个跨世纪的想法,异想天开指数我给五颗星!

java生成的jar包之类的其实并不能执行,它需要虚拟机运行环境,换句话来说,它并不是PE文件,Jar包也只是IL语言的中间层,java源码被编译后,再根据JIT一句句地翻译执行!当然他还有其他的机制,并不是保证每次运行都是有翻译的,事实上他首次对某运行代码段进行翻译会存储到临时空间中,下次执行时则不再翻译(这是JIT优化后的功能)。而这个JIT在不同的机器上(硬件环境不同,会将同一句的IL翻译成不同的机器可操作指令,这也就是移植性的真正内涵)。原理是样的!

C#基于的想法与Java是相同的,它也是如此,但生成的dll或exe其实是一种特殊的PE文件,也是需要.net framework 运行环境支持的!也就是JIT(即时翻译)!它与java运行环境实现的功能是一样的,首次运行某一代码段就翻译某段,但它会有一个镜象存储那里,就是我们说的Native,当翻译过的代码段可以直接从Native中直接运行,跳过JIT翻译从而提高性能。当然,C#的这个dll/exe也是中间语言(IL),只不会老大总是厉害点,它实现的并非是标准的IL,而是微软自家的IL,叫MSIL!换句话来说,两者原理相同,但生成后的IL却是不同的!

C++其实是一门语言而已!它也被.net 作为上层语言,也就是说他也存在一个C++.net。这个当然生成的与C#一样的,其实.net上层有多个编程语言的,不管你是VB/C#/F#/J#还是C++,最终生成的都是MSIL,微软的目的就是上层使用不同语言的程序员能在一起工作,这就是.net,生成的都是MSIL的中间语言的dll/exe。

但是,虽然是在VS中,还存在另一种C++的开发形式,这就是我们说的MFC等相关的开发,其实这时VS开发环境并不是执行.net,而此时VS完完全全就是Visual C++一样的功能。当然这种生成的移植性差了,但他生成的却是windows可以直接执行PE文件,如dll或exe!这种dll/exe并不是MSIL中间语言,而是标准的windows可执行的二进制文件!不须在windows中安全.net运行环境可以直接运行!

所以针对这三者的联接,或者说打包成一个文件,其可能性不大了!jar包中是IL,.net中的MSIL,而C++则完全是二进制PE文件!你要连接成什么?!

所以这是一个跨世纪难题——不过好象不需要解决!

多说一点,net core事实上是可以生成ubuntu等linux分发版的程序的,它是怎么实现的?其实其秘密就在于.net中Native文件——如果你指明了是在某个发行版本的linux时,net core把MSIL直接翻译成对应版本的Native(这玩意可以直接可以执行的!),这就是为什么net core可以跨平台的作用(你知道它是怎么跨的吗?源码跨而已——如果你发布时写dotnet publish -r ubuntu-14.04 那么生成的文档也只能用到ubuntu 14.04上,换到ubuntu 16.04上运行就会出错!所以也可以是winrm 或 win x64等参数),换句话来说,.net生成的dll我们只须指定是X86还是X64/或者IA 64等形式即可,当然也可以X86运行到任何windows系统上!只有一个生成的文件,而跨平台的net core其实并不再具有移植性了!这下你知道Native文件的作用了吧?其实我们在netcore没有推出之前就想办法玩过native文件以提高性能(但丢失了移植性)。

但C++呢,其实这个吧,它也是具有这样的特性的,他生成的文件有一定的移植性,或者多数时候我们需要在不同的系统上进行编译!比如在windows上,编译后可以被不同的windows平台使用,但在linux系统上,一般是下载gcc,然后下源码进行当机编译!换句话来说,net core编译是一个参数,而c++则使用的是“硬参数”由不同的操作系统自己去编译!这你让net core与C++情何以堪?更别说那么还有一个Java!那家伙为了保证自己的可移植性,必须需要虚拟机!

所以吧,你这个问题,其实只是想问问到底有谁懂这些底层的原理而已!虽然它们三个语言关系很近(java是以C++为蓝本,简化C++语言增加类库与虚拟机机制,所以程序员称其为C++升级版——功能升级,被亲切地称为C+++,开明人士认为其对C++语言本身是一种简化——语言简化版,被称之为C++-,而C#则是微软看到Java的优势后生成的语言,为了夺回自己C++的用户群,据说内定就叫Java+,也就是java的升级版!)他们三关系确实很近!

其实吧,针对语言发展上还有一个小秘密:微软有C语言,有C+语言(国内流行的一行左右,很多人不知道,我说这个典的时候,居然有一个哥们上学时就学了一年C+,不过他现在是电工,哈哈),还有C#语言(其实就是C++++呗!),你可能会奇怪,为什么没有C+++语言?对,就是没有这个语言,这个称号是C++的疯狂的时候被送给了Java了!那么程序员都叫Java语言是C+++或C++-!当然C#语言被叫做Java+,据某些报道说是一个内定版本,但没有人称其为Java+的!

三者虽然“近亲”,但一点都不“合”的!

什么是.NET Framework?

说起Framework,就要后说起.net的使命,。net是微软为了和java进行抗衡的战略。java 我们都知道当初sun公司提出的的优势就有跨平台,也就是说在多个平台下面都能进行开发使用。微软自己的是搞操作系统平台,他自然是不会去搞一个跨平台的语言来去促进其他和他是竞争关系的平台,所以他提出一个一个跨语言的概念的,就是可以在。net平台上面使用多种语言开发,我们常见的有vc++,vb,c#,j#,F#等等多种语言。这上面是framework的历史。framework的本质是一个编译器,类似java中jit。但是framwork得编译器要进行两次编译,第一次是将各种编程语言编译成中间通用语言,第二次将通用编译语言编译成机器能识别的语言。

这就是framework,你粗略理解成。net的编译器。

为什么创建它?

创建它的原因:整个framework的编译执行都需要靠他来完成,他就是一个大厦的第一层,没有第一层那里来的第二层,第三层呢?

有那些因素吸引我们在这个环境中编程?

大家常说的为什么要使用。net,最大的一个原因:开发速度快,这主要是微软在中国的推广力度大,普及广,资料多。而且他提供了一个很强大的开发工具visual studio。

什么是C#,为什么它是在.NET Framework中编程的理想工具?

c#是一门面向对象的编程语言。有点可以提一下:他的语法和java 有百分八十的相似。至于为什么它是在.NET Framework中编程的理想工具,只能说他是现在。net framework平台支持的编程语言里面,混的最好的。以前是vb。

高效的开发.NET应用程序需要什么,即像VS或VCE这样的开发环境。

高效开发,在基于。net framework的开发,工具方面没的选肯定是vs,在我看来关键是要看编程人员的对语法,对业务的熟悉程度,在团队开发中问题就多了去了。

呵呵,草草就写了这么写,有些不对的地方还请见谅

2010年10月25日11:49:14

LX 拜托你百度的时候也看清楚点 这么赤裸裸的剽窃