1063 shaares
28 private links
28 private links
ポインタとアドレスは別の型にすべきではないかという話。
それから、 dereference と offset 取得のコンテキストも演算子を別に用意することで明確に分離すべきという話。
近年の言語はポインタについて provenance の追跡等をしていたり、あるいはポインタサイズをアドレスサイズよりも大きくしてハードウェアによる検証用メタデータを埋め込むアーキテクチャ (CHERI) なども発生している。
このような状況では、ポインタはアドレスよりも多くの情報を持っているし、ポインタからアドレスへの変換も非自明なものになってくる。
とはいえアドレス (整数) による演算は依然として有用だ。
そこで、 dereference できるポインタと、メモリ上の位置を表現するアドレスを別のものにして、間に変換を用意してやるべきである。
また、型のフィールド等のオフセット計算の文脈が dereference の文脈と分離されていないため、フィールドのアドレスを計算するつもりの式が UB を引き起こしかねないなどの問題もある。
これについては、「特定のフィールドを参照する」ための演算子と「フィールドのオフセットを指定する」ための演算子を個別に用意してやることで、文脈の混乱が解消でき、 offsetof 系の機能にまつわる面倒な問題を解消できる。