コーディング練習: 人の書いたプログラムを自分の方法で書き直す

web上で、とある凄腕エンジニアのかたが実装した簡単なプログラミング言語の実装と、その様子を紹介したビデオを見つけました。

gist.github.com

www.youtube.com

思うところあって、プログラムの仕様をできるだけ変えないまま、自分なりに書き直す練習をしたかったので、ちょうどいい小さな規模のこのプログラムで実践してみました。

gist.github.com

仕様を変えないまま…とは言っても仕様が文書なりで明確化されていたわけではないので、ソースから著者の意図を推測しただけです。一から書き直すという方法もありますが、今回は既存のソースを改編するという方法をとりました。

変更点は次の通り。

  • 仕様っぽいもの(すごく柔らかい、お金を取るプロダクトの仕様書として出したら殴られるレベルのもの。ここではこれでいいんです)をソース冒頭に書いた
  • 関数名、変数名(とくにグローバル変数)は何をしているものなのかをわかりやすくした
  • エラーチェックの追加: 引数の数、バッファオーバーランなど
  • print機能(P()関数)による出力と、トップレベルの文を評価した際の出力を区別できるようにした
  • 雑多なバグ修正

もう少しこだわると、コードへのポインタはグローバル変数ではなく関数引数にしたかったんですが、無用にややこしくするだけになる恐れがあったので、やめました。

可読性においては初級者には見やすくなっていると思います。その一方で、上級者にとっては冗長に見えるかと思います。それらはオリジナルソースの作者と私の好みの違い、および、ソースをどれだけ気合を入れて書いたかの違いでしょう。「俺だったらここはこうするね」という意見も多々あろうかと思います。色々な人が同じことをした場合のソースを並べて見てみたいものです。

この試みはけっこう面白かったので、他のソースでもやってみようかと思います。オレオレプログラムを書く場合とは異なる脳の部位を使っている気がします。