おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

GObject tutorialを大幅書きかえしました。

気になっていたGObject tutorialの修正を終えて、Githubにアップロードしました。

とても気になっていたのは、TPtrというポインタのプロパティをもつオブジェクトの子オブジェクトとして文字列のオブジェクトのTStrを定義したことです。 それはすごくまずいことで、TStrの内部で保持している文字列に外部からアクセスすることが出来るのです。 セキュリティの観点から言えば、どでかい穴が空いている設計なのです。

最初は良いアイディアのような気がして、そうしたのですが、あとからとんでもないことをしていたと気づきました。 今回それを根本から書き直したので、一安心です。 今度はTPtrを全面的に削除し、親オブジェクトをTStrにし、その子オブジェクトをTNumStrという数字を表す文字列にしました。 例えば、"100"は文字列ですが、数字を表す文字列で、TNumStrオブジェクトに格納できます。 それに対し、"Hello"は数字を表さないので、TNumStrオブジェクトに格納することはできません。 TNumStrに格納できる文字列を「数値文字列」と呼ぶことにします。 数値文字列の例としては、

  • "100", "0", "-30", "+50" のような整数
  • "0.1", "100.", ".5", "+1.2", "-3.5" のような実数

浮動小数点表示はサポートしていません。 TStrとTNumStrの親子はセキュリティ上の問題がなく、まあまあの例になったかと思います。

GObject tutorialの例は、整数型、実数型、文字列型、数値文字列型の4つで、それに抽象型の数字型とインターフェースの比較型を加え、6つの型になります。 これらは実際に応用できるような例ではなくて、チュートリアル用の例にすぎず、特に便利なことはありません。 しかし、もしGObjectではなくて、あるいはCではない言語を新しく設計すれば十分実用になります。 例えばRubyの同様のクラスはとても便利です。 実は、このチュートリアルの型はRubyのクラスをヒントに作りました。

詳しいことを知りたい方は、Githubを見てください。

懸案事項が片付いたので、次はGtk4 tutorialの見直しをしようと思っています。 こちらは、いろいろな人、とくに外国の方が見てくれているので、見直しもやり甲斐があります。 内容の拡張はするつもりはありません。 バグ取り中心になる予定です。 何かありましたら、githubのissue、あるいは、このブログにコメントしていただければ、対応したいと思います。