• 作成:

他の方のRustのFizzBuzzを多少最適化しました, 計算理論

他の方のRustのFizzBuzzを多少最適化しましたが素直な解決策がありました

昨日FizzBuzz を無駄にベンチマークしてみた By Nim、golang、Rust、Crystal、その他 - 強まっていこうを読みました.

私はアセンブリ言語を除けばRustが最速の言語であると思っていたので, この結果は衝撃的でした.

しかし, ベンチマークコードを見てみると, どうもこのベンチマークは\nを手動挿入している言語が速いような気がしました. C++のstd::endlがバッファをフラッシュするので遅いことは有名です. CrystalやGo言語なども同じ理由で遅い気がします. そこで, とりあえず文字列を全結合してprint!による標準出力を一回にしてみました.

こちらの環境では2倍ほどの速度になったので, ブログの著者に試してみてもらったところ, C言語の結果を超えるトップの速度になったようです. 私の思考が間違いではないことがわかり, 安心しました. ブログにもちゃんと追記してもらいました.

自然言語で書かれた評論に反論したりしても水掛け論になりがちですが, プログラマはコードで公平に語れるのが良いところですね.

Rustの師範であるκeenさんより先にコードを提出出来て少しうれしい.

しかし, 私のコードは文字列を愚直に末尾に足していっているので, 多分遅いと思います. ですが, 私にはこれ以上の速度のものを思いつきませんでした. RustにはJavaで言うStringBuilderなどは無いのかな? それともStringで十分に速いから必要としないのでしょうか?

その後新しいベンチマークコードが書かれたようですね. FizzBuzz Benchmark

なるほど, RustにもバッファリングするAPIのBufWriterがあるのですね… Javaのことを考えていたのにこれを探すのは思いつきませんでした.

計算理論

前の時限をやっている先生に「次の講義の人スライド使うの?」と聞かれて使わなかった気がしたので「使わない気がします」という返事をしましたが講義始まってスライドが降りてきて「あっ」ってなりました.

数学的帰納法の説明.

Coqでやるとよく証明がループになって泥沼になるやつですね. いや私の証明能力が低いだけではあるんですが.

野球の状態(ボール数, ストライク数)を状態, ストライク | ボール | ファウルを入力と例えて状態遷移図の説明.

決定性有限オートマトンの話.

「入力が有限ということは有限オートマトンは必ず停止しますか?」 「必ず停止します」

どうも先生がスライドに出力が出来ていないようだったので見てみたけど解決方法がわからなかった… 旧世代のプレゼン用機械はわからない… HDMIならまだわかるんですけど, VGA端子は全くの謎.

  • PC
  • USB-Type-C to VGAアダプタ
  • プロジェクタ

の3種類に故障が疑われますが, プロジェクタは前の先生が使ってたので故障していたとはあまり思えないんですよね. そこでPCの故障かと思って私のPCにUSB-Type-Cを差し込んでxranderで見てみたところ認識しなかったのでアダプタが壊れている気がします. 問題解決が出来なかったのが悔やまれます.