2021年06月08日

久しぶりに LuaAppMaker

 たいへん久しぶりに、LuaAppMaker を立ち上げて、コーディングしてみた。以前に wxPython で書いてみたアプリの Lua 版です。

20210607-1.png

 まだ wxPython で実現できていた機能を全部は再現できてない。一応 Python 版のソースコードを忠実に移植しているつもりではあるんだけど。Python と比べてやっぱり Lua は言語としては非力だな、と思う。特にイテレータ系にそれを感じる。

#   Python
  segments = self.ClipLine(p1, p2, None, (bonds[i].bounds for i in blist))
--  Lua
--  table.collect は自分で書いた
  local bbounds = table.collect(blist, function (i) return bonds[i].bounds end)
  segments = self:ClipLine(p1, p2, segments, bbounds)

 でも、そのぶん処理系は軽いからね。ほぼフルセットの wxWidgets をサポートして 20 MB ぐらいだからね。wxPython でコードを書くのはなかなかの快感だったけど、wxLua もあまり負けてはいない。

 今回は少し頑張って、ZeroBrane Studio でのデバッグをだいぶ充実させた。ランタイムエラーが出た時、その時点でデバッガに制御を移して、スタックフレーム中の式を評価できるようにした。下の図で、赤で囲んだ位置でランタイムエラーが出ています。エラーハンドラから debug.traceback 関数が呼ばれるのだが、それにフックをかけて、デバッガで止められるようにしている。

20210607-2.png

 独自拡張だけど、Remote Console の画面で、@3 event:GetEventObject() と入れると、3番目のスタックフレーム(ランタイムエラーが出たフレーム)の環境で式を評価できる。この機能が実装できたのは大きい。今まで、ランタイムエラーで止まってしまうと、その時点での変数の値は推測するしかなかったからな。

 アプリの開発はなかなか進まないと思うけど、気長にやるつもりです。

タグ:Lua Mac wxWidgets
Posted at 2021年06月08日 00:07:11
email.png