Skip to content

Instantly share code, notes, and snippets.

@podhmo
Last active September 19, 2024 12:21
Show Gist options
  • Save podhmo/e465140f5ba6467c4b4e55885ea90e6c to your computer and use it in GitHub Desktop.
Save podhmo/e465140f5ba6467c4b4e55885ea90e6c to your computer and use it in GitHub Desktop.
pythonのコードの壊れやすさと主流のユーザーの変化に付いてのつぶやきまとめ

Pythonユーザーの変遷

Pythonも主要なユーザーが変わったよな。

例えばDjangoとかはrailsなどに対してオールインワンで持つことで一貫性を維持してたしユーティリティなどを自前で持ちpypiに挙げられるパッケージはnpmのそれに比べて粒度が大きかった。

また2.xのときはLTS的なものが長かった。


アップデートの頻度と移行の課題

LTS的なものが長かったりすることで移行が進まなくなってしまうことの反省からわりと切り捨てて頻繁にアップデートされるようになった。

これは結局のところ壊れてどうにもならなくなるまで移行が行われないという気付きによるものだと思う(分かりやすい例として個人的にはnode-gypを挙げる)


機械学習と壊れやすさの増加

時代が変わり機械学習がメインになれば最適化とGPU対応が入ってくるし当然下層のアーキテクチャを気にするものになるから壊れやすくなる。

利用者が研究者のプロトタイプに依存することはかつてjsでデザイナーが書いたjquery何某に依存することの類似なので壊れやすくもなる。


FastAPIとラッパーフレームワークの腐敗リスク

またFastAPIみたいなラッパー的なフレームワークを利用することが増え便利になった一方で腐敗しやすくもなった。

利用者も初学者を多く取り込んだことでとりあえず利便性に振り切るみたいな使われ方が多くされる様になった。


壊れにくい設計と自前実装の強み

壊れにくさという意味ではの仕様が固定され全部自前実装みたいなタイプの方が頑健性が高いみたいなのはそうでCommon Lispとかで全部自前実装とかが強いみたいな話になるんだろうか?


Pyproject.tomlと制限された自由度

依存しつつも壊れにくいという意味ではhttp://setup.pyでの拡張ライブラリや何やらのインストール時の自由度をpyproject.tomlに変えて制限するみたいな対応は効果が薄い。

壊れたときに追随しやすいメリットはある。デフォルトの対応にユースケースが載ることはあってだいたい変更が必要そう


互換性の維持とリソース問題

公開したインターフェイスを壊さないみたいな話をするのだとしたらWindowsのwin32みたいに無限に互換性を気にしたメンテナンスをする必要があるけれどこれはリソースの潤沢な企業だからできることでボランティアベースの組織だと厳しそう


静的なものと制約付きの仕様

依存しつつも壊れにくい仕様や機能を作る事はできはして、例えばその一つが動的なものに対する静的なものや自由なものに対して制約付きなものなわけだけれど、はじめから導入されていれば変更無しでいけるものの後に加えられた導入であればその対応自体が変更を増やすものになる。


頻繁なアップデートと互換性の短期化

https://x.com/podhmo/status/1836710646223904859…

大規模に更新して互換性をずっと維持するという方針は止めて頻繁に小さく更新しその分互換性を維持する期間も短くするようにしたということ(ズルズルと延長するのを止めて明示的にしたという方が近いかも),> LTL的なものが長かったりすることで移行が進まなくなってしまうことの反省からわりと切り捨てて頻繁にアップデートされるようになった。

これは結局のところ壊れてどうにもならなくなるまで移行が行われないという気付きによるものだと思う(分かりやすい例として個人的にはnode-gypを挙げる)


標準ライブラリとメンテナンスの負担

スクリプトを書くときも標準ライブラリだけならおそらく放置してと腐敗しにくそうではある。

一方でtyperとかを使ったら便利だけれどメンテが必要になる。

そういう意味では概念的なbattery includedを満たすためには設定ファイルでyamlも使わないほうが良いのかも(tomlはイケるようになった)。


Rustの試みと壊れにくさの追求

Rustの試みというのはgoなどの標準ライブラリだけで書くというオールインワンの試みに対して依存しつつも壊れにくいを目指すみたいな試みっぽい。

そういう意味では一度アップロードされたパッケージは決して消されないとかも必須の要素ではある(消えるdockerイメージにやられるとかある)。

@podhmo
Copy link
Author

podhmo commented Sep 19, 2024

https://x.com/podhmo/status/1836710644122578999 のつぶやきのスレッドに対してChatGPTに章のタイトルだけを補ってもらった(スレッドそのままコピペすると段落が飛びつつ途切れ途切れの文章が連続して目が滑るということが確認されている)

もうすこしいい感じのタイトルになってきもしたけれどまぁ実用的には十分かも?

@podhmo
Copy link
Author

podhmo commented Sep 19, 2024

一度以下のようなプロンプトで試したが意味が変わってしまう部分もあったので無理だった。というわけで章のタイトルだけを補うだけにした。

以下のルールに従って文章を整形してください

- 文章中に章タイトルをつける(markdownを想定してます)
- 文章の意味を極力意味を変更することなく語調などを整える
- 年代などが正確にわかるものは背景などを補う


文章...

@podhmo
Copy link
Author

podhmo commented Sep 19, 2024

📝 LTSのタイポは見つかった

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment