Upgrade to Pro — share decks privately, control downloads, hide ads and more …

型とは何か

cocoatomo
February 15, 2018

 型とは何か

CPython を実例に取り, 型がどのようなもので, どう機能するのかについて解説

cocoatomo

February 15, 2018
Tweet

More Decks by cocoatomo

Other Decks in Programming

Transcript

  1. 何の役に立つの? • 推進性 ⇒ 式の評価 (=計算) が値にな るまで実行できることが分かる • 保全性

    ⇒ 式の評価によって型が変わら ない • ⇒ 「ある程度」ちゃんと動くことが保証さ れ, 結果の予想できるプログラムが書ける
  2. 混ぜるな危険 • 「型付けルールがある」=型付き言語 • 「値の型」と「変数の型」 • ⇒ Python に無いのは変数の型 •

    「型チェックが『実行する』前に or 後で行 われる」=(いわゆる) 静的とか動的とか • [余談] ところで「実行」の定義, 考えた ことありますか? (読者の宿題)
  3. PyObject • Pythonの型階層の基底クラス object の C 実装 • 「全てのものはPyObject!」 •

    Include/object.h で宣言されている型 • ⇒ 実装を見てみよう
  4. CPython の読み方 • CPython の命名規則ではメソッドの実 装は • Object/<type name>object.c •

    にある • Py<type name>_<method name> • という名前の関数となっている
  5. protocol • Java の interface のようなもの • 実装すべきメソッドの集合を定めてある • Long

    は Number protocol を提供して いる • もちろんコンパイラのチェックは無い • ↑そもそも Python にコンパイラが無い
  6. PyObject だらけ • 実行時に PyObject から PyTypeObject (=関数の集まり) を取得し, 最初に型チェッ

    ク • よく見ると, せっかくの C の型情報がキャ ストで消えてる (引数も返り値も PyObject) • ⇒ これが「動的」と言われる所以