.NET是否像Java声称的那样是一次写入,可在任何地方运行的(WORA)平台?
我记得Sun的口号是如此生动……"一次编写,随处运行"。这样的想法是,由于程序被编译为标准字节代码,因此任何装有Java虚拟机的设备都可以运行它。多年来,Java似乎已将其应用到许多平台/设备上。
这是.NET的意图还是曾经的意图。如果是这样,正在采取什么样的努力来实现这一目标?
解决方案
回答
使用Mono,我们已经非常接近了,使用SilverLight,我们已经准备就绪。
回答
我认为.NET的正式"意图"不是WORA。我认为我们可以放心地说.NET的设计使其可以始终在将来的MS OS上运行。但是没有什么可以阻止.NET在其他平台上运行。 Mono是Windows以外的其他操作系统的.NET运行时实现的示例。
回答
从理论上讲,这是可能的,因为CLR(.Net的"虚拟机")符合开放标准(CLI)。问题是该标准还有哪些其他实现。 Mono是另一项正在进行中的工作,但它是我所知道的唯一的另一项。
回答
有在Linux,Solaris和OS X上运行的Mono。实际上,.Net仍然是仅Windows平台。相反,将其改为WORA并没有真正符合微软的利益。但是似乎是跨平台的。很多人对Linux上的Mono抱有极大的偏执。 MS的假定策略是首先使其成长为Linux应用程序平台的重要组成部分,然后释放律师。我不会将未来押注于.Net的可移植性。
回答
我认为.NET的想法是它是"一次编写,可在任何地方运行(由Microsoft选择)"。但是,Mono项目正在慢慢改变这种状况。
回答
它永远不会在Java,恕我直言这样的平台上得到支持。
唯一的努力就是Mono,而不是由Microsoft赞助。
在此处和官方网站上查看
回答
从理论上讲,是的。 .Net程序集是字节码,在启动时会使用JIT("及时")编译器将其转换为本地代码。
实际上,除了Windows之外,没有很多平台具有.Net JIT编译器。 Linux中有一个叫做MONO。
不了解Mac,Sun等...
回答
由于.NET仅在Windows上(正式)可用,因此它不是写的,可以在任何地方运行。但是,Mono团队在帮助将.NET扩展到Windows之外方面做得很好,但是它们始终落后于官方产品。
回答
我认为对于Microsoft而言,并不是为每个平台和设备创建运行时都是最初的计划,但是他们通过使用文档化的中间语言来鼓励这样做。
回答
是的,这是.NET的目标,尽管我认为它没有像Java中那样强调。目前,我所知道的唯一效果是Mono项目,该项目正在创建在Linux上运行的CLI版本。
有趣的是,Silverlight实际上具有CLR的精简版,可以在Windows和Mac上运行,从而允许相同的Silverlight应用程序在两个平台上都可以不变地运行。
回答
当然,多平台是我们的梦想。.现在,mono在为其他操作系统实现运行时方面做得很好。
单核细胞增多症
回答
简短的回答-不,Microsoft仅支持.NET的MS操作系统(包括Windows Mobile)。
长答案-有公共开源项目可以复制Linux和其他OS(尤其是Rotor和Mono)的.NET框架。它们不支持所有功能,但是我们可以部署很多.NET代码,包括silverlight。
回答
从理论上讲,该语言被设计为可编译为Java之类的字节码,由公共语言运行时解释,该机制还允许多种语言(不仅仅是C#)一起工作并在.NET框架上运行。
但是,Microsoft仅开发了Windows的CLR。还有其他非MS替代方案正在开发中,最突出的是Mono,CLR实现或者许多平台(请参阅链接)。
所以从理论上讲,在实践中我们将看到。
回答
是的,没有。 .NET环境的某些部分是标准的,可以公开采用。
例如,运行时(CLR)具有一个称为Mono的便携式版本,该版本是多平台的开放源代码,并被(例如)Second Life使用。
回答
意图就是这种情况,或者至少是间距。事实是.NET不能真正在其他平台上运行。唯一的主要例外是Mono,这是一个开源项目。它实质上是对可在Linux,Solaris,Mac OS X,Windows和Unix上运行的.NET运行时(等效于Java虚拟机)的重写。
它已经相当成功,但是并没有得到官方的支持。
如果我们正考虑让整体Acme公司老板采用.Net和Linux,那就算了。实际上,使用.NET,我们一定会使用Windows计算机。
回答
为了更正其他人的一些评论,.Net始终旨在成为多平台。这就是Microsoft将名称空间分为" System。"(与平台无关)和" Microsoft。"(与Windows特定)的原因。
回答
是的,.NET具有公共语言运行时(CLR),它与JVM等效。 Microsoft在Java平台上不支持它,但是在Mono项目的帮助下,可以实现通常的警告来实现跨平台应用程序。
请记住,.NET不仅仅是CLR。这是一个完整的平台。
回答
那取决于我们对"任何地方"的定义。
有几种Java虚拟机和.Net框架。
而且大多数时候,我们不能只为台式机vm / framework编写代码并期望它在移动电话上运行。
所以。从某种意义上说,即使Java也不是真正的"一次编写,随处运行"。
但是,的确,Java的VM当前正在多个操作系统上运行,而.Net框架仅在Windows设备上运行。
有一个有趣的计划叫做" Mono",它在Linux,Solaris,Mac OS X,Windows和Unix上提供.Net支持。在这里阅读:Mono网站
回答
由于CLR的功能与JVM类似,因此dotNet可以是。
但是我不相信MS有任何意图。
http://www.mono-project.com/Main_Page
可能有用,但它不是MS产品。
顺便说一句,就像广泛的j2ee容器如何将WORA概念笼罩在j2ee应用程序上一样,在IIS以外的任何平台上运行的ASP.NET应用程序在不同的平台上都无法真正发挥作用。
回答
我认为这真的不是.NET的设计目标。Microsoft对人们为非Windows平台编写软件没有特别的兴趣。
但是,有一个Mono项目(http://www.mono-project.com),它是"由Novell赞助的一项开放开发计划,目的是开发.NET开发平台的开源UNIX版本。
回答
微软从未提出过这些主张,但它们正在WORA领域做出努力。例如,Silverlight 2.0将使用.NET框架的子集,并且可在Windows,Linux(通过Moonlight项目),MacOS,Windows Mobile和诺基亚手机上使用。
就像其他人提到的那样,Mono项目也将框架带到了多个环境中。
回答
鉴于其他人的回应,我仍然不清楚Microsoft是否将.NET变成WORA计划的真实意图。真正了解我猜测的唯一方法是让Microsoft .NET团队的某个人对此有所了解。
由于我们无法确切地了解.NET的原始WORA意图,因此我们可以指出正在努力实现这一目标的努力(如先前的回答所述)。
单声道
这项工作是在Microsoft之外进行的一项举措。
Mono is a project led by Novell (formerly by Ximian) to create an Ecma standard compliant .NET compatible set of tools, including among others a C# compiler and a Common Language Runtime. Mono can be run on Linux, BSD, UNIX, Mac OS X, Solaris and Windows operating systems.
银光
Microsoft正在大力追求这一努力。 Silverlight 2.0实现了与.NET 3.0相同的框架版本,似乎是试图通过浏览器成功将框架交付给多个平台的尝试。
It is compatible with multiple web browser products used on Microsoft Windows and Mac OS X operating systems. Mobile devices, starting with Windows Mobile 6 and Symbian (Series 60) phones, will also be supported.
尽管它没有专门解决GNU / Linux带来的功能,但显然有一个名为Moonlight的第三方自由软件实现。
这似乎是我们目前所知道的,但是如前所述,.NET团队中的某人可以介入其中,以适当地阐明WORA是否实际上是一项原始计划,将非常有帮助。
回答
它肯定是WORA。只是MS认为现在任何地方和任何地方都将是Windows。谁知道Linux和MacOS仍然存在。但是从PDC上的所有Mac电脑来看,我猜它们是正确的一半还是错误的一半!
回答
如果WORA确实是最初的目标,那么我想我们现在会在所有主要平台上看到.NET在Microsoft的完全支持下的实现。我似乎还记得,当Sun在屋顶上大喊WORA时,微软的riposte是"写任何(语言)在一个平台上运行"(WARO :-)。就像其他人提到的那样,我认为他们一直是WORASLAIW的坚定支持者(只要在Windows上可以在任何地方运行一次写入)
正如我们所指出的那样,由于战场已经从台式机转向浏览器,他们似乎在Silverlight方面有所尝试,以尝试获得Flash / Flex动作。
回答
但是它是多平台的Win9x / WinNT / Mobile
回答
为了说明这一点,在很多人看来,Java从未兑现过"一旦编写就可以在任何地方运行"的承诺。
充其量我们可以获得的是"到处编写一次调试"或者"到处都编写一次看起来像废话"
成功的基于CLR的应用程序都是使用目标平台固有的图形框架编写的。
例如,以下非常成功的linux应用程序,其中使用对GTK的绑定(称为GTK)而不是像我们期望的那样使用winforms来编写:
Banshee音乐播放器(如iTunes)
fspot照片管理器
TomBoy笔记计划
GnomeDo快速启动器和底座
同样,成功的Windows .net应用程序也不是使用GTK编写的(即使它是跨平台的),也不是使用Winforms或者WPF编写的。
谷歌开始制作Chrome时,他们没有尝试使用跨平台GUI框架,而是选择在每个平台上使用本机GUI框架。为什么?因为这样,应用程序就可以正确地适合其环境,从而使其外观,感觉和行为都像操作系统本身一样。
基本上,当我们尝试在任何地方执行一次写入操作时,必须做出重大的让步,而最终得到的结果实际上并不能在任何地方运行。
该行业已经放弃了远大的目标,即写到任何地方都可以写一次,这是一个好主意,但实际上没有实现。
mono / .net的最佳方法是共享较低级别的二进制文件,并在每个目标平台上使用本机gui框架。 GTKon linux,在Windows上是winforms或者WPF,在Mac上是CocoaSharp。这样,应用程序将看起来像是本机应用程序。
回答
如果Microsoft认真对待其他非Windows平台上的dotnet,他们将发布类库以供其他人重用,同时还需要再次重写相同的库。另一方面,Sun做到了这一点,这意味着如果没有人希望移植到另一个平台,则存在的障碍会更少。从本质上讲,使用Java仍然需要编写一个vm并执行本机操作,但这有助于避免重新实现整个类库的麻烦。这种语言的标准化是一种营销策略,目的是吸引乔恩技术人员。没有库的语言是毫无价值的。尝试使用prjkitive类型完成下一个项目...正确地编写自己的字符串类,并告诉我在没有可用库的情况下标准化语言是多么有用...
回答
答案是非常不稳定的。包含外部库后,答案将更改为"否"。
例如,Microsoft没有64位JET驱动程序。 .NET使用JET访问MS Access数据库。
为使用MS Access数据库的"任何CPU"目标编译的任何应用程序都将在64位版本的Windows上失败。
(这忽略了所说的应用程序不能移植到Mono。)