わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

nlmate 0.0.2c

nlmateのバージョン0.0.2cをリリースしました.
問題や入出力の変更はなく,コードの見直しが主です.
変更点は以下のとおりです.

  • クラスを分けました.0.0.2までは,Nlmateクラス1個に全部の処理を詰め込んでいました.これを,ゲームを取り仕切るNlmate::GameMasterクラス,全質問を持つNlmate::QuestionManagerクラス,解答してもらう1個の質問に関する情報を持つNlmate::Questionクラス,コンパイル・実行し正誤判定をするNlmate::Inspectorクラス,時間を管理するNlmate::TimeManagerクラスに分割しました.
  • require "readline"を,トップレベルで実行するよう修正しました.
  • quit入力時にも,ログに情報を書き出すようにしました.
  • Tutorialで間違ったとき,Tutorialメッセージを再度出さないようにしました.
  • コマンド実行時に5秒経過したとき,出力を取得することなく,"(time out)"としました.
  • コンパイルgccに-Wallオプションをつけて行い,警告が出て実行ファイルができた場合にも,警告メッセージを出力するようにしました.
  • 「Invalid statement」の理由の英文を変更しました.
  • Tutorialのメッセージを少し修正しました.「you may "quit"」は「you may type "quit"」としました.

moduleの中でclassを定義したり,TOPLEVEL_BINDINGを使ったりするのは,初めてです.
さて,Tutorialの問いで,5秒経っても終わらないコードを,ようやく見つけました.「(i = 0; i <= 2; i++) for (j = 0; j <= 2; sleep(1), j++)」です.
CygwinでもLinuxでも,gcc -Wallで警告が出ますが,実行ファイルが作られます.
Linuxではちゃんと5秒でタイムアウトしますが,Cygwinではプログラム実行終了まで待ちます.Cygwinの事情と思われるので,今回はあきらめました.