読者です 読者をやめる 読者になる 読者になる

arXiv探訪

興味の赴くままに数学するだけ

Luaに触れてみた --> LuaLaTeX

{ \TeX }の環境を一新するにあたり、理由も無く{ \mathrm{Lua}\LaTeX }候補の一つに考えている。{ \TeX }の言語を全く理解しておらず、また学ぶ気にもならなかった過去を反省し、役に立つか分からないけどLuaについて学ぼうと思い立った。

ウェブにある情報を見る限り、感覚的にはJavaScriptに似ているけどJSの方がC/C++に近いかなって印象。言語としては(数学的な意味ではなく)コンパクトに纏まっているのに色々なことができる万能な小人と言える。ビット演算が標準で無かったり、数値の基本が浮動小数だったり数値計算には向かないかもしれない。スクリプトでやる処理ではないかもしれないが。JSと異なるのはコルーチン(協調的マルチタスク)があること。簡単に言えば関数を中断して次に呼んだときに再開できるのだが、これは優れものであり難しいところでもある。再帰を利用すれば呼ぶ度に生成される「数列」をプログラムできるので、数学的には面白いと思う。

例えばこのページのプログラムではエラトステネスの篩を何とも不思議な方法で実装している。呼び出されるたびにフィルターが重ねられていき、素数の倍数が篩に落とされていく。ただしsieve(200)を実行すると自分の環境で197あたりでcoroutine.resumeがfalseを返し始め、"attempt to perform arithmetic on a string value"が表示される。これは予想なのだが、コルーチンは呼び出されるたびにスタックされていくらしく、上限まで積まれて再開できない(false)為にnへnilが代入されてエラーとなるのではないか。調べても良さ気な情報が出てこないので、詳しい人が居たら助言を頂けないだろうか。

Luaは組み込みやゲームとかで使われている印象が強かったが、想定していた以上に強力な言語であることが分かった。上記のことがあるので現状はコルーチンのネストをあまり深くし過ぎないようにプログラムするのが良いかもしれない。C/C++との連携は今の所学ばなくてもいいかな。C/C++を理解しているとは言えないし。それよりも{ \mathrm{Lua}\LaTeX }で何ができるのかが知りたい。文章にオブジェクト指向が取り入れられるのであれば、表示方法も含めかなり扱いやすいものになる期待感はあるのだが。