Pythonと相互運用可能な�静的型付けプログラミング言語Erg
1
芝山駿介
PyCon JP 2024
Day 2
スライドは以下からダウンロードできます
2
English
日本語
The slides can be downloaded below:
目次
3
自己紹介
4
自己紹介
5
スーパークリエータ認定*
についてのWeb書籍を公開中
Pythonの隆盛
6
Pythonは2024年現在最もホットな言語
Pythonの利点
7
豊富なライブラリ
“Battery Included”
標準ライブラリだけでも一通りのことができるうえ、
どんな目的にも合うライブラリがあるといっても過言ではない
Pythonの利点
8
高い連携性
C APIやCythonなどを使ってC/C++でハイパフォーマンスな
ライブラリを書くこともできる
NumPyなど多くの数値計算ライブラリはC APIを用いており
高速な計算が簡単に行える
But…
9
Pythonの3つの弱点
10
動的型付け
歪な仕様
環境構築難度
Pythonの弱点�
11
動的型付け
動的言語自体の是非はここでは述べないが、
静的型付け言語に比べ以下の部分で不利であることは概ね事実:
12
歪な仕様
Pythonは初心者にもわかりやすい
平易な文法と謳われているが、
それは極めて表面的な部分だけである
→ Pythonの設計は場当たり的
オブジェクトの参照や変数のスコープ
に非直感的な部分[1]があり、
バグの温床となっている
Pythonの弱点
13
歪な仕様
Pythonの型設計は不健全である
(e.g., Liskovの置換原則に
違反している)
また最近のPythonは型指定(もどき)
ができるようになったが、
後付けゆえの見苦しさがある
Pythonの弱点
14
開発環境の構築が難しい
Pythonは公式の提供する開発ツールが比較的貧弱であったため、
サードパーティの開発ツールが乱立している
仮想環境: venv, pyenv, pyenv-virtualenv, pipenv, Anaconda
フォーマッタ: black, autopep8, yapf, autoflake
パッケージマネージャ: pip, poetry, pipenv, Anaconda
Linter: flake8, pylint, Prospector, ruff
→ 有名所だけでも320パターン以上の中から選定する必要がある
他人のコードを動かす場合…
Pythonの弱点
では、解決策はあるか?
15
Pythonの弱点を克服した新言語を作る
16
Erg�Programming Language
17
新言語のコンセプト
18
PythonのAPIを直接呼び出せる
Pythonの資産が流用できれば
新言語を導入しやすくなる
このような既存言語の資産を流用できる
言語はScalaやTypeScriptなどがある
新言語のコンセプト
19
高度な静的型システム
静的型付けは実行効率のみのためにあらず
型システムはコードの堅牢性を高めてくれる
新言語は依存型と呼ばれる高度な型を持つ
例えば配列の境界チェックなどを
コンパイル時にも検査できる
新言語のコンセプト
20
型推論機能を持つ
変数や関数の型を指定せずとも
コンパイラが自動で推論してくれる
動的型付けのようなシンプルな記述で
ありながら検査はしっかりと静的に
行われている
新言語のコンセプト
21
開発ツールの統合
フォーマッタ、Linter、
パッケージマネージャなどを
すべてコマンドひとつに統合
このようなアプローチは
Go言語などが採用
環境構築が容易になり、
高い再現性も保証される
開発ツール
22
Language Server
RustのLanguage Serverである
rust-analyzerを参考に
エラーのハイライト、補完、rename
など基本的機能はもちろん、
文脈を考慮した補完など高度な機能も
実装
開発ツール
23
パッケージマネージャ
Erg自身を用いて実装
現在実装されている機能の例:
にしてbinディレクトリに配置
開発ツール
24
Demo
25
とはいえ…
26
こう思う人がいるかも…
27
そのような方には…
28
29
Ergの型チェッカー+Language Serverを流用した
Pythonの型チェッカー+Language Server
Erg AST(抽象構文木)をPython ASTに変換して検査する
Rustで実装されているので実行速度もなかなか速い
Pylyzerとは
Pylyzerの売り
30
Powerful Static Type Checking
強力な型システムに基づく静的解析
他の型チェッカーでは型がつかないコードでもかなり解析できる
Pylyzerの売り
31
Friendly Error Reporting
Pyrightやmypyなど他の型チェッカーよりも
エラー報告が見やすい
mypy
& Pyright →
Pylyzerの売り
32
Friendly Error Reporting
Pyrightやmypyなど他の型チェッカーよりも
エラー報告が見やすい
Pylyzer →
Pylyzerの売り
33
Language Server Included
Language Serverも付属
Erg Language Serverが
実装している発展的な
機能を利用可能
今後の開発予定
34
And so on…
We need your support!
35
ぜひstar/supportを!
Erg
Pylyzer
36
Presenter
芝山駿介
発表日
2024 / 9/ 28
想定される疑問
37
Q: Pythonの上位互換言語を作る?
A:
No
先述したようにPythonの文法には根本的問題があるため、
必ずしも文法の互換性には拘らない
APIについても、exec関数など静的解析を阻害するものは原則排除する
これらの使用は現在ではバッドプラクティスとされているため
排除してもそこまで問題はない
想定される疑問
38
Q: PythonのAPIをどのように型付けするのか?
A:
組み込みAPIは手作業
ユーザースクリプトについては、型定義用のファイルを用意する
e.g.,
Pythonコード
型定義ファイル
想定される疑問
39
Q: PythonのAPIをどのように型付けするのか?
A:
組み込みAPIは手作業
想定される疑問
40
Q: Pythonにも型指定の文法はあるが?
A:
型推論できるかが重要
いちいち型指定しなくてはならないのなら、
他の静的型付け言語を使ったほうが良い
さらに
* 型指定しても速度が向上する訳では無い
* 型が間違っていても実行自体はできてしまう
などの問題がある
想定される疑問
41
Q: Ergの型推論は完全か?
A:
恐らくNo
現時点では再帰関数の型推論が上手くいっておらず、これを完全に解決する のは難しいと思われる
また、依存型の型推論は一般に決定不能
しかし完全性にはそれほど強くこだわっていない
なぜなら、完全に型推論が可能な言語でも型指定を行うとエラー表示が
具体的になってわかりやすくなるといったメリットがあり、型指定自体
悪いものではない
ただなるべくシンプルに書けるようにしたい
想定される疑問
42
Q: 移行が大変で人気が出ないのでは?
A:
Pythonのような人気言語となることはそもそも目的ではない
またPythonを打倒する意図もない
あくまでPythonが占めるべきではなかったニッチを奪回する言語
そしてそのようなニッチで苦しむ人々は技術力があり、新言語の
学習もそれほど苦にしないと思われる
(また、これからスキルの低いプログラマはAIの登場によって
ある程度淘汰されていくと考えられる)
想定される疑問
43
Q: Pythonの些細なミスは
所謂AIによる修正で十分になっていくのでは?
A:
現在のLLMの課題: 複雑な計算などを正確にエミュレートできない
計算部は専用ソフトウェアに移譲させ、専用ソフトウェアの出力を
フィードバックしてコードを改善させるなどのアイデアがある [1]
すると正確な静的解析を出すソフトウェアは不要になるどころか
より重要になっていく!
想定される疑問
44
Q: Juliaではだめなのか?
A:
Juliaは動的型付け言語
静的型システムがほしいのはパフォーマンスのためだけではない
*「コンパイルが通れば、正しく動く」の快適さ