「コンピュータ言語の持つ表現力」
2016年08月24日
私たちプログラマーは、コンピュータに動作を指示するためにプログラムを書いています。
それはすなわち、私のココロの中にある「やりたいこと」を表現する手段として、プログラミング言語を使っています。
私は、長く組込みといわれる分野で、プログラムを書いていました。この分野で使われる言語は、圧倒的にC言語が多く、高級言語が使われることはほとんどありません。
しかし私は、この組込み分野でも今後高級言語を使っていきたいと考え、現在Ruby言語をベースにした組込み用言語 mruby/c を開発しています。
プログラミング言語は、コンピュータが生まれてからこれまで、たくさんの人によって様々な言語が作られ、提供されてきました。
これらプログラミング言語は、言語設計者の考え、時代背景、その言語を適用したい分野などの要因によってさまざまに、言語のもつ表現力に差が生まれます。
たとえば、10の要素をもつ配列の全ての要素について処理を行いたい場合、
C言語であれば、
|
これがRubyであれば、こうなります。
|
この例で示した程度であれば、言語特有のイディオムの差でしかなく、慣れたプログラマーであれば悩むことですらありませんが、Rubyの方は専用のメソッドが用意され、繰り返しという基本的な要求に素直に応えてくれる一方、C言語の方は、
- 繰り返し用のint型カウンタ変数を使う。
- 0から10未満で繰り返す。
- 繰り返しするたび1ずつ増加させる。
といった、繰り返しの方法までプログラマーが指示する必要があるという、言語の設計思想と、そこから生まれる表現力の差が見て取れます。
一方、データタイプやコレクションにも目を向けてみますと、C言語のもつデータタイプやコレクションは、わずかに整数と実数、および配列だけで、文字列すら持ち合わせていません。
(C言語は整数型の配列を使いゼロで終わるという「約束事」によって、「擬似的」に文字列を表現します。)
Rubyをはじめとする最近の高級言語は、文字列、正規表現、複素数、連想配列など、多くのデータタイプやコレクションによって、プログラマーの頭の中にひらめいた方法を、より直接的に、迅速に表現することができます。
このことが、C言語一辺倒であったマイコン組込み機器にも、高級言語を使いたいというニーズの源泉です。
(専門研究員 東)