K.Maebashi's BBS

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

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


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


[2128] いろいろ愚痴りたい((プログラミング言語を作る3章〜5章 )
返信


投稿者:mano
2018/04/30 19:02:25

Link:
ゴールデンウィークで読み終えられるかなと思っていたけど全然そうじゃなかった。
やっと、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とか作れそうで、セキュリティホールになりやすい感じがするので、なぜ問題にならないかを聞きたかったかも。

[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]