「くいなちゃんは語らず、ただ微笑むのみである。」 - 若草春男
はじめに
Kuin言語は初心者向けのゲーム制作に特化した言語です。具体的にはHSPの代替を目標としています。しかしこの目論見は成功するのでしょうか。今の状況では成功するとは思えないというのが正直なところです。私はKuin言語に3か月ほどしか触っていない新参者ですが、一応くいなちゃんにプルリクエストを送って承認された実績を持っていますので、Kuin言語に関していくばくかの提言を行うことができるものと考えます。したがってこのような通常のアドベントカレンダーでは扱わないトピックを取り上げさせていただく次第となったわけです。
くいなちゃんのロードマップ
Kuin言語は言語のフォーマットこそPascalライクとはいえ、ライブラリやKuinエディタなどの環境を総じてみればVisual Studioのサブセットです。2018/12/17のアップデートではKuinエディタの入力補完機能を強化するのだそうです。したがって、くいなちゃんの目論見としては、Kuin言語とはVisual StudioのC++に触れるためのとっかかりを作るためのステップであり、またはUnityなどの別の言語・処理系でもいいのだけど、Kuin言語自体であまり多くのことをさせるつもりはないようです。この後のトピックにおいてこのことを詳述いたします。
Kuin言語の長所
Kuin言語のよいところは、インストール手順が単純であること、処理系のファイルサイズがとても小さい(<20MB)こと、文法とライブラリが簡潔であること、Windows環境に適した言語設計であることです。
パッケージ管理システムがない
Kuin言語にはサードパーティ製のライブラリを提供する仕組みがありません。この仕組みはPerlをはじめ、現代的な言語においては標準的に搭載されている機能です。
パッケージ管理システムは、言語の標準ライブラリの他に、パッケージの置き場所を提供します。パッケージ置き場にパッケージとなるディレクトリを置いておけばソースコードの中からパッケージの関数やクラスを呼び出すことができます。
パッケージ管理システムは、言語が推奨するパッケージの一覧と、パッケージを簡単に導入する手段も提供します。これは言語のメンテナーの負担を増加させる結果にもなります。メンテナーがパッケージのレビューを行わなければならないからです。パッケージのなかでパッケージを使うといった依存関係や、パッケージを改修させる手間などを考えるとパッケージ管理システムに問題点がないわけでもありません。
しかしパッケージ管理システムにはそれらの弱点にあまりある強力な可用性をもたらします。パッケージ管理システムはプログラミング言語にパワーと混乱をもたらすといえるでしょう。
ドキュメントがオンラインで管理されている
これはMicrosoftのドキュメント提供方法にならっているのだと思います。つまり、最新のドキュメントしか提供しないのです。しかし本来であればソースコードとバイナリとドキュメントは同一のプロジェクトにて管理されるべきです。
ライセンス
Kuin言語はくいなちゃんライセンスで提供されています。しかしKuinのリポジトリ内ではサードパーティのライセンスを使用しており、本来であればそれらのライセンスを明記すべきです。もしそういったことをしたくないのであればそれらのライブラリを標準ライブラリではなくパッケージとして取り扱うべきでしょう。
オブジェクト指向言語機能が不足している
これはKuinユーザーのなかにそういう考えの人もいるということであって、別に現状維持で問題ないと考えます。少し説明します。C++やC#は充実したオブジェクト指向言語機能をもっています。しかしそういった本格的なオブジェクト指向の機能を実装すれば、コンパイル速度が低下するしドキュメントも難解になるでしょう。したがってオブジェクト指向言語機能の追加については私は反対なのです。
ドキュメントが不足している
これはKuin以外のプログラミング言語でもあることであって、おかしいことではありません。これは、「ドキュメントに記載されていることに関しては仕様変更をできるだけ行わないがドキュメントに記載されていないことは変更しうる」ということです。これはプログラミングにおける不文律です。
Kuinエディタが貧弱
枝葉末節の問題です。例えばKuinエディタでは右クリックメニューが実装されていないのですが、それはCtrl+CやCtrl+Vを使えばいいだけの話です。また、マウスの範囲指定選択時にエディタ画面の上部または下部にマウスを持っていてもエディタ画面がその方向にスクロールしてくれないので一画面以上のソースコードを選択するときは矢印キーを使うのですが、まったくそれで問題がないのです。ただ、そのことはチュートリアルのどこかに書いておくと親切ではあるかとは思います。
並行処理関連が手付かずである
この問題はプログラミング言語に2つの選択肢をせまることになります。OSと同等の機能を提供するか、OSとは全く異なる強力な並行処理機構を実装するかの2択です。しかし、強力な並行処理機構を実装すればKuinのファイルサイズは大幅に増大し、実行速度も低下することでしょう。したがって、この問題に対してはOSと同等の並行処理機能を実装することにとどまるのがよろしいかと思います。
MacOS, Linuxとの互換性
これについては、「無理」としか言いようがありません。Kuin言語をオワコンにするという解しかないのです。しかし他の言語はWindows, MacOS, Linuxの3つに対応しています。これはどうしてなのでしょうか。.net FrameworkやQt, Unityについていえば、企業努力としか言いようがありません。あれはKuin言語の1000~100000倍くらいのマンパワーをかけて行っているものです。
では、Rubyなどその他の言語はどうしているかというと、MinGWというライブラリを使って、LinuxバイナリをWindowsで動かしているのです。つまり、Windowsの機能を使いたければMinGW経由でなければ操作できないのです。だけどKuinはWindowsの機能を100%引き出したい、というか、MinGWを使わずVisual StudioでビルドされているのでKuinがWindowsで快適に動作するというところがあるのです。
だから、KuinがMacOS, Linuxで動くことは期待しないでください。または、くいなちゃんが機転を利かせてDirectXベースのウィンドウシステムをオワコンにしてOpenGLでやりなおすかもしれません。または、多重管理(という本当の闇)。
もう一度言います。KuinがMacOS, Linuxで動くことは期待しないでください。
まとめ
Kuin言語に欠落しているのは、パッケージ管理システムです。これさえあればKuinはHSPを凌駕することができるでしょう。