第1章. Keleusmaとは何か、そして何ではないか
この章の目的
この章を読み終える頃には、Keleusmaがどのような言語で、何のために作られていて、何を意図的に省いているのかが分かるようになります。この章ではコードは書きません。ガイド全体で唯一の純粋なオリエンテーションの章です。あとで読者が驚かされないように、ここで期待値を設定します。この章を読み終える頃には、Keleusmaがどのような言語で、何のために作られていて、何を意図的に省いているのかが分かるようになります。この章ではコードは書きません。ガイド全体で唯一の純粋なオリエンテーションの章です。あとで読者が驚かされないように、ここで期待値を設定します。
楽譜とオーケストラ
楽譜について考えてみてください。楽譜はオーケストラそのものではありません。楽譜は自分で音を出すこともありません。楽譜は正確で有限な指示の集まりであり、その指示を実行に移して会場を音で満たすのはオーケストラの方です。楽譜について考えてみてください。楽譜はオーケストラそのものではありません。楽譜は自分で音を出すこともありません。楽譜は正確で有限な指示の集まりであり、その指示を実行に移して会場を音で満たすのはオーケストラの方です。
Keleusmaは楽譜を書くための言語です。オーケストラの役を担うのは、別のもっと大きなプログラムで、これを「ホスト」と呼びます。ホストは音を出したり、ゲーム画面を描いたり、モーターを動かしたりという、大きくて複雑な仕事を担当します。Keleusmaのプログラムはそのホストの内側に住み、ホストに対して正確かつ予測可能な指示を伝えます。Keleusmaは楽譜を書くための言語です。オーケストラの役を担うのは、別のもっと大きなプログラムで、これを「ホスト」と呼びます。ホストは音を出したり、ゲーム画面を描いたり、モーターを動かしたりという、大きくて複雑な仕事を担当します。Keleusmaのプログラムはそのホストの内側に住み、ホストに対して正確かつ予測可能な指示を伝えます。
これがKeleusmaについて最初に理解すべきことです。Keleusmaは「組み込み」言語です。それ自体が一つのアプリケーションになることを意図したものではありません。むしろ、もっと大きなプログラムの内部にある、小さく、正確で、信頼できる部分になることを意図しています。本ガイドではその大きな方のプログラムを一貫してホストと呼びます。これがKeleusmaについて最初に理解すべきことです。Keleusmaは「組み込み」言語です。それ自体が一つのアプリケーションになることを意図したものではありません。むしろ、もっと大きなプログラムの内部にある、小さく、正確で、信頼できる部分になることを意図しています。本ガイドではその大きな方のプログラムを一貫してホストと呼びます。
一定の拍に合わせて動く
音楽には拍があります。指揮者がタクトを振り下ろし、奏者は一拍を演奏して、次の拍を待ちます。この拍は止まることも、つまずくこともありません。音楽には拍があります。指揮者がタクトを振り下ろし、奏者は一拍を演奏して、次の拍を待ちます。この拍は止まることも、つまずくこともありません。
Keleusmaのプログラムも同じ仕組みで動きます。少量の有限な仕事をして、制御をホストに返し、また呼び出されるのを待ちます。この一回ぶんの番のことを、本ガイドでは「ティック」と呼びます。オーディオのプログラムなら16分音符ごとに1ティック、ゲームなら1フレームごとに1ティック、というように、テンポはホストが決めます。Keleusmaは、各ティックで何が起こるかを担当します。Keleusmaのプログラムも同じ仕組みで動きます。少量の有限な仕事をして、制御をホストに返し、また呼び出されるのを待ちます。この一回ぶんの番のことを、本ガイドでは「ティック」と呼びます。オーディオのプログラムなら16分音符ごとに1ティック、ゲームなら1フレームごとに1ティック、というように、テンポはホストが決めます。Keleusmaは、各ティックで何が起こるかを担当します。
Keleusmaにないもの、そしてその理由
Keleusmaは、ほとんどのプログラミング言語に含まれているいくつかの機能を意図的に省いています。省いているものには、それぞれ理由があります。Keleusmaは、ほとんどのプログラミング言語に含まれているいくつかの機能を意図的に省いています。省いているものには、それぞれ理由があります。
- 無制限のループはありません。Keleusmaにおける繰り返しはすべて、開始する前にその回数が決まっています。楽譜の繰り返し記号は何小節繰り返すかを示しますが、「とりあえずしばらく繰り返してみる」とは決して言いません。無制限のループはありません。Keleusmaにおける繰り返しはすべて、開始する前にその回数が決まっています。楽譜の繰り返し記号は何小節繰り返すかを示しますが、「とりあえずしばらく繰り返してみる」とは決して言いません。
- 再帰はありません。Keleusmaの関数は、直接にも、他の関数を経由しても、自分自身を呼び出すことはできません。再帰はありません。Keleusmaの関数は、直接にも、他の関数を経由しても、自分自身を呼び出すことはできません。
- 自由形式の入力もありません。Keleusmaのプログラムは、コンソールで誰かが入力するのを待ったりはしません。入力はティックの境界で、ホストから構造化された形で渡されます。自由形式の入力もありません。Keleusmaのプログラムは、コンソールで誰かが入力するのを待ったりはしません。入力はティックの境界で、ホストから構造化された形で渡されます。
これらすべての省略には、たった一つの約束があります。Keleusmaは、プログラムが走り出す前から、各ティックが有限の時間と有限のメモリで完了することを保証します。省かれた機能はちょうど、無限に動き続ける可能性のあるものや、際限なくメモリを消費する可能性のあるものです。言語がこの約束を守ろうとすれば、これらの機能を残しておくわけにはいきません。だからKeleusmaは省くことで約束を守ります。これらすべての省略には、たった一つの約束があります。Keleusmaは、プログラムが走り出す前から、各ティックが有限の時間と有限のメモリで完了することを保証します。省かれた機能はちょうど、無限に動き続ける可能性のあるものや、際限なくメモリを消費する可能性のあるものです。言語がこの約束を守ろうとすれば、これらの機能を残しておくわけにはいきません。だからKeleusmaは省くことで約束を守ります。
約束を平易に述べる
これらの制限のおかげで、Keleusmaのプログラムについて、実行する前から次のことが分かります。これらの制限のおかげで、Keleusmaのプログラムについて、実行する前から次のことが分かります。
- フリーズしない。
- メモリを予期せず使い切らない。
- 拍を常に保ち続ける。
第5部で、言語がこれらの性質をどのように確かめるかを説明します。今のところ重要なのは、制限が恣意的なものではないという一点です。これらは約束を守るための代償であり、約束こそがKeleusmaの存在理由です。「次の小節を時間内に終わらせる」と約束できない演奏家はオーケストラの席に座らせてもらえません。Keleusmaはプログラムに対して同じ基準を適用します。第5部で、言語がこれらの性質をどのように確かめるかを説明します。今のところ重要なのは、制限が恣意的なものではないという一点です。これらは約束を守るための代償であり、約束こそがKeleusmaの存在理由です。「次の小節を時間内に終わらせる」と約束できない演奏家はオーケストラの席に座らせてもらえません。Keleusmaはプログラムに対して同じ基準を適用します。
このガイドの使い方
このガイドは音楽を入口として使います。プログラミングの多くの考え方は、音楽の世界に別の名前ですでに存在しています。本ガイドではまず音楽の言葉で名指し、次にプログラミングの考え方に翻訳し、それから正確なKeleusmaの形に落とし込みます。楽譜が読めなくても大丈夫です。楽器が弾けなくても大丈夫です。音楽を聴く習慣さえあれば、十分な直感は持っています。このガイドは音楽を入口として使います。プログラミングの多くの考え方は、音楽の世界に別の名前ですでに存在しています。本ガイドではまず音楽の言葉で名指し、次にプログラミングの考え方に翻訳し、それから正確なKeleusmaの形に落とし込みます。楽譜が読めなくても大丈夫です。楽器が弾けなくても大丈夫です。音楽を聴く習慣さえあれば、十分な直感は持っています。
この章のあとの全ての章では、一つの小さなプログラムを作って実行し、出力を見ます。プログラムは意図して短く保たれています。目標は、読者が自分でそれをタイプし、実行し、書き換えてみることです。この章のあとの全ての章では、一つの小さなプログラムを作って実行し、出力を見ます。プログラムは意図して短く保たれています。目標は、読者が自分でそれをタイプし、実行し、書き換えてみることです。
この章のまとめ
- Keleusmaは、より大きなホストプログラムの内側に組み込まれる小さな言語です。Keleusmaは、より大きなホストプログラムの内側に組み込まれる小さな言語です。
- Keleusmaのプログラムは「ティック」と呼ばれる有限の一巡で動きます。
- Keleusmaは無制限のループ、再帰、自由形式の入力を省く代わりに、各ティックが有限の時間とメモリで完了することを保証します。Keleusmaは無制限のループ、再帰、自由形式の入力を省く代わりに、各ティックが有限の時間とメモリで完了することを保証します。
次の章では、Keleusmaのツールをインストールして、最初のプログラムを動かします。次の章では、Keleusmaのツールをインストールして、最初のプログラムを動かします。