「あの人も読んでる」略して「も読」。さまざまな寄稿者が最近気になった情報や話題をシェアする企画です。他のテックな人たちがどんな情報を追っているのか、ちょっと覗いてみませんか?
はじめまして。今回から「も読」に参加させていただくことになりました Kanade (@kanade_k_1228) です。よろしくお願いします。
Python の型チェッカーの話
Ruff に搭載される新しい型チェッカー Red-knot について
Python では以下のように型アノテーションを記述できますが、
def add(x: int, y: int) -> int:
return x + y
実際に型をチェックする機能は Python 本体には含まれておらず、mypy や pyright、pyre といった外部ツールに任されています。言語としては「型の文法」をサポートしつつ「型検査機構」を標準では提供しないという、なかなか興味深い作りになっています。
ツールごとに型システムの対応範囲が微妙に異なるため、同じ型アノテーションでもチェック結果が違うことがあります。私は最近 mypy から高度な type narrowing ができる pyright に移行しています。
ここ数年の Python を取り巻く状況は、かつての AltJS(TypeScript や CoffeeScript など)戦国時代を思い起こさせます。JavaScript が TypeScript に進化(?)したように、Python も数年後には違う姿になっているかもしれませんね。
今回紹介した記事では、Python の開発ツール「uv」や「ruff」を手がける Astral 社が新たに型チェッカーを開発していることが紹介されています。著者の shiba さんが Astral 社に join することになった経緯が語られたこちらの記事も興味深く、おすすめです。
増分計算の話
Incremental Computation | Rado's Radical Reflections
こちらのブログでは、React のような純粋関数の宣言的なコードを書きながら、不要な再計算を避けるため「計算結果を自動的にメモ化」していくフレームワークが紹介されています。こうした仕組みは “Incremental Computation” と呼ばれ、記事中で理論的背景や論文も取り上げられています。
個人的に React のような宣言的プログラミング手法を、ネイティブアプリやバックエンドに適用したいと考えていたので、非常に興味深い内容でした。
並列処理の話
マルチプロセスやスレッドを安全に扱うために必要なアトミック操作について書かれた本です。タイトルに Rust とありますが他の言語でも応用できる基礎的な知識を解説してくれます。特に後半には、アセンブリ命令レベルで「どうやって排他制御が実現されているのか」を説明する章もあります。
並列処理の説明は得てして抽象的になりがちですが、本書は具体的な実装を提示しながら説明しており、いままで曖昧な理解だった部分が明快になりました。
近年のプロセッサは CPU、GPU、ほか多様な演算ユニットが同じメモリ空間を共有するケースが増え、シングルスレッドでもメモリの整合性や排他を意識しなければいけない場面が生まれています。本書はそんな「ハードウェアの気持ち」を理解するためにも役立つと思います。