やかんです。
今日は天気こそ微妙ですが、午前中のうちに図書館に行くことに成功したため中々いい滑り出しで迎えた1日でした。
今日やったことについて
やっぱり、ぼくは勉強大好きですわ。量的な問題ではなく、満足いくまで勉強できるのが幸せすぎてやばいです。
開発mtg
統計について少し教えてもらった。面白そうな分野だと感じた。
線型空間入門
ちょっとこの分野面白すぎるな。。勉強がエグ楽しいと感じる。
- 一定の性質を満たす演算のことを内積と呼ぶ。
- だから極端な話、上手に3ん残を定義できさえすれば、いくらでも自作の内積という演算を定義できる。
- n次元に一般化された内積の一例として、標準内積。
- 標準エルミート内積ともいう。こっちの方が名前がかっこよい。
- 位相空間をちょっとかじってたからか、計量空間の定義が驚くほどスッと入ってくる、、!←後述。
- 計量空間において、内積の平方根のことを長さあるいはノルムと呼ぶ。
- 正規直行基底について簡単にみた。
計量空間について
計量空間って線型空間固有のものじゃないんだ。それよりもっと高度に一般的な概念だったようだ。確かに、名前からして十分に一般的だよな。。
というわけで、線型空間の文脈で計量空間として学ぶものは内積空間と呼ぶ方がしっくりくるっぽい。
ちなむと、外積は計算方法あんまわかってないけど、法線ベクトルを求めるやつっぽい。
OS自作入門
今日はアセンブリ言語の勉強がメインになった。面白い。もっと知りたい。
- 整数と浮動小数点数ってメモリ上でどういう違いがあるの?
- そもそも保存形式が違う。浮動小数点数の方が特徴的で、IEEE形式という、これまた一工夫されたbit表現で保存される。
- 型のキャストってどうなってるの?
- 例えば整数を浮動小数点数にキャストする場合は、値をIEEE形式に変換するアルゴリズムが走るっぽい。
- メモリの解放について
- プログラマが明示的にメモリを解放するのはヒープ領域。スタック領域については自動で確保と解放が行われるっぽい。
- ざっくり、関数のローカル変数はスタック領域。もっとスコープの広いものはヒープ領域。
- `push rbp`について
- まずこれはアセンブリ言語。関数プロローグに用いられる命令あるいは処理だが、これは関数が実行され終わった後、関数の呼び出し元に戻るために必要な処理である。
- rbpはCPUのレジスタの一つ。ここにはpush rbpの時点で、呼び出し元の関数のスタックフレームのベース値が格納されている。それを、pushによってスタック領域にプッシュ。
- `mov rbp, rsp`について
- これも関数プロローグの記述。rspには、現在実行中の関数のスタックフレームの先頭が格納されている。これをrbpに「代入」してあげることで、rbpは現在実行中の関数のスタックフレームのベースを指すようになる。
- そもそも、rspやrbpにはメモリのアドレスが格納されることに留意。
- スタックフレームは関数ごとに独立して確保されるから、関数内でメモリが競合することはないと考えてよい。
- そもそもスタックフレームとは、一連の連続した(値は当然離散的)メモリアドレスのブロックのこと。
- スタック領域が不足することをスタックオーバーフローという。
- `lea rax, [rbp-4]`について
- raxというレジスタに、[rbp-4]のアドレスが書き込まれる。
- この時、[rbp-4]自体は、rbp-4というメモリアドレスが保持してる実際の値を参照している点に注意。
- そうすると、`mov rax, rbp-4`と `lea rax, [rbp-4]`は何が違うの?という疑問が生じる。これは、結果としてはどちらも同じものを得ることができるが、命令の使い分けが後々大事になってくるから、わざわざ使い分けているらしい。プログラムの効率性に影響するんだとか。
エンジニア業務
テスト書いたりリファクタしたり。明日はapiのテスト書きたいけど、明日はクライアント様とのミーティングなので新たな要件が定義され、それどころじゃなくなる予感。。
エンジニア業務その2
まあ、普通に頑張った。
明日について
- ベクトルあるいは行列の固有値について勉強したい。
- OS自作入門の4章。
- apiのテスト書きたい。
ということで今日の日記終えます。最後までお読みいただき、ありがとうございます。