Python-3.11
しばらく python から離れていたのが、 久しぶりにやってみたら意外と面白かった。 typing を付けたり pyi を自動生成するのが好きなのである。
最低ラインが 3.11 に上がった
linux に最初から入っているバージョンと blender-4.1 のバージョンが、 python-3.11 まできた。
:::info genntoo は 2024.6 から python-3.12 になると eselect news が来た。 :::
python-3.11 から match 文が入っているので これより下だと書き方が変わってつらいのだ。
cgypes に typing が効くようになっていた
int_array: ctypes.Array[ctypes.c_int] = (ctypes.c_int * 500)()
generic なコレクションも記述できた
from typing import TypeVar, Type
T = TypeVar('T')
def make_generic_list(t: Type[T])->list[T]:
return []
str_list = make_generic_list(str)
これはいいとして、
from typing import TypeVar, Type, Generic
T = TypeVar('T')
class GenericCollection(Generic[T]):
def __init__(self, t: Type[T]):
pass
str_collection = GenericCollection(str)
というようなのもできた。 pyright がんばっているなー。
Literal Union が enum より使いやすい
TypeScript で Literal と Union の話があって?だったのだけど、 納得した。
dataclass がよい
field を明示できてよい。 昔は明示するために __slots__ に書いてみたりしてた。
pysdl6 に pyi が付属している
enum 的なところとか一部 # type: ignore が必要だが、 おおむねいける。
vulkan できそう
https://github.com/realitix/vulkan
と pysdl6 を組合せて三角形が出せた。
python + 3dcg は imgui を模索していたのだけど、
毎フレーム描画を python でやるのは、 ちょっと遅すぎで厳しい感じだった。 qt と合体すれば 変更時のみの rendering にはるので ツールならいけそうかなと。
blender bpy の rna から pyi を生成してみた
python の native module から pyi を生成するときに __doc__ からの生成がよく使われる。 ライブラリーによって __doc__ の記述に一貫性が無いので、 そのライブラリー専用でテキストから情報を抽出する。 blender では、mathutils と bmesh で微妙に変える必要がある。 native module 向けの型情報埋め込み仕様ができるのを待っている。 bpy とか usd と language-server の連携が飛躍的に良くなるはずじゃ。