22

C++0x は C++ (型推論、無名関数など) よりも大幅に改善されていますが、Scala はさらに優れているように思われます。問題は、Scala は JVM でのみ実行されることですが、C# の上でも実行できるようです。

理想的には、Scala と同じくらい優れた言語が欲しいのですが、C++ の「上で」実行されます。つまり、標準ライブラリを使用して、C/C++ オブジェクト ファイルに簡単にリンクできます。私はよく確立された C/C++ ライブラリ (高速で信頼できる) の上に構築された多くの数値プログラミングを行っていますが、それから離れることはできません。

そのような言語を知っている人はいますか?

アップデート:

私が探している機能は次のとおりです。

  • C/C++ ライブラリとのシームレスな統合。Scala が Java ライブラリにアクセスできるように、バインディングを生成/維持する必要はありません。

  • 強力な型システム。適切に設計された型推論システムを備えているため、冗長で冗長な型注釈を記述する必要がありません。

  • 標準の C/C++ ライブラリのみに依存するのではなく、独自のライブラリをサポートして、言語に組み込まれた関数および OO 機能。

現在行われているclang/LLVMの作業の多くは、これらの線に沿った作業を容易にするように思われますが、このようなものがすでに作業されていることがわかってうれしいです.

4

12 に答える 12

20

D プログラミング言語についてまだ誰も言及していないのはなぜだろうか。お客様の要件に最適です。

于 2010-12-29T07:36:55.703 に答える
11

Haskell について考えてみてください。他のどの言語よりも優れていますが (もちろん、独自の方法で)、関数型プログラミングに忠実であるため、学習への障壁はかなりのものです。それでも、C/C++ の呼び出しに使用でき、それ自体で驚くほど高性能です。

また、言語自体がかなり高性能なコンピューティングを実行できるようにする必要があるかどうかも判断する必要があります。そうでない場合でも、C/C++ への Python バインディングを作成するのは非常に簡単です。また、Python にはかなりの優れた機能があります。または、数値計算用に設計された Matlab のようなものを使用することもできます。これは、ご存知のとおり、mex ファイルを介して C コードとうまく統合できます。現時点で高性能コードを記述できる言語にする必要がある場合は、Scala 用の C++ バインディングを作成するという重要なタスクを引き受けることを検討することもできます (Java 用に JNI または JNA を使用している場合はそれほど悪くはありません。次に、その Java を Scala から呼び出します)、最も重要な数値処理にのみそれを使用し、Scala はタイム クリティカルではない (ただし、多少重要な) 部分を処理します。

于 2010-12-29T02:37:30.277 に答える
6

C ++と互換性のある言語を書くのは難しいです。なぜなら、非常に多くの機能があり、ABIは一般にC++コンパイラの特定のバージョンに固有であると考えられているからです。あなたが本当にC++との簡単な統合を探しているなら、私はあなたの最善の策はGCJでScalaを使うことだと思います。GCJCNIを使用してC++オブジェクトと統合できます(ただし、GCJ CNIがこのあたりの反対票の根拠であることを示唆しています)

于 2010-12-29T16:44:11.620 に答える
5

SWIGで生成されたJavaバインディングを介してC++ライブラリにアクセスできるScala自体はどうですか?

于 2010-12-29T04:09:16.200 に答える
5

誰もDについて言及していないことに驚いています。これは C++ 構文に近いですが、より「クリーン」で、C および C++ ライブラリを問題なく使用でき、多くの高度な機能が追加されています。確かに、Java から Scala への移行ほど大きなステップではありませんが、C++ の複雑さを考えると、C++ のほとんどの部分を捨てずに本当に革新的な設計を考え出すのははるかに難しいと思います。

于 2010-12-29T07:36:40.190 に答える
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 では、型推論、ラムダ関数、および Java に追加された Scala に類似したその他のさまざまな機能が追加されています。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 に答える