Frameworks 为什么可以';现在我们不能创建跨平台的程序吗?

Frameworks 为什么可以';现在我们不能创建跨平台的程序吗?,frameworks,machine-code,Frameworks,Machine Code,我只是想知道,如果任何语言的所有编译器都能将代码转换成计算机内部唯一能“交谈”的语言(机器代码-0和1),为什么要将.NET windows应用程序转换成Mac应用程序如此困难 难道不应该有人带着一个绝妙的想法(自从我结婚三年以来,我就没有什么绝妙的想法!)和一个。。。我不知道。。。一个机器代码框架,因此,它不会将编译器转换为机器代码,而是转换为该框架,该框架将安装在任何平台上(SuSE、fsb、Ubuntu、AIX、SCO、OSX、Windows9X、Vista、7等) 我想知道为什么我们不能

我只是想知道,如果任何语言的所有编译器都能将代码转换成计算机内部唯一能“交谈”的语言(机器代码-0和1),为什么要将.NET windows应用程序转换成Mac应用程序如此困难

难道不应该有人带着一个绝妙的想法(自从我结婚三年以来,我就没有什么绝妙的想法!)和一个。。。我不知道。。。一个机器代码框架,因此,它不会将编译器转换为机器代码,而是转换为该框架,该框架将安装在任何平台上(SuSE、fsb、Ubuntu、AIX、SCO、OSX、Windows9X、Vista、7等)

我想知道为什么我们不能这么简单,这些天


有什么想法吗?

我们可以这样做,请参见Java示例。微软是否会这样做是另一个问题。他们通过不这样做来保持Windows的竞争优势

其他示例仅举两例,即Perl和Python。仅仅有一门语言是不够的,你需要有库来让程序员的生活更轻松。Java、Python和Perl似乎已经相对较好地实现了这一点,我相信微软也有能力为.NET做同样的事情。但问题依然存在:他们为什么会这样做

远离字节码类型的虚拟机,您还可以使用VMWare、虚拟PC等,它们可以在硬件级虚拟处理器上运行代码。其中一些需要相同的处理器,另一些(我相信像VirtualBox和Bochs)在不同的处理器上运行虚拟处理器


我真正没有看到的是主机和虚拟环境之间的无缝集成。VMWare在两者之间的拖放功能还可以,但如果能够在x86之上托管SPARC环境,并且基本上让SPARC应用程序看起来与x86应用程序完全相同,那就更好了(类似于Cygwin基于X-windows的应用程序看起来就像普通的windows。

Microsoft只在windows上实现了.NET。因此,要让.NET应用程序在其他平台上运行,需要一个新的实现。正在采取措施实现这一点。当前版本运行大多数.NET 2.0程序集,并支持许多e Windows特定接口

至于您的问题的其余部分:重新实现所有其他人使用的API是困难的,现有项目是不完整的。支持大多数Windows应用程序,但仅支持。实现了大部分OpenStep规范,并与Mac OS的Cocoa API有一定的兼容性,但这是一个痛苦的不完整过程,而且将持续很长时间


如果每个人都使用一个标准API,可能会有所不同。但是,坦率地说,现有的所有API在某种程度上都很糟糕。

事实上,它已经完成了。至少在一定程度上是这样

其中一项工作叫做Java,它是一种跨平台语言。Java编译器将源代码编译成一种称为“字节码”的东西,这只不过是一种独立于机器的“汇编语言”。该“可执行文件”随后由Java虚拟机(JVM)执行,而Java虚拟机是平台之间的不同部分(也就是说,Windows JVM明显不同于MacOS JVM)


然而,跨平台应用程序并没有那么简单。编写一个基本的虚拟机来为每个可能的平台执行某种抽象字节码相对来说比较简单。但是如果缺乏丰富的类库,那么语言本身实际上什么都不是。因此,出于各种原因,实现所述类库是一件非常困难的事情。

你可以用Silverlight。至于Silverlight是否会退出浏览器进入本机应用程序,这是微软的一个政治决定,而不是一个技术问题。Mono的家伙们也在让.net构建iPhone二进制文件方面做了一些工作,因此,毫无疑问,未来会有更多的跨平台应用


< Adobe Air、java等其他东西也可以跨平台的客户端应用程序——地狱,甚至可以在C++中跨平台进行操作:-)

< p>问题始终是你将得到一个标准的应用程序。 如果一个应用程序需要在所有平台上工作,那么您最终会得到一个无法正确适应任何一个平台的GUI,以及一个错过平台上预期功能的应用程序 i、 e.只存在于一个平台上的功能—在OS X上,您希望与所有最新功能集成,而smae适用于Windows和*nix


我想最接近的方法就是跨平台实现核心功能,然后在上面构建GUI和任何其他特定于平台的功能。

正如其他人已经提到的,这是可能的(尤其是基于JVM的语言和Python),许多人确实创建了跨平台的应用程序。令我吃惊的是,坚持使用依赖平台的框架的人数量之多。显然,这些框架的市场营销效果更好


这些问题更多地与政治问题有关,而不是技术问题。实际上,跨平台开发中最苛刻的技术问题来自底层硬件通信(驱动程序到特定设备等)但是,典型的应用程序无论如何都不需要直接与硬件通信。

这个问题比大多数人所说的要深刻,Java仍然不是真正的平台独立的,因为它不会在所有x86或x64操作系统上运行,你仍然需要一个VM来运行操作系统上的操作系统。它甚至不接近你的建议,因为你仍然需要一个依赖操作系统的运行时来运行执行“独立”字节码

问题在于,大多数可执行文件都覆盖在操作系统上,并将其作为一种框架使用。一旦你将某种依赖操作系统的代码放入应用程序中,你就错失了使其独立的机会。光盘IO、网络IO、图形用户界面、获取系统信息,所有这些都会影响应用程序的方式和原因你的代码不能是独立的

还有一个问题是什么是可执行文件,在windows上是,而在mo上是