2023-09-12

以下のあたりを完全に理解したらだいぶ楽になる気がする。

エラー処理やイテレータの周りはrustに限らずどの言語でも乗り越える一つの壁な気がする。例えばpythonに入門したときは、フランクにExceptionを継承したクラスを定義して、それを投げたりキャッチしたりすることを覚えたり、ジェネレータやリスト内包表記を覚えたりしたときに楽になった。そのほかはモジュールとかパッケージ周りの仕組みが新しく言語を学ぶときの障壁だと思っている。

借用とcopyは割とrust特有な気がする。似たところで、rubyの構文はその言語特有の難しさだと思う。 rubyの構文は慣れないとパースが難しいと思っている。実際に書いてみると、そう書きたくなる気持ちはわかるし書いていて気持ちいのだけど。

エアダスターを買ってノートパソコンのキーボードを掃除したら幸せになれた。ちょっと前にUキーの裏にゴミが入って、たまにかちゃかちゃ言って鬱陶しかった。そして週末にオリエンの都合で外でパソコンしたときに、たくさんゴミが入った気がする。

Amazonで400円くらいのエアダスターを買って使ってみたら、なんとなくよくなった気がする。昔の自分だったら圧縮した気体を吹き出すために400円かけるなんて、とか思っていただろうから成長した。手段ではなくそれがもたらす価値に対してお金を払えるようになったので偉い。

この価値観は、賢く生きるためには逆手に取ったり取られないようにしたりしないといけないんだろうなと思う。例えば自分が提供する価値を売るときには、この価値観を持つ人に対して安価な手段で高い見返りを得られると良いし、自分が目的を達成するために人のリソースを買うときは、リソースの売り手が想像もつかないような価値を見出すと有利だろう。

読んでいる。https://dl.acm.org/doi/10.1145/2660193.2660223

threaded codeの何がいいかを理解しないまま今に至っていたけど、ループ構造を変えることで分岐予測の精度を高めるみたいなことが書かれていて、そうなんだとなった。バイトコードハンドラのディスパッチをループの末尾で行うようにするらしい。ループの末尾でディスパッチするってどういうことだ? それぞれのハンドラが相互再帰な関数として定義されていて、全てのハンドラの末尾で次のバイトコードを読み込み次のハンドラを末尾位置で呼び出す、みたいな感じかな。分岐予測の仕組みは僕の中でブラックボックスになってしまっているのだが、めっちゃすごいやつだと思うことにすると、コードパスと次に実行されやすいハンドラの間に確かに相関が生まれそうなので、分岐予測の精度は上がる道理があるかもしれない、という気持ちになる。逆にループの頭でディスパッチすることにすると、ハンドラの末尾でループ先頭への無条件ジャンプを経由してからディスパッチすることになる。この一回挟まる無条件ジャンプが邪魔なのかな。この論文に飽きたら答え合わせしよう。