近所の本屋で「楽しく学ぶC言語」という本を立ち読みした際、オンラインプログラミング環境 ビットアロー(Bit Arrow)の存在を知りました。ブラウザさえあればプログラミングして動かすことができます。

 

サポートしている言語の1つにC言語があるので使ってみました。サポートしていない構文(共用体、列挙体、、)があることは明記されていますが、実際に使ってみると他にもこまごまと不具合がありました。

 

一方、簡単なグラフィックス関数が用意されているので楽しくプログラミングすることができます。Angry Birdやハノイの塔をグラフィックスありにするとコマンドプロンプトでテキスト画面で動かすよりもずっと面白くなりました。

 

全体として自分はかなり気に入りました。シニアプログラミングもくもく会でも大いに役立ちそうです。それだけに不具合を解消して標準的なC言語にもっと近づくことを強く期待しています。

 

「低レイヤを知りたい人のためのCコンパイラ作成入門」読書会を続けておりますが、コンパイラを作ると再帰的なプログラミングを多用します。

 

コンパイラは文法規則を解析しなくてはならず、文法規則自体が再帰的な定義になっているので当然そうなる訳ですが、再帰的プログラミングはどうも苦手意識があるのでこの際勉強し直すことにしました。

 

まず今回の読書会で使っているRuiさんの記述の中に、「自分のように再帰に慣れている者でも時々不思議な感じがする、再帰とはそういうものなのだろう」、というような文章がありました。Ruiさんでもそうなのかということで少し安心しました。再帰にはいつももやもや感があり、もやもや感を完全に払拭するまではだめなのかなと思っていたので。

 

また「再帰的思考法」という古い本を読んでいるのですが、その中にも勇気という言葉が出てきます。つまり何か難しい問題を解こうとして関数を書いている最中、まだ未完成な状態で自らを呼んで問題解決するという書き方なので、そんなことをやっていいのかという抵抗感がどこかにありやるには勇気を要する、それが再帰的なプログラミングの障害になるのは自分だけではなく良くあることなのだと分かり、これも安心につながりました。

 

昔はそもそも再帰的に書いてもいいこと自体が不思議だと思っていましたが、それについてはC言語でどのように処理されるかまで理解したことで解決しています。つまり自分を呼ぶと言ってもそれは単に関数の先頭アドレスにジャンプするだけなのでジャンプはどこにでもできるのだから当然できる、自分の中で自分を呼ぶと上書きしてしまって不具合が起きないのか気になっていましたが、C言語では引数も関数内でstaticを付けずに宣言した変数も、関数を呼ばれた時点でスタック上に新規に確保するので別のメモリを使う訳だから上書きは発生しないと理解した時から気にならなくなっていました。

 

先日「低レイヤを知りたい人のためのCコンパイラ作成入門」読書会3回目を開催しました。

比較演算子までやりました。サポートする文法規則も大分増えてきました。

C言語では、if (a == b == c)と書けるがaとbとcの3つが同じであるという意味にはならない、if (1 < a < 5)と書けるがaが1から5の範囲内にあるという意味にはならないのは文法規則の決め方に依存しているのが理解できました。

今回も盛り沢山だったのでしっかり復習しようと思います。次回は分割コンパイルとリンクからです。