このチャプターの目次
1 はじめに
Chapelは、型推論とテンプレートと区分化大域アドレス空間を特徴とし、高度に抽象化された高生産性並列言語である。
NUMAや分散メモリ環境を得意とし、通常の共有メモリ環境と同様の記述性ながら、高度な並列分散処理を実装できる。
$ VERSION=1.28.0
$ wget https://github.com/chapel-lang/chapel/releases/download/$VERSION/chapel-$VERSION.tar.gz
$ tar xzf chapel-$VERSION.tar.gz && cd chapel-$VERSION && ./configure && sudo make install
以下のhello.chplを作成する。main関数は省略できる。コメントの記法は、C言語(C99)と同様だが、ネストできる。
/*
multiline comments
or block comments
*/
writeln("Hello, world!"); // 1-line comments
chplでビルドして、helloを生成する。--fastを指定すると、最適化が有効になり、実行時の検査機能が無効化される。
他にも、--savecを指定すると、C言語に変換できる。helloには、--helpを始め、便利な機能が自動的に付加される。
$ chpl --fast -o hello --savec savec hello.chpl
$ ./hello
Hello, world!
$ ./hello --help
Chapelでは、module宣言で名前空間を定義する。関数の外に記述された処理は、名前空間の初期化と同時に実行される。
最も外側の処理は、拡張子.chplを除外した名前の、名前空間を構成する。これが、main関数を省略できた理由である。
module Foo {
writeln("initilize Foo");
proc main() {
writeln("This is Foo");
}
}
module Bar {
writeln("initilize Bar");
proc main() {
writeln("This is Bar");
}
}
import baz.Foo;
import baz.Bar;
proc main() {
Foo.main();
Bar.main();
}
複数の名前空間を定義した場合は、どの名前空間に実装されたmain関数を起動するか、ビルド時に指定する必要がある。
$ chpl --main-module baz baz.chpl
$ ./baz
initilize Foo
initilize Bar
This is Foo
This is Bar