= Konoha へ ようこそ =

Konoha は、「スクリプティング言語の可能性」を学術的に探求するため、
横浜国大で開発されている新しいプログラミング言語です。

こうやって紹介を始めると、さぞかしすごく目新しい言語なのかと、
何かしら期待を抱かせてしまうかも知れませんが、
その文法はあきれるほどふつうです。

ちょっと、fibonacci 数列を求める関数を書いてみると:

{{{
int fibo(int n) {
  if(n < 3) return 1;
  return fibo(n-1) + fibo(n-2);
}
}}}

全く、C言語ともJava言語とも区別がつきません。

== 大学育ち

Konoha は、純粋に大学育ちのプログラミング言語です。

最初の用途として、身近なところでプログラミング教育に利用しはじめたため、
学生にとっても教員にとっても（←これ重要）、
受け入れやすいふつうな文法になっていきました。

{{{
// ここまで真似しなくてもいいんじゃないの？
void main(String[] args) {
  System.out.println("hello,world");
}
}}}

これは、逆にいえば、C言語やJavaのプログラミング経験があれば、
新しいプログラミング言語を覚える努力を最小限に抑えられることになります。
実際、Konohaは、ふつうに Java だと思って書いてみると、
ほんの少しの手直しでそのまま動いたりします。
（というわけで、お急ぎの方にはチュートリアルはここまでで十分なのです。）

あまりに Konoha は、「Java とそっくり」と自慢しすぎたためか、
学生から、授業の感想にすら、
「Konoha もそろそろ独立した言語として独自路線を打ち立てるべきではないか？」
みたいなことを書かれてしまう状況になってしまいました。

そうです。
ドキュメントを書くのをさぼっていただけで、昔から独自のスタイルをもっています。

{{{
// Konohaスタイルの "hello,world"
OUT << "hello,world" << EOL;
}}}

== スクリプトと対話型インタプリタ

Konoha には、大きくわけて２種類にモードでプログラムを実行することができます。
ひとつはスクリプトモードで、
プログラムをスクリプトとしてファイルに保存し、それを実行する方法です。
もうひとつは、対話型インタプリタ、もしくは対話モードと呼ばれるモードで、
ユーザが入力したプログラムを１行ごと解釈しながら実行していきます。

どちらのモードを選択しても、
Konoha は独自の"run anytime コンパイラ"技術により、
プログラムは独自のバイトコードにコンパイルされ、
レジスタマシン型アーキテクチャを採用したバーチャルマシンによって
高速に実行されます。

=== スクリプトモード

Konoha スクリプトは、
通常 myscript.k のようなファイル拡張子 .k のファイルに保存します。
スクリプトのソースコードは、UTF8 を用います。

{{{
$ konoha -g myscript.k
}}}

スクリプトモードの便利なオプション:

 * -g デバッグ関連の機能を有効にする
 * -v 実行時の情報を詳細に表示する(verbose)
 * -i スクリプト実行後、対話モードへ移行する 
 * -p プロファイル機能を有効にする

また、UNIX 環境では、次のようにスクリプトファイルの先頭を#!で始め、
konoha コマンドのパスを記述すると、

{{{
#!/usr/local/bin/konoha -g
print "hello,world"
}}}

スクリプトファイルを直接実行できるようになります。

{{{
$ chmod a+x myscript.k
$ ./myscript.k
hello,world
}}}

=== 対話モード

Konoha は、スクリプトファイルの指定なしにkonoha コマンドを実行すると、
対話モードとして起動されます。
対話モードでは、ウェルカムメッセージが表示され、
プロンプト >>> によって、ユーザに対して入力待ちであることを示します。

{{{
$ konoha
Konoha 0.7(BAKUMAN) LGPL3.0 (#691, Sep 19 2009 20:06:27)
[GCC 4.2.1 (Apple Inc. build 5566)] on macosx_32 (32, UTF-8)
Options: iconv refc regex used_memory:350 kb
>>> 
}}}

ユーザは、>>> にたいして実行したいプログラム（ステートメントや式）を入力します。
Konohaは、プログラムをコンパイルして、その実行結果を次の行に表示します。

{{{
>>> print "hello,world";
"hello,world"
}}}

ちなみに、print 文は、プリントデバッグ用のステートメントです。
対話モードでは自動的にデバッグ状態で有効になりますが、
スクリプトモードでは -g オプションをつけて起動しないと表示されません。

対話モードは、bye と入力すると、終了します。

{{{
>>> bye
}}}

=== スクリプトの実行前の検証

Konoha は、"Run anytime コンパイル"技術によって、
深刻なエラーを発見してもそれを安全に実行可能なコードに変換し、
いつでも実行してくれます。
この機能は、プログラム開発途中において、部分的に動作を確認したいときに、
威力を発揮するでしょう。
（コンパイルを通すために無駄にコメントアウトする必要はありません。）

Konoha は、従来のスタティック言語と同じく、
コンパイル時にエラーを発見するだけのオプション -c もあります。
このオプションを指定したとき、
スクリプトの文法チェックと型検査のみ行い、
スクリプトは実行されません。

{{{
$ konoha -c myscript.k

}}}

また、コンパイラのレポーティングは、通常のスクリプトモードより詳細化します。
うっかりミスを早期に発見するためにも、
ときどき検証するのがよいでしょう。

[[include(KbookIndex)]]
[[include(KbookFooter)]]

{{{ comment

== Konohaはどこへ行く？

Konoha は、その前進のMerlot から含めると、
2005年頃の未踏ソフトウェア創造事業から開発が始まっています。

当初の目的は、
軽量オントロジ技術とオブジェクト指向プログラミングの融合だったので、
純粋に、研究志向のプログラミング言語でした。


今後も、大きな方向性として、
高度ユビキタスコンピューティング時代のアプリケーション開発を支える
新しいプログラミング言語を目指していくと思います。


=== どこでもスクリプティング言語エンジン

Konoha は、非常にポータビリティの高いコーディングを行っています。
そのため、Windows Visual C++ に始まり、
組み込み向けのT-Engineボード (TRON OS)の上でも動作しますし、
最近は Linux Kernel Module として、カーネル内で実行することもできます。



}}}





