ベストアンサー
「システムプログラミング」と「ベスト」の意味によって異なります。
たとえば、ATS(http://www.ats-lang.org/)は、すべての基準などを満たす可能性があります。これは、高レベルの同時実行機能を備えた安全な言語であり、機能のサポートは必要ですが、必須ではありません。スタイル、そして非常に優れたパフォーマンス。紙の上で最高の1つであっても、使用する人が十分でなく、「異なる」ように見えるため、「最高」ではない場合があります。
反対に、Cはさまざまな理由でひどいです。手動のメモリ管理はバグの大きな原因であり、並行設定で正しく実行するのはさらに困難です。概念的に金属に近い状態を維持することで、次のことができなくなります。動作するコードをより速く生成できるように抽象化し、並列化が難しいレベルで物事を書くことを奨励します。一方、他のコンパイラが不足しているハードウェアで実行する必要がある場合、またはカーネルプログラマを雇う必要がある場合は、これが最適なシステムプログラミング言語である可能性があります。
言うのは辛いですが、私はその設計のいくつかの側面に根本的に同意しないので、Goを見てみることをお勧めします。彼らの設計基準はあなたの要件とかなりよく一致しているようです。
回答
あなたが求めているのは、どちらも心配する必要のない抽象化を提供する「言語」のようです。複雑な作業(つまり、同時実行性を最初から構築する必要がない)について、しかも高性能でリソースを節約できます。また、「システム」タスクであるため、すべてのハードウェアに直接リンクできる必要があります。面倒な作業のほとんどがすでに解決されているもの(言語または利用可能なライブラリのイディオム、あるいはその両方)。また、VMの代わりにネイティブコンパイラが必要になります。
この場合私が「最良」かどうかは絶対にわかりません。多くの選択肢があり、私が知っている小さなグループの多くでさえあります。「本当に」「最高」に到達したい場合は、先入観なしにすべての言語のリストを生成する必要があります。次に、省略して洗練を開始します。すべての要件を確認し、言語(またはそのツール)が要件に対して十分でない要件を省略します(または少なくともリストの下に移動します)。
抽象化要件は、おそらくCとを削除します。リストからの同類ですが、おそらくC ++の新しい更新により、引き続き実行されます。
すべてのVMベースは、何らかの面で失敗する可能性があります(必ずしもそうではありませんが、何らかの方法が必要です)。その少なくとも一部をネイティブに作成/変換すること)。つまり、それらのJava / PVM / DotNet / etcです。言語ファミリーもおそらく省略できます。
ハードウェアリンクはかなりの数を削除する可能性がありますが、回避するために複数の言語(または言語ファミリー)を使用することは不可能ではないことに注意してください。この要件。たとえば、システムタスクのスタック全体にCを使用することは不可能です。すべてのシステムのブート部分の少なくとも一部はアセンブリで記述され、その上に多くのシステムがより高いレベルで記述されます。 「C」部分。ほとんどの場合、それは「すでに作成されたものを使用するだけの状況」および/またはそれらが収まる場所により適したものを使用してそれに追加する状況です。したがって、おそらく(同じように)ライブラリ/「プラグイン」を入手できます。これにより、任意の言語がハードウェアに直接影響を与えることができます。これによりパフォーマンスやリソースエコノミーなどが削除されるかどうかは、テストと代替の組み合わせ思考が必要になる別の問題です(たとえば、Lispのアクター「スレッド」から呼び出されるCでアトミックディスクアクセスルーチンを作成し、オーバーヘッドが発生する可能性がありますか?各アトミック呼び出しは独自のリソースを使用し、CFFI呼び出しのためにパフォーマンスが失われる可能性があります。
そして、白象(およびCが非常に遍在する主な理由)は例です。それははるかに困難です。サンプルを見つけるのが難しい、または存在しない他の言語で何かを試すこと。同じことを「自分のやり方」で行うのではなく、最初に行うことは常に非常に困難です。
このルートを使用すると、膨大な言語リストの大部分をすぐに削除できます。ただし、最も時間のかかるアクションは、各言語を調査して、要件ごとに他の言語に対してどのように測定されるかを調べることです。これがほとんどの人が気にしない理由ですそして、(長期的には)Cのようなものに固執するだけで、「より良い」ものをより速く作成できる可能性があります。