Pike

Pike は、インタプリタ型の汎用高級クロスプラットフォーム動的プログラミング言語であり、C言語に良く似た文法を持つ。他の動的言語とは異なり、Pike は静的型付けも動的型付けも可能で、明示的な型定義を必要とする。柔軟な型システムであり、動的型付き言語として素早い開発と柔軟なコードが可能である一方、静的型付き言語としての利点も併せ持っている。Pike にはガベージコレクション機能、豊富なデータ型、第一級無名関数、各種プログラミングパラダイム（オブジェクト指向、関数型および命令型プログラミング）のサポートといった特徴がある。Pike はフリーソフトウェアであり、GPL、LGPL、MPL でライセンスされている。
歴史.
Pike の起源となったのは、LPC というMUDのために開発された言語であった。スウェーデンのリンショーピング大学のコンピュータ同好会 Lysator の Fredrik Hübinette や Per Hedbor らがMUDドライバから言語部分と仮想機械部分を分離し、各種アプリケーションの高速プロトタイピング言語として使った。LPC のライセンスは商用利用を許していなかったため、新たなGPL実装が1994年に書かれ、これを μLPC（マイクロLPC）と呼んだ。1996年、商用利用が広がる期待を込めて μLPC を Pike と改称（Pike はカワカマス類のことで、ロゴもカワカマスの絵である）。彼らの設立した会社は現在では Roxen Internet Software として知られ、Pike プログラマを数多く抱え、Pike 開発に関するリソースを提供している。2002年、リンショーピング大学のプログラミング環境研究所が Roxen に代わって Pike の保守を行うようになった。Pike プログラマの何人かはオペラ・ソフトウェアのリンショーピング事業所に就職した。そこでは、Opera Mini アプリケーションのサーバ/ゲートウェイ部分にPikeが使われている。
文法の概要.
Hello World.
Pike による Hello World プログラムは次のようになる。
int main() {
 write("Hello world!\n");
 return 0;
C言語やC++を知っている人には説明不要と思われるが、このプログラムを解説すると、次のような点が挙げられる。
データ型.
以下の一覧はPikeが提供する標準データ型を全て示したものである。より高度なデータ型（シーケンス、キュー、ヒープ、スタックなど）はADT（Advanced Data Types）モジュールにあり、Pike に標準で含まれている。
基本データ型:
コンテナ型:
その他の型:
Pike は全変数に明示的な型宣言を必要とする。つまり静的型付き言語であり、コンパイル時に型の誤りを検出する。以下のコードでは "number" という変数は整数型と宣言されているため、浮動小数点数や文字列を代入しようとしているのでコンパイル時にエラーとなる。
int number; // 整数変数なので、整数しか代入できない。
number = 5.5; // 5.5 は浮動小数点数なので、エラーになる。
number = "5"; // "5" は文字列なので、エラーになる。
このような性質は、動的プログラミング言語としては制限が強すぎるとされることが多い。しかし、C、C++、Java などとは異なり、Pike はより柔軟な型システム（タグ付き共用体）を採用している。このシステムでは、複数の型を格納できる変数を宣言でき、C言語の系統では共用体の境界を無視しないと同じようなことは実現できない。
以下の例は、整数または浮動小数点数を保持できる一つの変数を示したものである。
int|float number; // 整数または浮動小数点数の変数
number = 5; // これは正しい。
number = 5.5; // これも正しい。
このように変数が複数のデータ型の値を保持できるため、変数がその時点で保持しているデータ型を知ることができる関数群がある。それらはデータ型名に p を後置した名前であり、intp、floatp、stringp などがある。
int|float number;
number = 5;
intp(number); // number には int が代入されているので true を返す。
floatp(number); // false を返す。
number = 5.5;
floatp(number); // number は新たに float を代入されているので true を返す。
さらに、特別なデータ型 "mixed" がある。この場合、任意のデータ型をその変数に代入可能である。
mixed anything;
anything = 5; // anything の値は整数値の 5 になる。
anything = 5.5; // anything の値は浮動小数点数値の 5.5 になる。
anything = "5"; // anything の値は文字列の "5" になる。
Pike では、値の型を変換する手段として明示的な cast も使うことができる:
mixed anything;
anything = (int)5.5; // anything の値は整数値の 5 になる。
anything = (string)anything; // anything の値は文字列の "5" になる。