何のために作ってるかというと、
5bitの符号あり整数のxと、yと、3bitの符号無し整数のa、と51bitの符号あり整数のbで64bitに詰められてるバイナリ形式
みたいなややこしいのの読み書きするやつを手っ取り早く書く時に手抜きするために使うやつ><
一応動く所までできた気がするからgistに貼った><
一応ちゃんと動く気がする、2~63bitの任意の長さのbit長のSigned/Unsignedの整数になる可変的な整数型っぽいもの>< - https://gist.github.com/orange-in-space/e0e824e5ae79d3196df9b20a174d5c9a
こういう時どうするんだろと思ってググッた機能が新しいバージョンにしかなかった・・・><
checked 演算子オーバーロード - C# 11.0 の新機能 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C - https://ufcpp.net/study/csharp/cheatsheet/ap_ver11/#checked-operator-overload
まあ本当に言語側でガッツリやってしまうと、まず Liquid Haskell とか Agda みたいなの書ける人本当に一握りだろうし、書き手を確保できず衰退してオワだろうなという雑な感想はある
まあ篩型 (refinement types) をサポートせよという話であればそれはそれで動機としては理解できるが、あれコンパイル通すのクソ大変だし本質的でない補足が無限に必要になるかもしれないし、場合によっちゃ型検査が多項式時間で決定不能になるリスクとかも受け入れる必要ががが
たとえば DayOfMonth 型とか Month 型とかを用意するにしてもどこかの段階ではプリミティブな整数からの変換が必要なわけで、コンパイル時に既知ならマクロが使えることはあるし実行時に得られる値ならいずれにせよ fallible な変換は不可避
そもそもこれは実行時に使うもなので、コンパイル時に云々という話であれば例えば https://docs.rs/time/latest/time/macros/macro.datetime.html とかがある
Adaから安全な分野を奪おうとしてるRust(被害妄想><;)も、日時の指定は型がガバガバっぽい><
NaiveDate in chrono::naive - Rust - https://docs.rs/chrono/latest/chrono/naive/struct.NaiveDate.html#method.from_ymd_opt
Adaは違う!>< Adaはちゃんと型を使う!>< さすがAda!!!>< Adaしか勝たん!><
Standard library: Dates & Times — learn. adacore. com - https://learn.adacore.com/courses/intro-to-ada/chapters/standard_library_dates_times.html
ada.calendar - https://www2.seas.gwu.edu/~adagroup/adalib_html/ada-html/a-calend.html
Delphiの標準ライブラリもそうでした・・・><;
System.SysUtils.EncodeDate - RAD Studio API Documentation - https://docwiki.embarcadero.com/Libraries/Sydney/ja/System.SysUtils.EncodeDate