Part2では,私が日本語プログラム言語「ひまわり」「なでしこ」(カコミ記事「オリジナル言語の代表「ひまわり」「なでしこ」とは」参照)を作ったときの経験を基に,オリジナルのプログラム言語を作るうえでの言語作りの楽しさや製作のヒントを書きたいと思います。最初に,オリジナル言語を作ることになった動機や経緯を紹介します。皆さんがはじめてプログラム言語を作るときに何から手をつけたら良いのか,その参考になればと思います。その後,「ひまわり」の後継言語である「なでしこ」を例にとって,言語の設計や実装に関する工夫,できるだけ手軽に高機能するためにはどうすればいいのか,言語を使いやすくする開発環境はどうやって作るのか──などについてお話したいと思います。
私は,オリジナルのプログラム言語を作り,活用するためのポイントは三つあると考えています。
(1)言語のコンセプトを決める
(2)とにかく動くものを作ってみる
(3)開発ツールを整える
一つ目は,言語のコンセプトを決めることです。既存の言語を実装するだけでも十分に楽しいものですし,プログラミングの勉強になります。しかし,せっかくオリジナル言語を作るのですから,ユニークなものを作りたいものです。また,コンセプトを明確にしておくことは,製作途中で実装に迷うことがあっても,これを解決する糸口になります。
二つ目のポイントは,とにかく動くものを作ってみることです。いきなり高度な言語を完成させようと思っても,途中で挫折してしまうかもしれません。まずは,動くことを目標に作り,動いたら次の機能に挑戦するというように順々に作っていくのです。とにかく根気よくコツコツと作ることが大事です。
そして三つ目は,開発ツールを整えることです。プログラミングのための補助ツール,エディタ,ドキュメントを用意するのです。これらがあると,オリジナル言語を自分以外の人にも使ってもらえますし,自分自身も気楽に活用できるようになると思います。ここから先のお話では,こうした点を少しずつ説明していきましょう。
定型的な仕事を楽にしたかった
2001年の春に,日本語のプログラム言語「ひまわり」を作り始めたのは,突然の思いつきからでした。ある日,簡単な言語を作ることで,今やっている仕事を楽にすることができるかもしれないとふと思いついたのです。以前から,自分でプログラム言語が作れたら楽しいだろうなぁとは思っていましたが,まさか本当に作ってしまうとは想像もしていませんでした。
「ひまわり」の開発を思いついたころ,私は,小さな不動産屋で主に雑用を担当していました。会社のホームページをメンテナンスしたり,物件の整理や顧客管理など,営業を後方支援する仕事をしていました。がりがりプログラムを書くことは少なく,手作業でやるのが大変な仕事を,Perl,Borland Delphi,Microsoft Excelのマクロなどをその時々で使い分けながらこなしていました。ほとんど使い捨てのプログラムで,一度実行して終わりというものばかりでした。
しかし使い捨てのプログラムをちょっと実行するだけなのに,本格的な統合開発環境を起動させるのは面倒だなと私は感じていました。そこで,よく行う処理を命令としてまとめておけば,きっと作業をこなすのが楽になるだろうと,自分の仕事を片付けるための簡単なマクロ言語を作ってみようと思ったのです。
このとき考えていたのは,自分の仕事をちょっと楽にするための小さな言語です。フロッピ・ディスクやUSBメモリーに入れて持ち運べるくらいのものにすれば,出先のパソコンで作業する場合でもインストール不要ですぐに使えます。支店や顧客の所に出向いたときに作業するのに便利だろうと考えたのです。
同時に,どうせ言語を作るなら一風変わったものを作りたいとも思いました。いろいろとアイデアを練ったところ,日本語で記述できるプログラム言語というのが思い浮かびました。そのころ社内でプログラムを作れるのは私一人だったので,もし日本語でプログラムを書ければ,社内のほかの人もプログラムを作れるだろうと思ったのです。そうなれば,私の仕事が減って楽ができるなぁと夢が広がりました。
“必要は発明の母”と言います。皆さんも,何か作りたいを思ったら,自分の身近なところに,プログラムを作ることで楽になる(または楽しくなる)ことがないかを探してみるといいと思います。
一つずつ目標をクリアする
日本語プログラミム言語「ひまわり」は,そんな私が初めて作ったプログラム言語です。いきなり大きなものを作るのは無理だと思ったので,「とりあえず動くもの」という目標を掲げて作り始めました。あまり深いことは考えず,仕事の空いた時間を利用してコツコツと組み立てていきました。
日本語で書かれたプログラムを読み込んで動く「ひまわり」は,インタプリタ*1方式の言語です。当時はあまりプログラム言語の製作に関する知識がなく,難しいことは全く考えていませんでした。
一番初めは,以下のような単純なプログラムが動くようにしようと考えました。
「こんにちは」と,表示。
言語の習得時と同じよう,言語の作成も“やっぱりHello Worldからだろう”と思ったのです。
昔あったように,「ヒョウジ("コンニチハ")」とBASICをカタカナに和訳しだだけのものは格好よくないので,なんとしても日本語の語順で実行したいと思っていました。そこで,図1のような仕組みで実行することを考えました。「ひまわり」は句読点が単語(トークン)の区切りです。そこで,(1)まず,ソースから句読点までの語句を切り出します。(2)そして,それが命令かどうかを判断します。命令でなければ,それをスタックに乗せます。(3)続けて,次の句読点までの語句を切り出して,命令かどうかを判断します。(4)命令ならば,命令が必要とする引数の数だけスタックから下ろして命令を実行する,という仕組みです。
| |
図1●日本語の語順で実行する仕組み |
この仕組みは,Forthというプログラム言語を参考にして考えました。Forthは日本語の語順に近い形で動くというのを何かで読んだのです。言語を作るときは,何か参考となる言語を探してみるのも良いでしょう。
それから,命令を実行するだけでなく,足し算や掛け算などの「計算をさせること」を考えました。計算式を前から順番に足したり引いたりすることはできたのですが,これだと,1+2×3を計算したとき,9という間違った答えを出してしまいます。掛け算や割り算は,足し算や引き算より先に計算させなくてはいけません。試行錯誤したものの,うまいやり方が思いつきませんでした。
どうしたら正しく計算させることができるのかしばらく悩みました。そんなころ,たまたま書店で立ち読みしたアルゴリズムの本に,四則演算を行うプログラムが載っていました。「式の評価」と題されたわずか1ページに満たない(コメントなどを含め90行程度)の簡潔なプログラムでは正しい順序で計算が行われていました。
当時は,この「式の評価」のプログラムがどういう原理で動いているのか,よくわかっていませんでしたが,このページを参考にひまわりのプログラムの中に書き写したら,なんと正しく計算処理が動いてしまいました。「アルゴリズムってすごい!」と非常に感激したのを覚えています。その本は,『C言語による最新アルゴリズム辞典』(奥村晴彦著,技術評論社発行)という本です。今でも,何かの折に開いては参考にしています。
ここまでできると,プログラムが動くのがうれしくて,プログラミングがとても楽しくなりました。その後一気に,制御構文の「もし」(IF)や「繰り返す」(FOR)などを作り込み,言語として必要な機能が完成したのです。先に触れたように,はじめは「とにかく動くこと」,そして「計算機能を付けること」,「制御構文を付けること」といった具合に,一つずつ目標をクリアするように作っていくことが,完成品を作り上げるための秘けつだと思います。
|