K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[2128] いろいろ愚痴りたい((プログラミング言語を作る3章~5章 )
投稿者:mano
2018/04/30 19:02:25

ゴールデンウィークで読み終えられるかなと思っていたけど全然そうじゃなかった。 やっと、5章まで読み終わった。で、いろいろ愚痴りたい。(今回は投稿にパスワードをつけたので消す準備はバッチリです。) まずは、環境依存の問題 今週末は一人で0x0d問題にぶち当たり全然読み進められなかった。 test.crbを食わせても以下のメッセージしか出ない。 5:(0x0d)@ win_sjisのtest.crbだと、改行にCR(0x0d),LF(0x0a)が入れられていて、 今使っている処理系(Microsoft Windows Subsystem for Linux上のubuntu) では、0x0dを無視してくれず、改行コード\n(=0x0a)に到達する前に不正な文字で引っかかっている、がubuntuのターミナルは、SJISを解釈してくれず文字化けを起こす。結局が悪いのかがわからない。 今の時代趣味でやる分にはsjisもeucも地雷じゃないかなあ? で、読む気力がそがれたので、重箱の隅を突っ込みながら(またしても)表面をなぞる程度の読み込みになっちゃった。ちゃんと読めるのはいつのことになるんだか。。。 で、突っ込みはこんな感じ。 電卓の場合yyparse()で無限ループしているのに、crowbarではyyparse()以降の処理に進んでいることは誰も疑問に思わないのかな、 とか p.121 2個目のelse if文の中の処理、  left_val.u.double_value=left_val.u.int_value; eval_binary_double(...) の部分で、left_val.typeは変えずに(INTのまま)格納する共用体にはdouble値を入れている。 その後left_valはそのまま使わず、left_val.u.double_valueのみ使っているので問題にはならいけど、読んでて不安になる。なぜdouble(専用のというか普通)の型のローカル変数を使わないのかな? とか、 p.141の網掛けの以下の記述  a={1,2,3}; a={2,3,4}; のあとの図で、aから出ている矢印が{4,5,6}を指している。 {4,5,6}というのはどこから出てて来た?というか{2,3,4}はどこいった? とか、 p.145のビットフィールド。別にCのプロフェッショナルを目指す本ではないので、ビットフィールドなんて説明が必要な機能なんて使わずにしれっとCRB_Boolean使ったり、そのままズバリintを使えばいいじゃない。 とか、 p.153のダイナミックスコープの説明でnextから辿る場合、 仮に自身と呼び出し元に同じ変数名を定義し、自身内で変数を参照する場合、先に呼び出し元の変数が検知されてしまうので、ダイナミックスコープの動きと違うのでは? とか、 p.178 mbstate_をmemset()等でゼロクリアというmbstate_ってどこから出てきた? って感じです。あと、5章UNICODEについては、組み文字以外にデータ内に入っている(文字送り方向や字形の変更など) 制御コードをどう扱っているのかも書いてあればななあとも思いました。この辺って、例えば1文字のはずなのにデータは100byteとか作れそうで、セキュリティホールになりやすい感じがするので、なぜ問題にならないかを聞きたかったかも。
[この投稿を含むスレッドを表示] [この投稿を削除]