静的型付け言語
あらかじめ方が決まっていてそれ以外は使えない。整数値を扱うから、負の数はダメみたいな
方がないとコンパイラは機械語に変換できない。機械語に方と言う情報は厳密にはない。メモリ上でその変数の情報にどのくらいのメモリを確保し、そのデータはどの様に扱うモノなのかと言う判別ができるくらい。
動的型付け言語
プログラムを書くときに変数や関数に何が入っているかと言うのが特に決まってない
プログラマーは、変数や関数になんとなく、なんとなくこんな感じのデータが入るであろうと言うことを予測するだけ。型の管理はインタプリタやコンパイラが実行時にしてくれる
利点
型とデータの大きさを気にする必要がない
何が入るかわからない、設計が大変と言うときに最大値のみが決まっているのでクライアント側はとりあえずは受け取れはする。みたいな
動的型付けの型を付けるタイミングというのは、必ずプログラムを実行している時になります。なので、既にそのデータが小さいか、大きいかを確認してからサイズを決めているのでは効率が悪すぎます。なので、値やデータを扱う場合は、大きめに確保されて実行されます。
欠点
参考のコード読めば読めばわかる
そもそも型とは
機械語・物理メモリ上における抽象的な数値の羅列や数値の有限範囲に意味を持たせることが「型の定義」
データというのは抽象的なモノ、コード上では文字列や数値、理論値で合ったとしても機械語・物理メモリ上ではただの数値の羅列でしかない。
コンピューターにおいて、データは有限数であり、上限がある。
機械語・物理メモリ上における抽象的な数値の羅列や数値の有限範囲に意味を持たせることが「型の定義」
コンパイル
コンパイラと呼ばれる実行ファイルにソースコードを読ませることで、別の言語形態(機械語に変換、別の高級言語に変換など)に変換(翻訳)することを「コンパイル(翻訳って意味)」という
インタプリタ
インタプリタと呼ばれる実行ファイルにソースコードを読み込ませることで翻訳・実行を同時に行うことを主とする形態を「インタプリタ(通訳者の意)」と言います。
ビルド
コンパイル・リンク等を行い、パッケージなどを生成すること
リンカ
ソフトフェアの開発ツールの一つで、機械語(マシン語)で記述されたプログラムを連結、編集して実行可能ファイルを作成するソフトウェア
オブジェクトコートの収められたファイルをもとに様々な処理や変換行い行い、OS上で起動可能な実行可能形式のファイルを作成する
オブジェクトコード
コンパイラなどによって機械語によって変換されたプログラムそのままOSから起動できる実行ファイルとはならない。
インタプリタとコンパイルの翻訳後
元のソースコードが残るか残らないか。インタプリタは翻訳者が覚えているから残るがコンパイラは翻訳時に捨てられる。元のコードが存在しなくなり、もしそのときに「型」の意味が不明であれば辿ることができなくなり、実行させられなくなる。
ヒープ領域
プログラム実行時にOSからソフトフェアに対して一定量に与えられるメモリ領域
ソフトウェアは必要に応じて動的にヒープ領域を確保・開放できる
データの仮置き場や臨時の作業台の様な存在
どの順序で確保・解放するかはフォフトウェア側で自由に決められる。
あらかじめどのくらいのデータ領域が必要なのか分からなくても、ソフトウェア側が必要に応じて対応できます。しかし、それらの判断をソフトウェアに任せることになる以上、全体の管理は難しくな
スタック領域
こちらも一時的に確保されるメモリ領域
スタック領域は、確保したのとは逆の順番で解放するのが特徴
ヒープ領域の様にソフトウェアが任意に確保と開放を決められない。
保存が必要な期間だけメモリ領域を確保し、不要になったら解放する様に行われる
つまりあらかじめ割り当てられるメモリ領域が決まっている