私たちプログラマーは、コンピュータに動作を指示するためにプログラムを書いています。

それはすなわち、私のココロの中にある「やりたいこと」を表現する手段として、プログラミング言語を使っています。

 私は、長く組込みといわれる分野で、プログラムを書いていました。この分野で使われる言語は、圧倒的にC言語が多く、高級言語が使われることはほとんどありません。

しかし私は、この組込み分野でも今後高級言語を使っていきたいと考え、現在Ruby言語をベースにした組込み用言語 mruby/c を開発しています。

 プログラミング言語は、コンピュータが生まれてからこれまで、たくさんの人によって様々な言語が作られ、提供されてきました。

これらプログラミング言語は、言語設計者の考え、時代背景、その言語を適用したい分野などの要因によってさまざまに、言語のもつ表現力に差が生まれます。

 

たとえば、10の要素をもつ配列の全ての要素について処理を行いたい場合、

C言語であれば、


for( int i = 0; i < 10; i++ ) {
  something( a[1]);
}

これがRubyであれば、こうなります。


a.each { |a1| something( a1 ) }

この例で示した程度であれば、言語特有のイディオムの差でしかなく、慣れたプログラマーであれば悩むことですらありませんが、Rubyの方は専用のメソッドが用意され、繰り返しという基本的な要求に素直に応えてくれる一方、C言語の方は、

  • 繰り返し用のint型カウンタ変数を使う。
  • 0から10未満で繰り返す。
  • 繰り返しするたび1ずつ増加させる。

といった、繰り返しの方法までプログラマーが指示する必要があるという、言語の設計思想と、そこから生まれる表現力の差が見て取れます。

一方、データタイプやコレクションにも目を向けてみますと、C言語のもつデータタイプやコレクションは、わずかに整数と実数、および配列だけで、文字列すら持ち合わせていません。

(C言語は整数型の配列を使いゼロで終わるという「約束事」によって、「擬似的」に文字列を表現します。)

Rubyをはじめとする最近の高級言語は、文字列、正規表現、複素数、連想配列など、多くのデータタイプやコレクションによって、プログラマーの頭の中にひらめいた方法を、より直接的に、迅速に表現することができます。

 

 このことが、C言語一辺倒であったマイコン組込み機器にも、高級言語を使いたいというニーズの源泉です。

(専門研究員 東)