-

Python処理系入門 〜"1 + 1" で学ぶ処理系解読の基礎〜

この記事は CAMPHOR- Advent Calendar 2018 4日目の記事です.

1. はじめに

プログラミング言語 Python は汎用の動的型付き言語で,機械学習や Web 開発を中心に幅広く使われています.特にここ数年の Python 人気は凄まじいものがあり,某大学生協の本屋では,プログラミング系の平積みコーナーが一面Python 関連書籍で埋め尽くされています.所属しているコミュニティの関係でプログラミング初心者の学生にもよく会うのですが,第一言語Python という方が非常に多く,まさに猫も杓子も Python といった状況です.

そんなわけで,人々がこぞって Python でプログラムを書いているわけですが,「Python 自体がプログラムである」という事実に目を向けたことのある人は非常に少ないと思います.みなさんが Python のプログラムを書いて実行する時,実際には,処理系(インタプリタ)と呼ばれるプログラムが起動し,みなさんが書いたプログラムを読み込んで実行しています.みなさんが日々入力している python というコマンドもまた,処理系というプログラムなのです.

最も主要な Python の処理系(つまり Pythonソースコードを読み込んで実行するプログラム)はC言語で書かれた CPython で,「Pythonをインストールする」と言った時は,大抵この CPython をコンパイルしてできた実行ファイルをインストールしています.CPython はオープンソースソフトウェアで,誰でもソースコードを閲覧したり開発に参加することができます.CPython のソースコードPython の振る舞いをより深く知るのにはうってつけの資料で,CPython の開発に携わっていなくとも,サービスのボトルネック発見といった課題のためにC言語で書かれたソースコードを読む破目になる人もいることでしょう.

しかしこの CPython,ソースコードが膨大で,最初は読むべき場所を探し当てるのが非常に難しいです.CPython のデータ構造や実行の全体像といった内容については有志の解説記事がそれなりに存在しますが,コードの読み方にまで踏み込んだ情報はなかなか存在せず,とっかかりを見つけるのがとても大変です.

この記事は,そうした厳しい状況を少しでも改善することを目的とした,CPython 入門者のためのハンドブックです.「CPython を改造して 1 + 1 = 3 にする」というお題を通して,CPython の基礎知識から,CPython のコードの読み方まで解説します.次の2章では,CPython に関する最低限(本記事を理解するのに必要なだけ)の知識を説明します.3章では,「CPython を改造して 1 + 1 = 3にする」というお題を通して,実際のソースコードを追いかけてみます.ここでは,ただ変更箇所を示すのではなく,どのように変更箇所を探し当てるのかという部分に焦点を当てて解説します.4章では,3章のコードリーディングからエッセンスを抽出し,CPython のソースコードを自力で読んで行くための一般的な知見を説明します.5章でさらに掘り下げていくための資料をいくつか紹介し,6章でまとめとします.CPython の構造体や実行方法についてぼんやり知っているという人は,2章を飛ばして3章から読んでも良いでしょう.

続きを読む

漸進的型付けの未来を考える

この記事はCAMPHOR- Advent Calendar 2017 11日目の記事です.

アブストラクト

漸進的型付けは,ひとつの言語の中で静的型付けと動的型付けをスムーズに組み合わせるための技術です. よく知られた特徴は any 型を使った静的型付けで, TypeScript や Python といったプログラミング言語には既に実装されています. しかし,理論と実際のプログラミング言語の間には大きなギャップが存在します. 特に,漸進的型付けの理論で提案されているキャストを用いた動的型検査が実装されていないために, 静的型付けの恩恵を十分に得られていないという問題があります. この記事では,まず漸進的型付けの理論をコード例を用いて紹介し, 現状の漸進的型付き言語が抱える問題を解説します. そのあとで,漸進的型付き言語が目指すべき目標を理論的視点から論じます. それらの目標は,静的型付けを行うこと,キャストを用いた動的型検査を行うこと, 動的型検査を効率よく行うこと,型情報に基づいて最適化を行うことの4段階に分類することができます. 未だ実現されてないこれらの目標を論じることで, 多くの人に漸進的型付けの未来を考えてもらうのが本記事の目的です.

続きを読む

型クラスを含んだ型推論を概観する 〜Typing Haskell in Haskell より〜

この記事は CAMPHOR- Advent Calendar 18日目の記事です.

こんにちは @yu_i9 です.CAMPHOR- Advent Calendar には今年が初参加になります! 本記事では「Typing Haskell in Haskell (通称 thih)」から型クラスを含んだ型推論のエッセンスを紹介したいと思います. 多少専門的な内容ですが,なるべく多くの人に理解してもらえるように頑張ります.

論文のホームページは以下になります.論文本体とオリジナルの実装が利用できます.

Mark P Jones: Typing Haskell in Haskell

続きを読む

System F をHaskellとPythonで実装した

無事夏休みに突入して時間ができたので再びTaPLを読み始めました.半年触っていなくても進行,保存の証明が書けるあたり,春の自分はずいぶんしっかりと勉強していたようです.春は22章の型再構築まで読んでいたので,ひとまず23章のSystem Fから読んでサクッと実装しました.Pythonが書きたかったので,パーサーだけHaskellで書いてそれ以外をPythonで書くというよく分からない構成で実装していますが,いろいろと学びがあったのでそれを記していきます.

続きを読む

Haskellで簡単な正規表現を実装した【KMCアドベントカレンダー8日目】

KMCアドベントカレンダー8日目の記事です。

講義で正規表現とかオートマトンをちゃんと学んだので、Haskellの修行も兼ねて簡単な正規表現を実装しました。理論とか実装とかダルいと思うので、おまけだけ読むと楽しいかも知れません。

続きを読む