マイクロソフトは、次世代プログラミング言語、システムプログラミング用のC#について話し始めました

読書時間アイコン 3分。 読んだ


読者は MSpoweruser のサポートを支援します。私たちのリンクを通じて購入すると、手数料が発生する場合があります。 ツールチップアイコン

MSPoweruser の編集チームの維持にどのように貢献できるかについては、開示ページをお読みください。 続きを読む

Microsoftのリサーチオペレーティングシステムのアーキテクト兼開発者であるJoeDuffyは、過去XNUMX年間に取り組んできた次世代プログラミング言語についてブログに書いています。 Microsoftは現在、この今後の言語をC#の「システムプログラミング」拡張機能として説明しています。 Microsoftは、この言語を、安全性と生産性を重視するC#、Javaなどと、パフォーマンスを重視するC++との間のクロスとして売り込もうとしています。

この言語の6つの重要な機能は次のとおりです。

)生涯の理解。 C ++には、RAII、決定論的破棄、およびオブジェクトの効率的な割り当てがあります。 C#とJavaはどちらも、開発者をGCヒープに過度に依存するように誘導し、IDisposableを介した決定論的破壊の「緩い」サポートのみを提供します。 私のチームが行っていることの一部は、C#プログラムをこの新しい言語に定期的に変換することです。また、GCで30〜50%の時間が費やされることも珍しくありません。 サーバーの場合、これによりスループットが低下します。 クライアントの場合、インタラクションに遅延を注入することにより、エクスペリエンスが低下します。 C ++からページを盗みました—右辺値参照、移動セマンティクス、破棄、参照/借用などの領域で—それでも安全性の必要な要素を保持し、それらを関数型言語のアイデアとマージしました。 これにより、オブジェクトの割り当てを積極的にスタックしたり、決定論的に破棄したりすることができます。

2)副作用の理解。 これは、OOPSLA 2012で公開したものの進化形であり、ファーストクラスの不変性と分離に加えて、C ++ constの要素を提供します(ただし、これも安全です)。

3)大規模な非同期プログラミング。 コミュニティは、これについて「ラウンド」と「ラウンド」を繰り返してきました。つまり、継続渡しまたは軽量のブロッキングコルーチンを使用するかどうかです。 これにはC#が含まれますが、地球上の他のほとんどすべての言語も含まれます。 ここでの重要な革新は、実行モデルにとらわれず、どちらにも効率的にマッピングできる構成可能な型システムです。 このようなものを公開する正しい方法がXNUMXつあると主張するのは傲慢ですが、他の多くのアプローチの経験があるので、私は着陸した場所が大好きです。

4)タイプセーフなシステムプログラミング。 型安全性には本質的にパフォーマンスの低下が伴うと一般的に言われています。 境界チェックは交渉不可能であり、デフォルトではオーバーフローチェックを好むのは事実です。 JITコンパイルと比較して、優れた最適化コンパイラがここで何ができるかは驚くべきことです。 (そして、これらの機能にメリットがある理由を確認するために、最近のセキュリティ情報を何気なく監査するだけで済みます。)他の領域には、割り当てなしでより多くのことを実行できるようにすることが含まれます。 ゼロ割り当てで呼び出すことができるラムダベースのAPIがあるように(通常のXNUMXつではなく:XNUMXつはデリゲート用、もうXNUMXつは表示用)。 また、割り当てなしでサブ配列とサブ文字列を簡単に切り分けることができます。

5)最新のエラーモデル。 これは、コミュニティが同意しないもう1つの問題です。 私たちがスイートスポットと信じているものを選びました:どこでも契約(前提条件、事後条件、不変条件、アサーションなど)、デフォルトポリシーとしてのフェイルファスト、まれな動的障害の例外(解析、I / Oなど)、リッチな例外が絶対に必要な場合にのみ、例外を入力します。 すべてがファーストクラスの方法で型システムに統合されているため、安全で健全なものにするために必要なすべての適切なサブタイピング動作を取得できます。

6)最新のフレームワーク。 これは、非同期LINQ、パフォーマンスでC ++イテレータと競合し、要素を抽出するためのダブルインターフェイスディスパッチを必要としない改善された列挙子サポートなどをカバーするキャッチオールバケットです。正直なところ、これは私たちが持っている領域です。 「設計されているがまだ実装されていない機能」の最大のリスト。void-as-a-1st-class-type、non-null types、traits、first classeffecttypingなどにまたがっています。 1年半ばのチェックポイントには、これらのいくつかがあると思いますが、すべてではありません。

リンクからもっと読む こちら.

トピックの詳細: c#, 開発者, マイクロソフト