僕は、「プログラマのための***」という続き物をボチボチと(きわめてボチボチと)書いていますが、タイトルに「常識的な知識は仮定するよ」って意味を込めています。んじゃ、「プログラマの常識」って、それなによ? って、実はハッキリしない。
別な事情もあって、「プログラマの常識」をハッキリさせたほうがいいな、と感じたりしてます。客観的な基準なんて求めないのだけど、「プログラマのための***」で暗黙に仮定している常識、それを少し明白にしたいのです、個人的にね。
思い付き順にバババッと並べるけど、次のようなことを知っていて欲しい:
- コードもデータも(それが所詮ビットコンビネーションだという意味で)一様なこと。
- メモリセルには、そのコンテンツ(中身)とアドレスがあること。
- コンテンツもアドレスも、やっぱりビットコンビネーションとしては一様であること。
- コンピュータの実行は、順次実行以外に、無条件または条件付きジャンプがあること。
- サブルーチンという一大発明があること。
- サブルーチンの呼び出し、戻り、スタックフレーム(活動レコード)というメカニズムがあること。
- サブルーチン引数は普通スタックに積まれること。
- サブルーチン戻り値は普通レジスタに返されること。
- 引数渡しに、値渡しと参照渡しがあること。
- 変数の解釈には、左辺的(アドレス、名前)と右辺的(コンテンツ、値)があること。
- 静的に割り当てられるコード/データ以外に、実行時のメモリ割り当てがあること。
- 実行時の割り当て用の領域をヒープと呼ぶこと。
- 参照である変数/引数/戻り値は、普通ヒープ上のメモリブロックを指すこと。
なんかすごく即物的なことばっかり。でも、僕は理念的な御託でコンピュータと計算現象が理解できるとは思ってはないので、こういうリストになりますね。例えば、「オブジェクトって何?」と聞かれたら、答えはとりあえず「ヒープ上に割り当てられたメモリブロックと、いくつかのサブルーチン群を紐付けて一緒に考えたもの」です。