将C#程序移动到另一种语言

时间:2009-06-26 00:12:11

标签: c# .net language-comparisons

我目前负责开发在Microsoft .NET C#中创建的第二个程序版本。我没有做任何实际的编程,但我正在为程序员编写规范。我想把它从.NET代码库中删除,但由于Joel在他的blog上说永远不会重写代码,并且他确实提供了很好的推理,我倾向于仔细思考。

所以我的问题是,

(1)有没有简单的过渡方式? (.NET C#等语言)
(2)你会把它从.NET中删除吗? (3)如果是这样,你会用什么语言?

我想脱掉.NET的原因是我对.NET的理解,它必须安装在客户端上。当有更好的方法时,我宁愿不给我的顾客带来不便。

15 个答案:

答案 0 :(得分:23)

这听起来很粗鲁,我冒着被投票的风险,但请原谅我,我会说实话......你说的是,“[你是]负责第二版程序的开发是在Microsoft .NET C#中创建的......没有做任何实际的编程...... [希望]将它从.NET代码库中删除“。你在听自己吗?你显然没有任何知识或经验来做出这个决定,问题1和问题3进一步证明了这一点。没有“简单的语言” - 这甚至意味着什么?强大的语言“容易”吗?弱语言“容易”吗?如何轻松过渡到任何不同的东西?即使您有自动翻译代码的东西,运行时和平台和库的差异也使得移植任何非平凡的应用程序变得非常容易。它需要工作和知识。对于那些时间很多的人来说,这可能很容易,但是对于大多数有截止日期和现实的人来说都不容易。

答案 1 :(得分:22)

除非您从C#转移到某种企业范围从C#转换到另一种语言,或者除非存在某种有效的技术要求C#/ .NET可以'满足,我不会从现有的代码库移动。

您说明了您的原因,因为客户端需要.NET。您的程序客户端/服务器,还是Web应用程序?如果它是基于Web的,那么你是不正确的,客户端不需要.NET,只需要浏览器。

如果程序是客户端/服务器并且已经用C#编写,那么您移动到的任何语言也可能需要某种形式的运行时安装。 .NET附带了Windows的每个新安装和服务包。

除非您正在尝试针对OSX和Linux用户,在这种情况下,在您做出任何放弃代码库的决定之前,我会考虑认真研究这些市场的价值。 Java可能会帮助您更好地帮助您 - 但是您可以使用Mono平台做很多事情,因此即使您定位这些平台,也可以保存C#代码。

修改

  

waiwai933写道:

     

我知道我不应该做出决定,但这不是我的决定   说明谁会成功   决策。我的意思是“简单的语言”   一种非常类似于C#的语言,所以   过渡会更容易。

不幸的是,你运气不好。与C#最接近的语言是Java,但两者之间的差异非常大,您需要进行完全重写;一个端口根本行不通。你拥有的C#代码不太可能不使用委托和事件 - 它们是无所不在的 - 并且Java中没有类似的构造。 WinForms GUI框架(我猜WinForms)与Swing完全不同, none 的构造很容易移植; 它充斥着各种事件和代表。

您正在寻找至少与初始努力一样多的努力来切换平台,可能更多。再加上Java违反了你想要从C#切换的原因:Java需要在客户端上安装运行时。

正如我之前提到的,在做出此决定之前,请仔细查看从切换平台获得的真正的好处。

答案 2 :(得分:9)

我无法理解为什么你想要离开C#和.NET,唯一的原因是你不想通过要求他们安装.NET框架来“给你的客户带来不便”。

首先,如今,.NET已包含在Windows中。在XP(当前的服务包)中,您获得了.NET 2.0。在Vista中,你得到.NET 3.0。假设您实际上没有使用任何.NET 3.5功能,并且不需要C#3.0中的任何功能,那么“客户的不便”这一论点是相当没有实际意义的。他们不需要下载任何东西或安装额外的东西......它已经存在。

如果您确实需要.NET 3.5和/或C#3.0,那么为您的客户创建预先打包的安装程序并不容易。对客户没有任何真正的“不便”,因为他们无论如何都必须安装您的程序。单个安装可以在单个,无缝,透明的安装过程中处理您的程序及其所有依赖项。如果您希望为客户提供更轻松的时间,则可以选择使用.NET,C#和Visual Studio进行一次性部署。这将为您的客户创建一个简单的站点,可以轻松快速地允许他们下载和安装您的应用程序,并在将来更新发布时进行更新。这种类型的部署还负责确保下载任何依赖项并将其安装到客户机系统,这只需要完成一次(所有后续更新只需要下载和安装最新版本的已更改程序集。)

正如其他人所提到的,C#和.NET有很多东西可以提供。 Microsoft已经在.NET平台上创建了一个广泛的开发生态系统,拥有大量的资源,工具,文档和社区帮助。 C#是一种非常干净,现代,前瞻性的语言,它提供了许多工具来帮助您和您的开发人员尽快,简单,高效地解决问题。转向C ++意味着你不仅失去了这些有用的进步,而且还继承了手动内存管理的噩梦。迁移到Java意味着你失去了这些有用的进步,但通常也没有真正获益。您可以转移到其他.NET语言,但是您没有解决您提到的唯一问题:您的客户端依赖于.NET框架。

如果你已经有一个用C#开发的系统,我会说不要改变一件事。你会失去很多,并且不会真正获得任何会对你的客户产生重大影响的东西。从长远来看,任何变化都可能对您的公司和开发人员产生更大的影响。您将需要花费在重写或转换代码上的成本,培训开发人员使用新语言所需的成本以及可能的新开发平台,查找和修复当前代码库中已经修复的错误所需的成本,以及列表继续......

在您认为对您的客户来说太不方便之前,您需要了解更多有关.NET提供的信息。在决定进行如此剧烈且昂贵的变更之前,您需要确保对您的客户造成不便。

答案 3 :(得分:7)

你认为其他什么比C#更好的原因是什么? .NET出了什么问题?如果您有正当理由妨碍您的公司使命,那么您应该考虑重写它。

然而,我确实认为这样做只是为了做到这一点。 C#非常简单明了,最新版本的运行时看起来相当稳定。我仍然不会在其中构建操作系统,但对于最终用户应用程序,它是我的首选语言。

用C ++重写它只是一个内存/资源管理的噩梦,而转换到Java是一个横向移动,并没有多大意义。

如果您详细说明应用程序是什么,客户端,服务器等,它的功能等等,我们可能会更具体。

但请记住,TANSTAAFL。

编辑:

我不会太担心要求在客户端上安装运行时。假设您的所有用户都是Windows用户,则Vista和Win7都默认安装了最新版本的运行时。随着越来越多的应用程序构建在运行时上,越来越多的用户已经将其用于其他应用程序,您可以随时使用您的应用程序重新启动运行时。

答案 4 :(得分:4)

(1)有没有简单的过渡方式? (.NET C#等语言)

(2)你会把它从.NET中删除吗?

并非没有非常令人信服的理由(不会给您的客户带来不便!)

(3)如果是这样,有没有简单的语言?

Java将是最接近C#的类似物,你会失去超过你的收益加上你仍然不得不给你的客户带来不便

我想把它从.NET中删除的原因就是我对.NET的理解,它必须安装在客户端上。当有更好的方法时,我宁愿不给我的顾客带来不便。

正如其他人所说,这并不是您认为的不便之处,而且您唯一的理由就是浪费时间,资源和金钱。简而言之,如果付费并且有效,请保持你的手套。

答案 5 :(得分:2)

没有从C#到.NET的自动翻译。

您可以轻松地将其转换为Boo或VB.NET或其他一些.NET语言,但是如果您要转换为C ++(非CLI),那么库(.NET框架)将不可用。

这会引起最大的麻烦。

答案 6 :(得分:2)

C#的唯一简单转换是将其转换为另一种.NET语言。除此之外,您正在考虑重写应用程序,因为所有语法和库都将发生变化。

我可以问为什么你要离开C#?根据您提供的Joel on Software链接的精神,我希望您能看到坚持使用当前正在运行的代码库(为了它的价值)的好处。是否有一个非常令人信服的理由让这个项目脱离.NET?

答案 7 :(得分:1)

从C#迁移到Java可能是最简单的,因为它们是非常相似的语言。但是,您仍然需要完成所有代码并修改许多内容才能使其成为有效的代码。如果您使用C#的一些最新功能(如LINQ)将会更加困难,因为Java没有类似的功能。

你有什么理由把它从.NET中删除吗?如果没有,不要。但是如果你确实希望在某个时候将它从.NET中删除,那么更快(在代码增长太多之前)。

答案 8 :(得分:1)

我不明白为什么公司决定从稳定的代码库(如.NET)迁移到另一个公司。如果您考虑其他平台,例如从OS应用程序迁移到Web应用程序,Ruby on Rails可能会很好(它的MVC平台很强大)。但到另一个OS应用程序?这将变得艰难。

答案 9 :(得分:1)

(1)有没有简单的过渡方式? (.NET C#等语言)

如果简单地说你的意思相似,那么在语法Java中类似,但是将.NET框架类与Java库匹配将是非常重要的。

(2)你会把它从.NET中删除吗?

没有

(3)如果是这样,有没有简单的语言?

见答案(1)

有几个问题可以帮助我进一步了解你为什么要这样做; 这对您的客户造成什么不便? (只是.NET框架安装?)  如果您正在谈论客户端应用程序,那么您还需要在客户端上安装您的应用程序,我不明白这会给您带来更多不便。

your other similar question你建议你想用C ++重写,这会如何改变不便之处?

您想要定位非Windows用户群吗?

答案 10 :(得分:1)

在某些情况下,从C#转移到C ++可能是有意义的,因此您可以获得非托管代码(即性能)的强大功能。但是有可能不值得努力。

答案 11 :(得分:1)

作为许多问题的答案,取决于。在下面的答案中,我假设您正在谈论Windows窗体应用程序,因为当然,如果您在谈论基于Web的产品,所有这些都不是问题。

听起来你(几乎)决定“脱掉”.NET。我强烈建议你仔细考虑这个决定。特别是看看原因。您已经声明 的原因是您不希望.NET运行时依赖性导致问题。少数人提出的对此的反驳是没有运行时标准的Windows平台变得稀缺。从来没有这样,有一种令人满意的关于精益和平均程序的东西,它不依赖于50Mb的下载。

最终,无论你说的理由是否有效取决于:

  1. 您产品的客户数量;
  2. 他们的地理位置;
  3. 安装产品的典型平台(硬件和软件);
  4. 由于运行时间不存在导致产品无法安装的潜在影响;
  5. 由于运行时依赖性导致的大量下载或繁琐安装的影响。
  6. 毕竟,如果事实证明99%的客户都在现代平台上,那么正如其他人所指出的那样,这就成了一个问题。

    如果结果证明,在分析了上述原因后您的推理是有效的,那么您应该将重写产品的成本与客户满意度/产品销售的预测改进进行比较。改写。为了证明重写的合理性,后者必须绝对是惊人的。当然,我这么说,不知道各种各样的事情,包括:

    1. 代码库的大小;
    2. 产品的复杂性;
    3. 代码库的状态(可维护吗?)。
    4. 就一般的编程语言/平台而言,这些天你几乎不能比C#/ .NET更好,所以假设经过所有的尽职调查,你仍然想“移动”然后你不得不选择一些不需要运行时的东西 - 唯一可以想象的选择是C / C ++或Delphi。

答案 12 :(得分:1)

答案很简单:将您的应用程序移至网络。 所以客户只需要浏览器。

答案 13 :(得分:0)

.NET框架是Windows Update的一部分,因此可能每个客户端都在其计算机上拥有它。或者他们正在运行Linux / Mac OS,但我不认为是这样的,因为你的产品的第1版已经在.NET中运行。

和。几乎所有其他主流语言都需要安装一个单独的运行时(java,PHP等)....

所以我没有看到转换的正当理由。

答案 14 :(得分:0)

到目前为止,大多数回复都回答了C#与“其他”有关的具体问题,但我会回答您需要提出的问题:

  

我没有做任何实际的编程,   但我正在编写规范   程序员。 最多的是什么   有效的方法吗?

很快,什么不该做:指定实现细节,例如使用什么语言。

怎么做:编写User Stories或用例指定您想要的内容和原因。例如:

作为用户,我希望能够通过从互联网上下载单个文件来安装和运行该软件,这样我就不会因为必须找到并安装其他软件而感到不便。 < / p>

您可能希望使用指标来支持这一点:

作为产品经理,我希望能够查看给定时间段内的软件下载次数以及同一时期的软件激活次数,以便确定我们的潜在客户数量成功管理安装和运行软件。

告诉您的团队您想要什么以及为什么,他们会为您提供。