csharplang更新されてないかなーとみてたらC# Language Design Meetingsが更新されてたのでそれの10/15と10/17の分の内容を紹介します。
C# Language Design Notes for Oct 15, 2018
csharplang/meetings/2018/LDM-2018-10-15.md at main · dotnet/csharplang
The official repo for the design of the C# programming language - dotnet/csharplang
github.com
Function pointers
パフォーマンスチューニングを頑張るとデリゲートが辛くなるということで関数ポインターを導入しようという話になっているようですが、構文はFunc<TArg, TResult>*
のようにするのではなくfuncptr TResult Func(TArg arg);
のようにするという方向で傾いているようです。
Readonly struct members
内容としてはreadonly structを追加したけどすべてのフィールドをreadonlyにするのは難しいから、メソッドにreadonly制約(=メソッド呼び出しで構造体の状態変更が起きない)を設けようという話です。
Issueではpublic void Method() readonly{}
のように後置修飾子のように提案されていたですが、ミーティングの結果、他の修飾子のように前置にするようです。
Syntax of foreach await / using await
Async Stream関連の機能として、foreachに対してawaitしたい需要が出てきましたが、それの構文をどうするかという内容です。
案としては
- foreach await ()
- foreach async ()
- async foreach ()
などがあったようですが、await foreach ()
とawait using ()
に決まったようです。
C# Language Design Notes for Oct 17, 2018
csharplang/meetings/2018/LDM-2018-10-17.md at main · dotnet/csharplang
The official repo for the design of the C# programming language - dotnet/csharplang
github.com
Issues in default interface methods
interfaceにデフォルト実装を許そうという話の諸所のミーティングのようです。
Diamond inheritance
interface IA
{
void Method() { }
}
class B : Base, IA { }
class Base : Base0
{
public virtual void Method() { }
}
class Base0 : IFoo
{
void IA.Method() { }
}
interfaceのデフォルト実装と、クラスの実装が合わさってダイヤモンド継承した場合どうするか?という話のようです。
結論としては、ダイヤモンド継承が起き、一意のメソッドに解決できなければ、デリゲートが解決されるときに例外を出そうということみたい。デリゲートが解決されるというのはメソッドを呼び出すタイミングではなくメソッドを解決しようとするタイミングということです。
Permit partial in interface?
クラスのようにinterfaceにpartialを許容するかという内容で、クラスのように制限はあるが許すようですが、partial interfaceの話は初耳ですね、、、どこか英文解釈ミスしてるかな?
10/17日の分はこれ以外に細かいことがいろいろとありましたが、細かいことなので省略させていただきます。