Monthly Shaarli
March, 2022
Dvorak 配列に切り替えているのを忘れて Qwerty 配列のつもりで「stat」と打ったら「oyay」と入力されて、オゥイェ…… と呟いた

With batteries, motion sensors, and a microLED on board, Mojo lets me try out its first apps
足が早いと悲しいのが squid
足が早いと嬉しいのが squad
C-{Z,X,C,V} の由来についての情報がある。
Well, we did X because it was a cross-out, and we did V because it pointed down like this, and you were inserting, like an upside down caret. [Laughter] That was Paste. And Z was the closest one, because we figured you’d Undo a lot. And C for Copy, that was easy. So that’s how we did that.

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