最近、Lua の共同作成者である Luiz H. de Figueredo と Roberto Ierusalimschy のインタビューを読み、Lua の設計と実装について説明しました。控えめに言っても非常に興味をそそられました。しかし、議論の一部で私の心に何かが浮かびました。Roberto は、Lua を「独立したアプリケーション」 (つまり、OS から何も使用しない純粋な ANSI C です) と述べました。Lua のコアは完全に移植可能であり、その純粋さのために多くの移植が可能であると述べました。より簡単に、これまで考えもしなかったプラットフォーム (ロボットや組み込みデバイスなど) にも対応できます。
今、これは私を不思議に思います。一般に、C は非常に移植性の高い言語です。では、C のどの部分 (つまり、標準ライブラリーの部分) が最も移植性が低いのでしょうか? また、ほとんどのプラットフォームで動作することが期待できるものは何ですか? 限られたデータ型のセットのみを使用する必要がありますか (例:short
と 多分を避けるfloat
)? とシステムFILE
はどうですか?そして?Lua はこれらすべてを回避しているようです。それは物事を極端にしていますか?それとも移植性の問題の根源ですか? これ以外に、コードの移植性を非常に高めるためにできることは何ですか?stdio
malloc
free
私がこのすべてを尋ねている理由は、私が現在純粋な C89 でアプリケーションを作成しているためであり、可能な限り移植可能であることが最適です。私はそれを実装する際に中間の道を喜んで取ります (移植性は十分ですが、すべてを最初から書かなければならないほどではありません)。
最後の注意として、この説明はすべて C89 のみに関連しています。