有没有人写过比 .NET 包还大的应用程序?人们过去常常批评 VB6 的 2 MB 运行时,但它很少使它所附带的应用程序相形见绌。
今天,尽管我的机器上安装了 Vista,但我不得不下载 35 MB 的 3.5 框架并重新启动,然后尝试使用一半大小的应用程序。
当您考虑到源代码安全性降低时,我想知道为什么有人会在 .NET 中开发 Windows 应用程序,而不是使用允许构建本机可执行文件的语言。
在编写在 Windows 上运行的应用程序时,.NET 有什么优势可以克服这些缺点?
人们:请注意,这是在2009 年 2 月写的,当时说的很合适——在 2012 年末(3 年多后)对我大喊大叫是没有意义的。:-)
Delphi 对于 Win32 有一些相当大的优势。并不是说 .NET 应用程序天生就不好,但请尝试:
.NET 中的垃圾收集可能非常好,但是任何了解编程的人也可以使用 Delphi 轻松处理手动分配/释放内存,并且 GC 可用于引用计数接口。让所有非程序员大量使用 VB 的伪 GC 的原因不就是其中之一吗?IMO,GC 是使 .NET 变得危险的原因之一,就像 VB 很危险一样——它使事情变得太容易了,并且允许那些真正不知道自己在做什么的人编写最终会弄得一团糟的软件。(而且,在我在这里被火烧死之前,这对那些知道自己在做什么的人来说也很棒,VB也是如此;我只是不太确定对技术人员的优势是否超过了对我们的危害来自不熟练的人。)
Delphi Prism(AKA Rem Objects Oxygene,以前的 Chrome)提供了 Delphi 的 GC 版本,需要它的人正在寻找它,以及 ASP.NET 和 WPF/Silverlight/CE,具有 Delphi 的可读性(并且缺少花括号) . 对于那些(像我一样)Unicode 支持不是主要因素的人来说,Delphi 2007 提供了 ASP.NET 和 VCL.NET,以及本机 Win32 支持。而且,在像我工作的地方,当工作站(至少)每三年升级一次,并且我们刚刚淘汰了最后一台 Win95 机器,因为它不是升级的优先事项,.NET 框架是一个问题。(特别是公司代理要求只允许少数人访问互联网,限制带宽和下载能力,以及不允许使用 USB 设备的适当非管理员帐户,
我使用 .NET 语言(C#、Delphi Prism)工作,但全职和兼职都是来自 Win32 和 Delphi。
好的,我怀疑这会说服您,因为您不想被说服,但这是我对 .NET 相对于旧技术的优势的看法。我不会声称所有优势都适用于您在问题中提到的每种语言,或者 .NET 是完美的,但是:
托管环境更早地捕获常见错误并提供新机会:
一个现代的面向对象框架:
多种语言针对的一个框架:
大部分的结果——以及我猜的原声——是.NET 允许更快地开发更健壮的应用程序。
要解决您在问题中提到的两个具体问题:
仅举几例:
好的,首先,没有一种语言/平台会普遍优越。
较旧的语言将拥有可以工作的现有代码库,这既是积极的(经验,经过良好测试,广泛的支持文献),也是消极的(由此产生的对变化的惯性,多种不同的做事方式导致新进入者的困惑)。
就像大多数事情一样,语言和平台的选择/使用是利弊的平衡。
在下面的列表中,Delphi 有一些相同的优点和缺点,但也有很多不同。
.Net 的潜在负面因素(如果它们对您来说不是问题,它们就不是负面因素)
还有更多,但这些是亮点。
潜在的积极因素(如果它们对你不重要)
同样专门针对 c#
缺点:
临:
C 基础确实是一个优点和缺点。大量程序员都可以理解它(与基于 Pascal 的风格相比),但有一定的麻烦(switch 语句就是一个明显的例子)。
强/弱/静态/动态类型系统是一个两极分化的辩论,但肯定没有争议的是,在类型系统更受限制的情况下,它应该努力不要求过多的冗长,c# 在这方面肯定比许多更好看待。
对于许多内部业务线应用程序而言,大量 .Net 平台的缺点是绝对无关紧要的(受控部署是公司内常见且已得到很好解决的问题)。因此,使用 .Net(这在很大程度上意味着 c#,对不起 VB.Net 的家伙)是 Windows 架构中新开发的一个非常明显的选择。
使用它开发复杂(和简单)应用程序的“简单性”。框架中已经为您编写了许多基本内容,您可以直接使用它。今天下载 35mb 文件比 8-6 年前下载 2mb 文件要容易得多。
有很多原因。我对 RealBasic 了解不多,但就 Delphi 而言:
比 .NET 更广泛,开发社区更小。网上的很多德尔福资源都是古老而过时的。
在 Delphi 2009 之前,Delphi 没有完整的 unicode 支持。
我不知道 Delphi 2009,但 2007 没有很好的垃圾收集。它有某种笨拙的引用计数,需要代表开发人员进行一些干预。.NET 有一个更高级的 GC,它几乎可以为您完成所有工作。
.NET 有一个更大的标准库和更多最新的 3rd 方库。
像 C# 这样的 .NET 语言可以说更好,而且对于那些刚接触该语言的人来说当然更容易理解。
.NET 开发人员在这里引用了许多假定的优势,但这些优势不应该在这种比较中,因为 Delphi 也有它们:
然而,.NET 中有一些东西是 Delphi 没有开箱即用的,只有其中一些可以由库和自己的代码添加。仅举几例:
[1] 如果您不知道但有兴趣,请查看Marc Clifton 的主页,尤其是有关声明式编程的文章。
编辑:我想回应梅森惠勒的评论:
重新动态代码:我知道有一些解决方案可以在应用程序中嵌入 Pascal 脚本。然而,将内部对象层次结构的一部分提供给脚本引擎,与在运行时用于代码的相同编译器之间存在明显差异。Delphi 编译器和脚本引擎的编译器之间总是存在差异的。无论如何,您从 .NET 获得的东西远远超出了 Delphi 可用的任何东西。无论如何,是否能够为 Delphi 编写类似的基础架构并不是重点,重点是 .NET 已经为您准备好了,当您需要它时。
重新多播事件:确切地说,有编码的方法,但它不是 Delphi / VCL 开箱即用的一部分。这就是我上面说的。
关于弱引用:可悲的是,您错了。尝试以不平凡的方式使用接口,在此过程中创建循环引用。然后您必须开始使用类型转换并希望使用弱引用。
嗯,.NET Framework 是为所有 .NET 应用程序共享的,所以您的机器上只有一次,现在 35MB 不算什么(与您的 Vista 安装的大小相比)。对于您的第二个 .NET 应用程序,您不必再次下载它。
对于 Windows 应用程序,.NET(使用 C# 或其他)使您可以更直接地访问最新和最强大的 Windows 功能。它也得到了微软的大力支持,拥有庞大的社区和很多关于它的书籍。
REALbasic(现在的Xojo)适用于跨平台应用程序。仅在 Windows 上使用它有时会很有用,但这不是它的优势(因为它非常易于使用)。
我对德尔福了解不多。
据我所知,RealBASIC 在对象关系工具方面没有太多(如果有的话),并且对于 n 层、以数据库为中心的应用程序可能不是一个好的选择。