我正在考虑编写新的软件产品。性能将是至关重要的,因此我对使用一种解释性语言或使用仿真层的语言(阅读Java)保持警惕。
这使我想到了使用C(或C ++)的想法,但是它们都相当长。我很久没用了。我认为在过去的20年中,有人可能创建了相当流行的东西,可以很好地编码和编译。
有什么比C更现代的替代方法来编写高性能的已编译代码?
如果说C ++与15年前是不同的野兽,我会考虑一下,我想我假设它有一些固有的问题。
并行化很重要,但可能不会跨多台计算机。
我正在考虑编写新的软件产品。性能将是至关重要的,因此我对使用一种解释性语言或使用仿真层的语言(阅读Java)保持警惕。
这使我想到了使用C(或C ++)的想法,但是它们都相当长。我很久没用了。我认为在过去的20年中,有人可能创建了相当流行的东西,可以很好地编码和编译。
有什么比C更现代的替代方法来编写高性能的已编译代码?
如果说C ++与15年前是不同的野兽,我会考虑一下,我想我假设它有一些固有的问题。
并行化很重要,但可能不会跨多台计算机。
Answers:
开发中的一种语言称为Rust编程语言,其追求的目标与C ++相似,尤其是零成本抽象和对内存管理的精细控制。也就是说,尽管还很年轻,但它可能是即将到来的最著名的候选人。
除了Rust之外,实际上没有其他流行的替代方法可以编译为本机代码。当然也有Delphi和D,但是它们不那么快,不受欢迎或不常用。谷歌的Go语言可能是一种候选语言,但它还很年轻,并且目标领域有所不同。
但是,请注意,即使C#(假定为Microsoft平台)和Java运行在虚拟机之上,它们的运行速度也可能不会那么慢。由于缺少程序状态和环境的信息,因此代码的即时编译可以进行一些传统的提前编译器无法应用的优化。
坦率地说,如果可以选择使用C ++,我个人不认为C是候选对象,主要是因为现代C ++更安全,可以在更高的抽象水平上运行,更具表达性,并且几乎没有C的性能损失(在某些情况下) C ++明显更快)。简而言之,C ++提供了C提供的一切以及更多功能。大多数C功能被认为“已弃用”,C ++标准库提供了更好,更安全,更快和更直观的替代方法。
还有Ada,它可以编译为本地代码,并且可以在其标准库的范围内跨各种平台移植。该语言非常生动,目前正在进行最新的语言标准更新(称为Ada 2012)。
那些不熟悉Ada的人的简要概述:
人们为什么总是坚持寻找新语言?
C ++:
C ++的唯一缺点是您必须学习一些知识。而已。
将该语言与以下一种或多种其他语言进行比较:
恕我直言,我们将使用和支持的语言越少,情况就会越好。
这会导致语言,支持,文档,标准化委员会的工作框架自动改进,书籍更好,知识更多,软件更容易支持,更好的模式,更长的语言支持周期以及使用该语言编写的更熟练的代码。
我知道人们会对此表示反对,但请认真考虑。
const
正确性问题以及类似的东西引起的。读过有效C ++(如Coder所声称的那样)并坚持认为C ++简单易行的任何人都存在精神上的脱节。
C / C ++太长了。。。这是一件好事。这意味着它们的设计足够好(糟糕),它们仍然非常有用,许多人将它们用于日常任务,并且您会发现很多开发人员都是其中的专家。成熟是值得珍惜的。
如果您将所有时间都花在寻找新事物上,仅仅因为它是新事物,并因此认为那一定是更好的话,那么您会感到非常失望。这适用于软件语言,GUI系统(请注意,Microsoft和Gnome)和爱好者(请注意,年轻女士:))
现在可以肯定的是,如果您的C ++经验已有20年之久,而当C ++代码通常像C一样编码时,那么也许是时候重新评估该语言了,使用了当日从未使用过的所有功能。如今,语言有了更多的发展,并且一些标准化工作使该语言略有扩展,使其看起来与那些旧的C样式开发有很大不同。并不是说C也很糟糕-它对于许多类型的编码任务来说也是一种完美的语言!
C ++的当前标准是C ++ 11,该标准于2011年发布。因此它不是20岁的标准。两者之间有许多标准。它们每个都带来了许多性能改进。
编译器也在不断改进。与过去相比,它们在优化方面要好得多。
可执行格式也有所改进,在20年前您有了a.out,现在有了ELF。
总的来说,关于C ++在20年内没有改变的建议离事实还很远。
另外,请记住,C和C ++是非常不同的语言。
我不是这种语言的专家,但是我认为OCaml可能是一个有趣的选择。
OCaml是一种编译的,功能/面向对象的语言。有关与C ++的性能比较,请参见C ++与OCaml:Ray Tracer比较。当然,这是一个非常具体的示例,应该进行更广泛的测试,以更好地了解OCaml的性能。
取决于您的产品将要做什么。如果性能真的很关键,那么首选的语言仍然是FORTRAN。我也不排除Java-它已在许多大容量金融交易应用程序中使用。如果您的问题域需要高并发性,那么Erlang值得一看。尽管我不知道它在Apple生态系统之外(除编译器和基本运行时之外)的支持程度如何,但Objective-C很好。我也听说过有关Haskell性能的好消息,但是我不确定这是绝对性能还是相对于其他功能语言的性能。
当您说您的项目对性能敏感时,您的意思是项目的每一行代码吗?还是像平常一样,是否有较小百分比的性能受到批评,而其余部分是您对工厂业务代码的常规运行?
回答完之后,您的项目面临的最大风险是:最终结果太慢,或者您从未首先完成它?
假设您都回答了第二个问题,则应该使用支持本机互操作的高级语言进行开发(Python,Ruby,.Net系列都具有此功能)。首先,完成项目。然后剖析,优化,冲洗,重复。只有在那之后,才考虑在本机代码中重新请求应用程序的选择段,并将该本机代码与最终产品集成在一起。
Objective-C是现代的,经过编译的替代直接C和C ++的替代方案。它具有垃圾收集和确定性内存管理功能,并且消息传递的OO运行时已针对性能进行了优化。
它可以通过GCC和CLang获得,并且有可以在各种平台上工作的应用程序库,例如GNUStep和Cocotron。
如果您要执行高性能的工作,那么我将假定这是一种数字运算或其他分而治之的工作,而不是UI,这意味着您可以使用最适合您的语言进行UI,例如通过小型http服务器的HTML。