代码之家  ›  专栏  ›  技术社区  ›  Nate CSS Guy

C和.NET框架何时/何地不能成为正确的工具?

  •  11
  • Nate CSS Guy  · 技术社区  · 15 年前

    在我的非编程生活中,我总是尝试使用合适的工具来完成这项工作,我觉得在我的编程生活中我也会这样做,但我发现我选择C和.NET来完成几乎所有的工作。我发现很难提出.NET和C_无法满足的(现实的业务)需求。

    显然,嵌入式系统可能需要比.NET微框架更简单的东西,但我确实在寻找.NET不是最佳工具的业务线类型情况。

    我最初是一个C和.NET家伙,因为它是我最舒服的,但我知道相当数量的C++、PHP、VB、PuthS壳、批处理文件和Java,以及精通Web技术(JavaScript、HTML和CSS)。但我对它持开放的态度,我的技能集,我正在寻找一些案例,其中C和.NET 不是 适合这项工作的工具。

    我选择.NET和C,因为我对它很满意,但我在寻找不合适的情况。

    9 回复  |  直到 14 年前
        1
  •  13
  •   Robert Harvey    15 年前

    而.NET框架可能不是 硬实时应用。 您的应用程序将处理第一次垃圾收集,而实时系统通常有内存限制,使全面的.NET框架不适合。

    也就是说,有很多方法可以解决这些问题,请参见: http://www.windowsfordevices.com/c/a/Windows-For-Devices-Articles/Adding-Realtime-to-Windows-Embedded/

        2
  •  2
  •   Community CDub    8 年前

    对于复杂的算法,尤其是那些受益于并行性的算法,C可能不是一个很好的选择,因为它可以更好地使用函数语言(如F)来表示。

    见: https://stackoverflow.com/questions/141985/why-should-a-net-developer-learn-f

        3
  •  2
  •   Andy Mortimer    15 年前

    实际上,不同的编程语言所提供的问题域之间没有太大的差别。相反,选择通常归结为

    • 您/您的团队已经知道哪些语言可以提高工作效率?
    • 图书馆(内置的或从其他地方获得的)有哪些语言可用?

    因此,这个问题的答案将取决于你。例如,如果我个人在做一个快速的文本处理任务,我会用Perl快速完成它,因为我很了解Perl,并且能够高效地完成这类任务:如果你让我用C语言完成它,我会说这对我来说是一个错误的工具,因为我可以用Perl更快地完成它。

    如果您希望学习和多样化编程工具箱(这是一个好主意),那么您需要询问哪种语言是C语言,而不是询问C语言是错误的工具。 适合每项任务,并努力更好地学习该语言。否则,对于你来说,C永远是所有工作的最佳工具。

        4
  •  2
  •   Carlos    15 年前

    你问了一个有趣的问题。

    我将重新表述它:为什么是面向对象的?为什么是.NET?什么时候不行?

    我想应该记住的是为什么OO如此受欢迎。在现代世界,对节目的需求主要是为了商业。这就是为什么面向对象范式如此流行的原因;它通常是将业务问题转化为程序的最直接的方法。你基本上看一下一个企业,分解一下相互作用的部分(人、机器、地方等),然后用代码来模仿它。所以OO很受欢迎,因为它可以让你模拟许多真实世界的情况。

    .NET很受欢迎,因为它看起来很全面。你得到了大量的组件,你真正要做的就是通过在这些组件之间写一些连接组织来模拟一个商业问题。除此之外,还有一个事实,那就是已经有一个庞大的社区在使用它,而且网络效应也说明了这一点。

    最后,您什么时候不使用.NET?

    如果您的问题不是业务问题(即不仅仅是连接一些预装组件的问题),您可能需要一些不同的东西。例如,如果您正在为新硬件编写驱动程序,那么该驱动程序实际上是业务层下面的一个层,因为

    1)无论组件的组成是什么,它都需要工作。 2)业务层并不真正关心它是如何工作的。

    有很多编程问题,你不会使用OO模型,但我怀疑OO是有用的,因为它连接了所有的部分(不是OO,如数据库和驱动程序)来创建一个整体。

        5
  •  2
  •   Daniel Dolz    15 年前

    我不会将C_用于大量使用资源并需要接近硬件(即高知名度的电脑游戏)的应用程序。

    实时应用(比如一些监控核电站温度的应用,当然除非在runnig中提到荷马·辛普森),但没有提到游戏。

    世界级的3D密集型,IA密集型游戏是最好的服务器,由C++(在LATS的核心),因为你需要接近程序范式和硬件,你需要告诉计算机做什么,怎么做,没有任何中间(CLR)。

        6
  •  1
  •   JUST MY correct OPINION    15 年前

    如果您在具有许多平台的异构环境中工作,那么C和.NET不是正确的解决方案。出于所有实际目的,.NET是一个仅限Microsoft的解决方案(是的,我知道Mono,并且支持我的声明),它将您锁定在一个供应商和硬件体系结构中。如果你的工作场所有Macs、Linux设备、SPARC服务器、PowerPC刀片服务器等,那么C/.NET不会对你有很多好处。

    您还存在供应商锁定问题。假设您在C和.NET中编写了一个服务器应用程序。现在,让我们假设ARM最近对服务器级组件的突袭成功了,装备ARM的服务器套件像霹雳一样冲击了市场。如果你的应用程序使用c/.net,你将一直被托管,直到微软把他们的东西移植到基于ARM的体系结构(如果有——NT曾经支持比现在更多的体系结构:趋势是缩小Windows生态圈,而不是扩展它)。通过将自己锁定在一个特定于供应商的技术中,你就降低了自己在市场变化中的生存能力。

        7
  •  0
  •   dcw    15 年前

    由于它们的加载时间, minimum worknig sets and interactions with the file system 比用编译语言编写的要高得多。

    这并不总是一件坏事,但它确实意味着高效(尽管学习曲线很高)的基于命令行的编程模型(LA-Unix)的使用率会降低,这在我看来是一个耻辱。

        8
  •  0
  •   Hao    15 年前

    伦敦证券交易所最初是用.NET编写的。 http://blogs.computerworld.com/london_stock_exchange_suffers_net_crash

    您可以深入了解为什么使用.NET和任何不确定的内存释放应用程序(又称垃圾收集)会使.NET上的实时系统变得不可修改,请参见以下链接。幽默是额外的 http://tech.slashdot.org/tech/08/09/08/185238.shtml

    他们选择了.NET,选择了使用C++的MilleniumIT http://linux.slashdot.org/story/09/10/06/1742203/London-Stock-Exchange-Rejects-NET-For-Open-Source?from=rss

    对于任何类似物量钱交易和生命物质(汽车引擎的嵌入式设备),你不能让垃圾收集随意而不间断地进行。

    [编辑]

    为什么投反对票,这里有微软的先令吗? 我只是用一般的术语来讨论底层范例.NET的架构(管理和垃圾收集)。也许,如果我只是说,唯一不使用.NET的实例是汽车引擎和与人类相连的机器(如心脏起搏器、透析机),我就不会被否决。

        9
  •  0
  •   Jordão    15 年前

    我最近看了 InfoQ presentation Neil Ford介绍了一个thoughtworks项目,该项目选择Ruby on Rails而不是.NET,因为据称Rails和Ruby具有更好的灵活性。看看他们对这个问题的看法。