書いてから実行までの流れ
先日書いたとおり最近は卒論そっちのけで(逃避ともいう)アイボプログラミングしているわけですが、ようやくOPEN-R(アイボのOS)上で動いているプログラムの構成を大体理解できました。ハードが違うわけですから通常のC++のプログラムと構成が異なるのはあらかじめ予想できていましたが、関数がどう呼ばれているかがh,cppのソースファイルではなく専用の設定ファイルに書いてあるのには手こずらされました。
さて、アイボでC++のプログラムを動かすための手順はこんな感じです。
- Windows上でC++のソースを書く。
- Windows上で起動しているVMwareのLinuxに転送。
- 専用コンパイラでソースのコンパイル。
- バイナリをアイボ専用メモリースティックに転送。
- メモリースティックをアイボに挿入して電源投入。
- 30秒ほど経過するとアイボ起きあがる。
- 意図したとおりに動くかどうかチェック
- 動けばそれで完了
- 動かないと落ちる(メモリアクセス違反を起こすと数分完全に固まる)
すでにアイボ上で動いているプログラムのソースは数万行に達しているのでおおもとのヘッダーファイルをいじったりなんかしたら、コンパイルにも数分かかります。結果的に上手くいってもソースを書いてから結果を見るまでには5分近くかかるわけです。
これで動けばいいのですが、久しぶりにC++のコードを書いていてポインタの操作とか存在をすっかり忘れていた僕の頭にはメモリのアクセス違反なんて完全に頭から消えていたわけでアイボを固まらせること数度。固まってしまうと電源は落とせないし、バッテリーを抜くこともできないので本当に待つだけです。
結局実装に失敗すると数行のコードを書き換えるだけで10分以上時間を取られてしまうのアイボ上のC++プログラミングです。こういう面倒なことを避けるためにスクリプト言語を搭載したり、XML言語でアイボを動かせるようにしたりと工夫しているわけです。
なにが言いたいかというとPythonなんかのスクリプト言語にどっぷり使ってしまうと、ちょっと書いてはすぐに実行というサイクルを繰り返していると(繰り返すことが可能だと)自分が書いたソースを精査する機会が減ってしまいます。結果的にこのコードで動くかどうかは不明だけどとりあえず動けばいいだろう的に実行にかけてしまいます。
これは要するにソース上で自分のプログラムの動作を正しく理解できないことにつながりとどのつまりバグの発生原因になってしまうだけでなく、上記のような特殊な環境では開発に余計な時間を取らせてしまうことになります。
そういうことを気にせずに気軽にプログラムを書いて手軽にテストできるのがスクリプト言語の良い点なのですが、もちっと自分のソースを眺めてこれなら動くと確信が持ててから動かすようにしたいものです。
というかC++のコードを書く機会を増やさないと?・・・ツライなぁ。