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

型とは何か

Avatar for cocoatomo cocoatomo
February 15, 2018

 型とは何か

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

Avatar for cocoatomo

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) • ⇒ これが「動的」と言われる所以