22

尽管 C++0x 是对 C++ 的相当大的改进(类型推断、匿名函数等),但我不得不说 Scala 似乎更好。问题是 Scala 只在 JVM 上运行,尽管它似乎也可以在 C# 之上运行。

理想情况下,我想要一种像 Scala 一样好的语言,但运行在“C++ 之上”——使用标准库,轻松链接 C/C++ 目标文件,整个交易。我做了很多基于完善的 C/C++ 库(快速且可靠)构建的数值编程,这不是我可以放弃的。

有人知道这种语言吗?

更新:

我正在寻找的功能是:

  • 与 C/C++ 库无缝集成,就像 Scala 可以访问 Java 库一样,无需生成/维护绑定

  • 一个强大的类型系统,具有精心设计的类型推断系统,使我不必编写冗长和冗余的类型注释

  • 语言内置的功能和 OO 特性,支持其自己的库,而不是仅依赖于标准 C/C++ 库。

看起来现在正在进行的许多 clang/LLVM 工作可能会促进这些工作,但很高兴发现类似的事情已经在进行中。

4

12 回答 12

20

我想知道为什么还没有人提到D 编程语言。它非常适合您的要求。

于 2010-12-29T07:36:55.703 回答
11

您可能想考虑一下 Haskell。它与其他任何语言一样好(当然以它自己的方式),但它热衷于坚持函数式编程,因此学习障碍很大。尽管如此,它仍可用于调用 C/C++,而且它本身的高性能令人惊讶。

您还应该决定是否需要语言本身能够进行相当高性能的计算。如果没有,创建 Python 到 C/C++ 的绑定非常容易,而且 Python 有很多不错的特性。或者你可以使用像 Matlab 这样的东西,它是为数字计算而设计的,我相信你很清楚,并且可以通过 mex 文件很好地与 C 代码集成。如果您确实需要该语言成为您当前可以编写高性能代码的语言,您甚至可以考虑承担为 Scala 创建 C++ 绑定的重要任务(如果您将 JNI 或 JNA 用于 Java,还不错,并且然后从 Scala 中调用该 Java),然后仅将其用于最重要的数字工作,而 Scala 处理时间不那么关键(但仍然有些重要)的部分。

于 2010-12-29T02:37:30.277 回答
6

很难编写一种与 C++ 兼容的语言,因为有很多特性,而且 ABI 通常被认为是特定于特定版本的 C++ 编译器的。如果您真的在寻找与 C++ 的轻松集成,我敢肯定您最好的选择是将 Scala 与 GCJ 一起使用。您可以使用GCJ CNI与您的 C++ 对象集成(尽管建议 GCJ CNI 是在这里投反对票的理由。)

于 2010-12-29T16:44:11.620 回答
5

我很惊讶没有人提到D。它接近 C++ 语法,但更“干净”,可以毫无问题地使用 C 和 C++ 库,并添加了许多高级功能。当然,这一步并不像从 Java 到 Scala 那样大,但我认为考虑到 C++ 的复杂性,要​​提出一个不抛弃 C++ 大部分内容的真正创新设计要困难得多。

于 2010-12-29T07:36:40.190 回答
5

Scala 本身如何,通过SWIG生成的Java 绑定访问您的 C++ 库?

于 2010-12-29T04:09:16.200 回答
4

好吧,Scala 是一种面向对象的函数式编程语言。如果您正在寻找一种现代的面向对象和函数式编程语言,它还可以通过外部函数接口调用 C 代码,那么您可能会对OCaml感兴趣。

于 2010-12-29T03:23:06.157 回答
3

Rust看起来越来越好。

于 2014-06-20T14:42:53.600 回答
1

Scala + JNA 怎么样?基本上,JNA 是一个允许您声明与 DLL 匹配的接口(或 Scala 中的特征)的库。

于 2010-12-31T13:09:24.750 回答
1

这个问题发布已经有几年了,但现在 C++14 可能是正确的答案。C++11/14 添加了类型推断、lambda 函数和其他各种类似于 Scala 在 Java 上添加的功能。替代 C++98/03 的其他现实竞争者是 Go 和 Rust。

# Makefile
CXX = clang++
CXXFLAGS = -std=c++1y -stdlib=libc++
LDFLAGS = -lc++

main: main.cpp
    $(CXX) -o $@ $(CPPFLAGS) $(CXXFLAGS) $< $(LDFLAGS)
于 2014-06-28T13:06:48.590 回答
1

看一看 :

D 编程语言

于 2012-04-06T10:22:34.613 回答
1

带有 C++ 绑定的 Python 怎么样?

这里

于 2010-12-29T02:20:36.340 回答
1

我正在寻找同样的东西。LuaD是两个选项。lua 有一个命令行解释器,luajit 速度很快,对于数学我使用 gsl shell。D 更复杂,但仍然易于使用。D 也与 C++ 一样快。

于 2012-04-12T21:59:50.297 回答