ufcpp / UfcppSample

http://ufcpp.net/ 向けのサンプル
Apache License 2.0
136 stars 39 forks source link

新機能の実装方法(modreq + RuntimeFeature) #295

Open ufcpp opened 4 years ago

ufcpp commented 4 years ago

以下の辺りをまとめて「新機能の実装方法」みたいなページを1つ作ってもいいかも

話の流れ:

書く場所:

ModReq

mod (custom modifier)は、属性と似た仕組みだけど、フィールドとかプロパティじゃなくて、型の方に付くものらしい。

modopt と modreq があって、optional (わからなかったら無視していい)か required (解釈が必須。わからない場合その型を使っているものに触れてはいけない)かの差。

C# ではほとんど使ってこなかったんだけど、C# 7.2 くらいから modreq を使い始めてる。 (元々は Managed C++ で volatile 引数とか const メソッドとかのために使ってたみたい。)

mod (型に付く修飾)を期待してるわけじゃなくて、req (わからない場合触れてはいけない)の方に期待してるみたい。

in 引数とか unmanaged 制約とか、正しく解釈できない古いバージョンのコンパイラーから触られるとまずいものに付けて運用してる。

C# 9.0 では、initonly (プロパティの init アクセサ―)に modreq を付ける運用するみたいなので、この機に modreq の話を足したい。

というか、7.2、8.0 の時にちらほら見かける単語だなと思ってたけどあまりにも情報がなくて。 やっと調べがついたのでこの機に。

ufcpp commented 3 years ago

https://github.com/ufcpp/UfcppSample/issues/297#issuecomment-792225924 init-only プロパティの項目に modreq については別途説明予定との記載あり。

ufcpp commented 2 years ago

CompilerFeatureRequiredAttribute (modreq を使えないところがあったり、modreq を出しちゃうとバイナリ互換壊しかねない場所で、普通に属性でやるとか言ってる) runtime/issues/66167