Kuinというプログラミング言語があります。
簡単で高速な実用プログラミング言語「Kuin」です!
http://kuina.ch/
Kuinというプログラミング言語は「くいなちゃん開発チーム」によって開発されています。10月17日に大規模アップデート版のリリースも決まっており、開発も精力的です。
v.2017.10.17
・数学・科学・アルゴリズムライブラリ「math」の追加
・正規表現ライブラリ「regex」の追加
~以下、省略。全文は下記のURLを参照してください~ http://kuina.ch/kuin/a201
本筋とは関係ないけど、バージョン番号を日付にするのって珍しい気がする。
公式レポジトリ
公式レポジトリはGitHubにあります。一見してみたのですが、コード内にコメントがほぼないので、ソースコードを読み解くのは難しいかもしれません。でも、コードは綺麗です。
くいなちゃんとの出会い
私がくいなちゃんを知ったきっかけは、Twitterのリツイートでした。
当初は、何かのキャラクターなのかな程度に思っていたのですが、調べてみたら、なんとプログラミング言語をリリースしているではありませんか。
エンジニアとしては好奇心に駆られますので、早速パソコンを引っ張り出しました。
なお、Kuinの開発環境はWindowsです。私は普段Macを使用していますが、サブ機のWindowsを引っ張り出しました。
Kuinを習得する方法
Kuinの習得は、チュートリアルで行います。丁寧なチュートリアルなので、チュートリアルに沿って進めていくだけで、ゲームが完成します。
「プログラミング言語Kuin」を初めて触る人に向けたチュートリアルです。 プログラミング言語「Kuin」 - くいなちゃん
開発の様子
お手軽だけど高性能なプログラミング言語
私が驚いたのは、開発を始めるまでの敷居の低さです。「kuin_日付.zip」のファイルをダウンロードして、kuin.exeを起動するだけで開発環境が整います。
言語を書いている感覚は、なんとなくRubyに近いような気がしています(ただの私的な直感です)。アットマークを変数の前につける文法は、私が今まで触った言語の中ではRubyでしか見たことがないな。
(注釈:Objective-Cの@"文字"とか、Perlの配列とか、数え上げればもっと色々あります)
Kuinでは、ローカルなものの識別子を指定するときは名前そのままを書き、グローバルなものの識別子を指定するときは名前の前に「@」を付けて書きます(図1-1)。
http://kuina.ch/kuin/b09
個人的に面白いなと感じたのは、文法のドキュメントに「設計の理由」が書いてあるところです。しっかり考慮された上で文法が設計されているので「設計の理由」を読むだけでもかなり勉強になると思う。
「設計の理由」を読んでいくと、過去の様々なプログラミング言語の設計に由来しているのだなということが分かります。
チュートリアルで制作したサンプルコード
チュートリアルを終えたので、完成したサンプルコードを以下に掲載します。
「コンパイルがすごく早い!」というのが素直な感想です。コンパイルから実行まで1秒もかかってないので、凄く快適です。
class Pos() +var x: float +var y: float +var veloX: float +var veloY: float end class var player: @Pos var enemy: @Pos var wndMain: wnd@Wnd func main() do @wndMain :: wnd@makeWnd(null, %aspect, 1600, 900, "くいじゃん") do wnd@makeDraw(@wndMain, 0, 0, 1600, 900, %scale, %scale, false) do draw@clearColor(16#FF333366) do @player :: #@Pos do @player.x :: 400.0 do @player.y :: 800.0 do @enemy :: #@Pos do @enemy.x :: 1500.0 do @enemy.y :: 800.0 do @enemy.veloX :: -10.0 while(wnd@act()) if(lib@dist(@enemy.x, @enemy.y, @player.x, @player.y) < 50.0 + 40.0) do draw@rect(0.0, 0.0, 1600.0, 900.0, 16#FFCC3333) do draw@circle(@player.x, @player.y, 50.0, 50.0, 16#FFFFFF00) do draw@circle(@enemy.x, @enemy.y, 40.0, 40.0, 16#FFFF0000) do draw@render(0) do lib@sleep(800) do @wndMain.close() end if do @enemy.x :+ @enemy.veloX if(@enemy.x < -40.0) do @enemy.x :: 1640.0 do @enemy.veloX :: -lib@rndFloat(6.0, 50.0) end if do @player.veloY :+ 1.0 do @player.y :+ @player.veloY if(@player.y > 800.0) do @player.y :: 800.0 do @player.veloY :: 0.0 end if if(input@pad(0, %a) = 1 & @player.y = 800.0) do @player.veloY :: -20.0 end if do draw@circle(@player.x, @player.y, 50.0, 50.0, 16#FFFFFF00) do draw@circle(@enemy.x, @enemy.y, 40.0, 40.0, 16#FFFF0000) do draw@render(60) end while end func
さいごに
Kuinは「クラス名@関数名」みたいなスタイルの文法なので、アットマークが押しやすい位置にある日本語キーボード向けだなぁとか、細かくあげれば色々と所感はありますが。
くいなちゃんの言うように、今後ライブラリがより充実してきたら、高速性を武器に3DやAIや科学技術への発展の可能性も秘めた言語な気がする。
なにより、オブジェクト指向のサポートやメモリの自動開放といった我々が望むツボを押さえた上で、なおかつコンパイルが早くてサクサクなので、トライアンドエラーな書き方に向いているところが素晴らしいです。
ついに、自作プログラミング言語「Kuin」の完成版をリリースしました!! https://t.co/1hYAjy6vak KuinのエディタはKuin自身で作っていますので、そのくらいの機能はあります! 現時点では2Dゲームやツール制作に特化してますが、今後は3DやAIや科学技術 pic.twitter.com/lk1Zwsc3CN
— くいなちゃん (@kuina_ch) 2017年9月17日
KuinにおけるHello, world
最後に余談ですが、Kuinは何も書かないと「Hello, world!」が出力されます。なので、何も記述しない0行のサンプルコードが成立します。一時期アメリカで話題になった、10分間「無音」の曲のごとく。
更新履歴
- 2024/06/23 デザイン崩れを修正