
投稿日:
triggon をようやく正式版にリリースできました!
正式版までの期間は約2ヶ月でした。今まで追加した新機能の数はたぶん30近く?あると思います。
このライブラリ開発において学んだことを書いていきます!
解析(AST, inspect)
変数名の特定、値の代入するのに使ったライブラリが AST と inspect です。
まず inspect ですが、最初は「フレームってそもそも何?」というところから始まりました。理解するまで少し時間はかかったんですけど、使う場面がかなり多かったので、気づいたら自然に使いこなせるようになっていました。
一方で AST は、ほんとうっっに難しかったです!ノードの種類がとにかく多いうえに、その中でもさらに分岐があるので時間をかなりかけました。さらに、parse するためにコードを抜き出す必要があって、その部分でもかなり苦戦しました。習得するまでに1週間くらいはかかったと思います。
最初はずっとドキュメントを見ながら進めていたのが、今では見ずにすらすら書けるレベルまで達しました!
遅延ラッパー
任意のタイミングで早期リターンをしたくて作り始めました。
最初は関数とクラスメソッドを別々に扱っていましたが、最終的に一つのラッパー関数に統一。
さらにライブラリ関数にも対応できるようにしました。
どうしても自然な呼び出しで遅延させたくてかなり試行錯誤しましたが、特殊メソッドを使うことで実現することができました!
特殊メソッド
これは遅延ラッパーを作る際にすごい役に立ちました。(__getattr__ や __call__)
インスタンスで関数名を渡す必要がないのと、あの自然な形で遅延できるようになってるのは、まさに特殊メソッドのおかげです!
マルチスレッド
Rust や GO では使ったことはあったのですが、Python では初めてで、関数名と引数別々にするのが書き方の違いを感じました。Rust と Go ではそのまま入れられてたので。
それにともなって、スレッドロックも学びました。
競合を防ぐために使われていて、実際に triggon のタイマー機能で取り入れました。
カスタム属性
これは結構終盤で知ったことで、TrigFunc による遅延関数かの判別や、デバッグ機能のための情報として使用しました。
個人的に、もっと早く知りたかったって思うほどすごい便利な機能です!
最後に
この2ヶ月間、本当にたくさんのことを学びました!
正直ほとんどがやったことなかった処理ばっかで、リリースしてもバグが多発してたりとかありました…。エラーチェックをほとんどしてなかったり、意味のないコードを書いてたりひどかったのですが、今は常にエラーチェックや最適なコードを意識しながらできるようになりました。
あとは、一気に書いてからテストすることが多かったので、ちょっとずつ書いてテストするように心がけるようにもなりました。
またなにかいいアイディアが思いついたら、新しいライブラリを開発したいなと思います!
コメント