【发布时间】:2010-11-12 00:40:26
【问题描述】:
我是一名主要使用 C++ 的科学家,但我想找到一种更好的语言。我正在寻找建议,我什至不确定我的“梦想语言”是否存在,但这是我的愿望清单;
重要特征 (按重要性排序)
1.1:性能:对于科学来说,性能非常重要。我完全理解生产力的重要性,不仅是执行速度,而且当你的程序必须运行几个小时时,你就不能用 Python 或 Ruby 编写它。它不需要像 C++ 一样快,但它必须相当接近(例如:Fortran、Java、C#、OCaml...)。
1.2:高级而优雅:我希望能够尽可能地专注于科学并获得清晰的代码。我也不喜欢像 Java 这样冗长的语言。
1.3:主要是函数式:我喜欢函数式编程,我认为它非常适合我的风格和科学编程。我不在乎语言是否支持命令式编程,这可能是一个加分项,但它必须关注并鼓励函数式编程。
1.4:可移植性:应该在 Linux(尤其是 Linux!)、Mac 和 Windows 上运行良好。不,我不认为 F# 在带有单声道的 Linux 上运行良好,而且我不确定 OCaml 在 Windows 上运行良好;)
1.5:面向对象,最好遵循“一切都是对象”的理念: 不久前,当我不得不处理纯 C 语言时,我意识到我是多么喜欢面向对象编程。我喜欢坚定致力于面向对象编程的语言,而不仅仅是胆小的支持。
不是很重要,但会很好的事情
2.1:“不太强”类型:我发现 Haskell 的强类型系统很烦人,我喜欢能够进行一些隐式转换。
2.2:工具: 好的工具总是加分项,但我想这真的取决于语言。我使用轻量级编辑器 Geany 与 Haskell 一起玩,我从不觉得有缺陷。另一方面,我不会对 Java 甚至 Scala 做同样的事情(特别是 Scala,似乎缺乏好的工具,这真的很可惜)。 Java 在这里确实是排名第一的语言,使用 NetBeans 和 Javadoc,使用 Java 编程既简单又有趣。
2.3:垃圾收集,但没有虚拟机翻译或编译。我对虚拟机没有任何反感,但领域中的两大巨头各有各的问题。在纸面上,.net 框架似乎要好得多,并且特别适合函数式编程,但实际上它仍然非常以 Windows 为中心,并且对 Linux/MacOS 的支持terrible不如应有的好,所以这并不值得考虑。 Java 现在是一个成熟的 VM,但它在某些层面上让我很恼火:我不喜欢它处理可执行文件、泛型的方式,而且它编写的 GUI 很糟糕(尽管这些东西还不错)。
【问题讨论】:
-
虚拟机与 GUI 究竟有什么关系。 JVM 将在甚至没有屏幕的机器上运行。
-
如果您最近没有跟上 C# 的步伐,请注意最新版本比您想象的更实用。你也许可以用你喜欢的 C# 风格编写程序。
-
@Drew:也许吧,但是 Mono 支持吗?
-
您需要什么类型的计算才能快速执行?有很多数学库可以快速完成某些事情,即使是像 python 这样的“慢”语言。
-
相当大的模拟。我经常需要生成数以亿计的随机数。 Python 是我的第二语言,我真的很喜欢它。我知道您可以将 C/C++ 与它一起使用,但我不确定它是否适用于我的情况(我可能会就此提出一个新问题,这可能会更容易)。
标签: programming-languages functional-programming