Io(イオあるいはアイオー)は、
オブジェクト指向プログラミング言語であり、Smalltalk、Self、
Lua、LISPなど、多数の
プログラミング言語の影響を受けて開発されました。Ioは、プロトタイプベースのオブジェクトモデルを採用しており、オブジェクトとクラスの違いを持たないのが特徴です。この言語では、すべてがオブジェクトとして扱われ、
動的型付けが行われます。さらに、LISPのように文の概念がなく、制御フローは関数によって実現されます。また、アクターによる
並行性もサポートしており、これは最近の
プログラミング言語では珍しい特性です。
Ioの特長には、その効率性、軽量さ、外部リソースのインターフェースを自由に扱えるオープン性があります。Ioは、移植性の高いコンパクトな仮想マシン上で動作します。
歴史
Ioは
2002年3月7日頃にSteve Dekorteによって創造されました。彼は
プログラミング言語についてあまり詳しくなかったため、小型の言語を自ら作成することで学習を進めようとし、その結果としてIoが誕生しました。
言語の方針
Ioの開発方針は、概念的な統一と動的言語に関する研究にあります。したがって、性能の向上よりもシンプルさと柔軟性を重視していると言えます。
機能と特徴
文法
Ioの基本的なプログラムは、最も単純な場合、単一の識別子で表現されます。例えば、`doStuff`というメソッドは引数がないため、後ろに括弧を付ける必要はありません。引数のある場合は次のように書きます。
Ioでは、コメントを除くすべてがメッセージパッシングから成り立っています。以下に例を示します。
```io
System version
```
これは、`System`オブジェクトに対して`version`というメッセージが送られていることを意味します。演算子に関しては特別な扱いがされており、Ioの
構文解析器はこれらをメソッドコールとして処理します。
メソッドとブロック
Ioにおける匿名関数は、メソッドとブロックの二つで作成できます。両者の違いはスコープにあり、ブロックは
静的スコープ、メソッドは
動的スコープを持っています。どちらも
高階関数として機能します。
例
`Hello World`を表示するプログラムは次のように書かれます。
```io
Object clone(
| myObj |
myObj := Object new.
myObj say: 'Hello, World!'
myObj
)
```
Ioでは新しいオブジェクトはクローニングで生成され、親オブジェクトとの違いだけが新しいオブジェクトに格納される方式を取ります。これは差分継承と呼ばれます。
階乗プログラム
以下に、再帰を用いない階乗プログラムの例を示します。
```io
factorial := method(n,
range(n) map( |x| n
product(x)
))
).
```
このプログラム内では、`range`を利用していますが、実際には`for`ループの方が高速であることも留意が必要です。
参考文献
- - jEdit - Ioソースファイル用の強調設定
公式リンク
Ioは、多くの革新的な機能を提供する一方で、シンプルさを維持した興味深い
プログラミング言語です。