川合のプログラミング言語自作のためのテキスト第四版#1
(1) はじめに
- プログラミング言語の自作のテキストを書いてからもう5年が経ちました。→a21_txt01
- 今の私なら、また全然違った切り口でプログラミング言語自作入門が書けるだろうと思って、試しに書いてみることにしました。
- 今回は acl4 みたいなやり方で、つまり「ライブラリ自作駆動開発」でやってみようと思います。これは「わらしべ長者な開発」ともいえるもので、うまくいくととても楽しいので、ぜひこれを紹介しつつ、プログラミング言語づくりもしたいと思います。
(2) プログラミング言語の作り方として正しいのはどちらなのか?
- 前述の通り、私は以前「10日くらいでできる!プログラミング言語自作入門」を書いていました。今回は全く異なるやり方で言語を作っていきます。・・・そうなると、「じゃあどっちの作り方が正しいのか?」という疑問が出てくるのは当然だと思います。
- でもこれは「東京から大阪に行くときに、新幹線で行くのが正しいのか、飛行機で行くのが正しいのか、それともリニア新幹線の完成を待ってそれで行くのが正しいのか」みたいなもので、別にどれが正しいとか間違っているとかではないのです。
- 私自身も、この2026年版のほうが後発だからこっちが優れている!と言いたい気持ちはあるものの、いやでもやっぱり客観的に見たら、一長一短というか、新幹線vs飛行機みたいなものでしょう。・・・ただまあ、そうですね、この2026年版のほうが意外性はあると思います。
- もし余裕があれば、両方の作り方の違いを眺めてみてください。なるほどねー、こっちではそうやるのかー、みたいな発見がきっとあります。
(3) 「ライブラリ自作駆動開発」とは何ですか?
- 最初に断っておきますが、この言葉は私が適当に考えた造語で、一般的に使われている言葉ではありません。だから辞書とかで調べてもきっとどこにも載ってないです(もし将来載るようになったら、びっくりです)。
- C言語は便利な関数を書き足していけば、どこまででも便利になる可能性を持っていると、私はずーっと前から思っていました。printf()やstrcmp()、sqrt()など標準関数は便利な機能を提供してくれています。もしそれらがなくて、そういうものも全部自作しなければいけないとしたら、それはとてもめんどくさいです(まあそれはそれでちょっと楽しいんですけどね)。
- C言語はC++やほかの言語に比べて機能が少なくて不便だと言われることが多いですが、それは第一には便利な関数が少ないからです。便利な関数をもっと増やせば、見違えるほど便利になるはずなんです。標準関数程度で満足せず、もっと便利になりそうな機能を追加していけば、すごいことになるんです。つまり言語が悪いわけではなく、ライブラリが悪いのです。・・・C言語は最初からライブラリによってパワーアップしていけるようになっていて、そういう拡張性のある言語だったはずなのに、あまりライブラリを使って言語の能力を底上げしていこう!みたいな流れにはならず、「はい、じゃあ新しい言語を作ったのでそちら行きましょう」が強調されて、ちょっと見捨てられ気味なのです。それはかわいそうじゃないですか。
- もちろんオブジェクト指向言語ではないので、クラスライブラリがきれいに書けないという問題はあります。でもそういうきれいさをあきらめれば、とにかくなんだってできるのです。ということで、これからどんどん作って、自分だけのスーパーC言語にしていきましょう。
- みなさんは「わらしべ長者」という昔話をご存じでしょうか。・・・最初は一本のわらを持っていただけだったのに、物々交換を繰り返していくうちに、最後は家を手に入れてしまうというすごいお話です。
- Wikipediaにより詳しい説明があります → https://ja.wikipedia.org/wiki/%E3%82%8F%E3%82%89%E3%81%97%E3%81%B9%E9%95%B7%E8%80%85
- 私はライブラリ自作駆動開発をわらしべ長者開発だと説明することもあります。なぜなら、最初は取るに足らない些細な関数を数個作るところから始まります。それができたら、その関数を使ってより高度な関数群を作ります。そしてそれもできたら、それらを使ってさらに高度な関数群を作っていくからです。・・・これを繰り返して、最後には(いや、それが最後というわけでもないのですが)、結構高度な関数をうまいこと作ってしまうのです。当初はまさかここまでできるなんて思いもしなかったのに。
- ここで作った関数群は、もちろん別の開発にも使えます。自作ライブラリは、自分の財産です。次の開発をするときには、わらしべ開発をやり直す必要はないので、最初から高度なことができます。こうして私は、以前の私よりもなんでもさっさと作れるようになっているわけです。私自身が成長したというよりは、ライブラリが成長したようなものですが、とにかく開発速度は上がっているのです。・・・ということで、私も読者の皆さんも、いっしょにスーパーなプログラマになろうじゃありませんか!
こめんと欄