ChucK: Language Specification > Overview

ChucK: 言語仕様 > 概要

version: 1.2.x.x (dracula)

ChucK - [Language Specification : Overview]

概要

ChucK は強く型付され、また強く時間に結びつけられた(strongly-timed)、並列実行が可能なマルチメディアプログラミング言語です。ChucK の処理系は仮想命令へのコンパイルを行ない、それらは仮想マシンによって即座に実行されます。

ChucK を実行する

いくつかの簡単なメモ。

  • あなたは ChucK をローカルコンピュータにインストール (build instractions を参照のこと) し、また、実行することができます。
  • ChucK は chuck と呼ばれるコマンドラインアプリケーションです。(Audicle を参照のこと)
  • コマンドプロンプトやターミナルから ChucK を実行することができます (例: OS X なら Terminal や xterm、Windows なら cmd や cygwinLinux なら…あなたはお好きなターミナルをお持ちでしょう?)
  • これらの手順はあくまで概要です。コマンドラインのオプションに関するより詳細な情報が必要な場合には VM Options の頁を参照のこと。

foo.ck というプログラムまたはパッチを実行するには、単純に chuck にファイル名を渡して実行します。

 %> chuck foo.ck 

同時に複数のパッチを実行する(もしくは、特定のパッチを複数実行する)には次のようにします。

 %> chuck foo.ck bar.ck bar.ck boo.ck 

ChucK の実行を制御するため、およびシステムに関するある種の情報を取得するために、いくつかのコマンドラインオプションが用意されています。たとえば、次の例では、システム上で利用可能な全てのオーディオ装置と MIDI 装置を探し出して表示します。あなたはコマンドラインやあなたのプログラムから、何らかの方法 (通常は数字で) それらを指定することができます。(このことについては、VM Options の頁により詳細な情報があります)

 %> chuck --probe 

ChucK はホスト/リスナとして、別のターミナルから送られたパッチを受け取って実行することができます。サーバとする仮想マシンに対して --loop オプションを指定することによって、実行中のプログラムが終了した後に仮想マシンが自動的に終了しないようになります。

 %> chuck --loop 

(詳細な情報については On-the-fly Programming ガイドを参照してください)

ChucK リスナが動作している場合、+ オプションを使うことによってプログラム/パッチをリスナに送り込むことができます。

 %> chuck + foo.ck 

同様に、- と = を使うことによってパッチを削除/置換することや、^ を使って状態を表示することもできます。詳細については On-the-fly Programming を参照してください。

この言語仕様書に記載された多くのコードサンプルは、基本的な chuck のプログラムのみを使って実行することができます。

コメント

コメントとはコードのかたまりのうち、コンパイラによって無視される部分のことです。これらは他のプログラマが (もしくはあなた自身が) コードを読み解くことを助けます。二重のスラッシュは、行中の以降の内容が読み飛ばされるべきものであることをコンパイラに示します。/* と */ はブロックコメントで、コンパイラはこれらの間に記述された内容を読み飛ばします。(追記: ブロックコメントはネストすることができません)

    // this is a comment
    int foo; // another comment

    /* 
       this is a block comment
       still going...
    */

デバッグプリント

現在までのリリースでは、標準出力 (stdout and chout) は一時的に無効にされています。その代わりとして、以下のデバッグプリントの記法が有効です。

    // prints out value of expression
    <<< expression >>>;

この記法によって、括弧内に記述されたあらゆる式の評価値と型が表示されます。このデバッグプリントの記法は、代入式 (non l-value) 以外のあらゆる場所に配置することができ、また、副作用を持ちません。式の評価値がオブジェクトであった場合には、オブジェクトの参照アドレスが表示されます。

    // assign 5 to a newly declared variable
    5 => int i;
    // prints "5 : (int)"
    <<< i >>>;

    // prints "hello! : (string)"
    <<<"hello!">>>; //prints "hello! : (string)"

    // prints "3.5 : (float)"
    <<<1.0 + 2.5 >>>=> float x;

もう少し見栄えの良い出力が欲しいのであれば、複数の式をコンマで区切ることでそれぞれの値を表示することができます。(それぞれの間には 1 つのスペース文字が表示されます)

    // prints "the value of x is 3.5" (x from above)
    <<<"the value of x is" , x >>>;

    // prints "4 + 5 is 9"
    <<<"4 + 5 is", 4 + 5>>>;

    // prints "here are 3 random numbers ? ? ?"
    <<<"here are 3 random numbers", 
        Std.rand2(0,9), 
        Std.rand2(0,9),
        Std.rand2(0,9) >>>; 

予約語

  • (プリミティブ型)
    • int
    • float
    • time
    • dur
    • void
    • same (unimplemented)
  • (制御構文)
    • if
    • else
    • while
    • until
    • for
    • repeat
    • break
    • continue
    • return
    • switch (unimplemented)
  • (class keywords)
    • class
    • extends
    • public
    • static
    • pure
    • this
    • super (unimplemented)
    • interface (unimplemented)
    • implements (unimplemented)
    • protected (unimplemented)
    • private (unimplemented)
  • (その他の chuck キーワード)
    • function
    • fun
    • spork
    • const
    • new
  • (special values)
    • now
    • true
    • false
    • maybe
    • null
    • NULL
    • me
    • pi
  • (special : default durations)
    • samp
    • ms
    • second
    • minute
    • hour
    • day
    • week
  • (special : global ugens)
    • dac
    • adc
    • blackhole