15

私はScalaに絶対に満足していて、それが大好きです:)

しかし、JVMを使用せず、「クールな」CPU(SSEなどの機能)を使用して、もう少し「低レベル」にしたい場合があります。

では、Scala以外に良い第二言語は何でしょうか?

そのはず:

  • マシンコードにコンパイル
  • Cライブラリの使いやすさ
  • ハードウェアに非常に近いプログラミングが可能
  • 私がしたいときに非常にハイレベルな方法でプログラムすることが可能

ですから、基本的には、インラインアセンブラを必要なときに投入できるScalaが必要です:)そのような言語は存在しないと思いますが、近い言語もあるかもしれません。

では、何が良い選択でしょうか?C ++?、D?、OCaml?

私はC++(15年前)で少しプログラムしましたが、OCamlではほとんどプログラムしませんでした。どちらの場合も、私はいくつかの問題を解決しただけで、言語自体に非常に「深く」入り込むことはありませんでした。

4

10 に答える 10

18

あなたはほとんどDを説明しています。

  • マシンコードにコンパイル:チェック。実験的な.NETVM実装がありますが、3つの主要な実装(DMD、LDC、GDC)はすべてネイティブコードに直接コンパイルされ、言語はネイティブコンパイルを実行可能にするように設計されています。

  • Cライブラリの簡単な使用法:DはCABIおよびすべてのCタイプをサポートします。あなたがしなければならないことのほとんどは、Cオブジェクトファイルのヘッダーファイルとリンクを翻訳することです。これは部分的に自動化することもできます。

  • ハードウェアの非常に近くでプログラムすることが可能です:チェックしてください。Dは、私がCの慣用的なスーパーセットと呼んでいるものです。C構文のすべての部分をサポートしているわけではなく、モジュールシステムは完全に異なり、静的配列はD2の値型です。 (つまり、プリプロセッサを除く)Dまたは標準ライブラリに同等の構造があります。すべてのCコード(プリプロセッサの乱用を除く)には、ほぼ同じように見える正規のD変換があり、同じコンパイラバックエンドを使用している場合は同じアセンブリ言語命令を生成する必要があります。言い換えると、すべてのCイディオム(プリプロセッサの乱用を除く)は、簡単な方法でDに変換できます。

    Dのリファレンス実装はインラインASMもサポートしているため、SSEなどをいじることができます。

  • 私がしたいときに非常に高レベルの方法でプログラムすることが可能です:チェック。Dは、主にガベージコレクションされた言語として設計されています(ただし、GCを想定したライブラリ/ランタイム機能を使用しないように主張し、注意する場合は、手動のメモリ管理を使用できます)。それ以外は、高水準プログラミングは主にテンプレートメタプログラミングを介して実装されます。 逃げる前に、DでのテンプレートメタプログラミングがC++と比較して大幅に改善されていることを理解してください。 D対C++でテンプレートメタプログラミングを行うことは、C ++対Cでオブジェクト指向プログラミングを行うことに似ています。Dテンプレートメタプログラミングは言語に合わせて設計されていますが、C ++では、巧妙なハックネスを使用してほとんど機能しないようにするのに十分な機能があります。C++とCのオブジェクト指向プログラミングについても同じことが言えます。Phobosのstd.algorithmおよびstd.rangeモジュールは、Dの高レベルサブセットの良い例です。

于 2010-10-30T22:00:11.670 に答える
8

あなたの質問で言及された基準を満たすものがいくつかあります:

于 2010-10-31T06:17:44.077 に答える
6

私は現在Cプロジェクトを行っていて、非常に非生産的で、Scalaも見当たらないので、これについても考えています。(私も更新世でたくさんのC ++をしました...)私は行くことに切り替えるかもしれません。Dも魅力的に見えます。

問題に意味がある場合の別のオプションは、C+LuaやRubyなどのスクリプト言語を使用することです。これは、Unix+シェルとemacsが永遠に行ってきたことです。必要なときにパフォーマンスと低レベルのビットをいじり、それがより重要なときに生産性を得ることができます。

于 2010-10-30T21:35:21.107 に答える
5

C ++ 0X、Erlang、そして多分HaskellandGo。C ++とErlangには強力なユーザーベースがあり、C++0xとErlangで利用できる多くのジョブがあります。(C / C ++の相互運用性がGoとどれほど優れているかはわかりません)

C ++ 0X( "cee plus plus oh ex")は良いオプションです。それはlamda関数と他の良いものを持っています。

C ++ 0X TechDays 2010のウォークトラフ:C++0xを使用した最新のプログラミング

また、C ++ 0Xは、Ob​​jects and Implicitsとしての型クラス、Oliviera、Moors、Odersky、OOPSLA 2010に記載されているように、優れたジェネリックスサポートを備えています。以下の図12を参照してください。

オブジェクトおよび暗黙としての型クラスからの図12

于 2010-10-31T10:49:19.867 に答える
3

通常のコードでアセンブリ言語をインライン化できるため、要件に合うのはC /C++です。Cライブラリの呼び出しは自然なことです:)

適合するもう1つのことは、アセンブリ言語のHLA実装です(wikiの記事はこちら)。これは、初心者が簡単に(そしてより速く)学習できるようにする(「適切な」ネイティブコードにコンパイルされる)ための多くの高水準構造を使用したアセンブリです。

于 2010-10-30T21:36:10.780 に答える
2

DやBitCと同様に、ooc(http://www.ooc-lang.org/)には、Scala(またはHaskell)ファンにアピールする多くの機能があります。

于 2010-11-02T14:22:19.340 に答える
2

あなたの要件に基づいて、ニムロッドもここで有効な候補だと思います。

于 2014-03-15T07:14:14.403 に答える
1

最下位レベルのプログラミングにCまたはC++を使用し、それをScalaライブラリーでJNIまたはJNAでラップすることを検討してください。場合によっては、この方法でケーキを食べて食べることもできます。

于 2010-10-31T19:18:51.310 に答える
1

Goを見てください。

于 2010-10-30T22:24:23.367 に答える
1

それはまだ非常に新しいですが、Valaを見てください。これは、GObjectケーキの構文上のフロスティングの甘い層であり、純粋なCにコンパイルされています。

クロージャや限定型推論などの機能をサポートします。

于 2010-10-31T10:52:19.550 に答える