「not」関数での永続的なオーバーフロー

Arnaud は別のパッチをさまざまなものに送りました。Katherine はそれを適用すると言い、module.c にパーツを残して私が面倒を見るようにしました。

キャサリンと私は 2 の補数を発見しました。最初のうなり声は、「not」関数での永続的なオーバーフローでした。機械語以外のあらゆる種類の数字を保持しているため、先頭のゼロがすべて 1 に変わり、オーバーフローが発生します。gmp_com() 関数はありますが、これが整数に対して正しいことをするかどうかは明らかではありません。

たとえば、整数 -1 があり、ビット 0 をリセットするとします。符号付きマグニチュード モデルでは、0 が得られます。2 の補数モデルでは、-2 が得られます。標準では、2 つの整数モデル (1 つは算術用、もう 1 つはビット操作用) を定義することで、この問題を解決しています。ビット操作を行うには、GMP 符号付きマグニチュード数を 2 の補数に変換する必要があるようです。

モジュールの読み取りと書き込みのデバッグにもう少し取り組む機会がありました。globsol スイートの約 500 個のファイルのうち、最後の 100 個ほどのファイルのコンパイルを妨げているバグがどこかに 1 つあります。

8月12日
今日と昨日は g95 に取り組み、トップレベルのロード アルゴリズムをやり直しました。基本的なスキームは同じですが、ロードは、ユーザーが要求したシンボルをロードし、依存シンボルがなくなるまで依存シンボルを繰り返しロードすることに基づいています。これが少し明白に聞こえるかもしれませんが、古いコードはモジュール内を 1 回通過しようとしましたが、新しいコードはシンボル情報をスキャンして、モジュール内のどこに何があるかを見つけ出します。

新しいコードは古いスキームよりも理解しやすいですが、書くのは難しかったです。ある時点で、symtree を簡略化しました。つまり、2 つの名前が同じものを指すことはできませんでした。これは問題でした。

現在はほとんど動作していますが、globsol スイートの途中でいくつかの問題が発生しているため、チェックインの準備が整っていません。

8月9日
ページの更新を怠っていました。モジュールのロード方法の変更に取り組んできましたが、最近は大きな時間ブロックを取得するのが難しく、これはおそらく悪化するでしょう。

8月8日
数日前に Arnaud から送信されたパッチを適用しました。

Katerhine は、組み込みの初期化式がほぼ完成したと発表しました。組み込みが型または種類の理由で拒否された場合に、正しいエラー メッセージを生成するように取り組んでいます。

ONLY 句をより適切にサポートするために、モジュールの改訂作業を開始しました。また、Web ページのリンクの形式を少し変更し、sourceforge のバグ追跡システムへのリンクを追加しました。

タイトルとURLをコピーしました