2002年のアーカイブ

12月20日
Arnaud さんは、長さゼロの配列を扱うための昨夜のコードのいくつかの欠陥を指摘しました。彼はまた、デフォルトの実際の種類をデフォルトの論理的な種類に置き換えたいくつかのタイプミスを削除するためのパッチを送信しました。12月19日

Arnaud は長さゼロの配列を処理するためのパッチを送ってくれました。これを書き直すことになりました。また、インテントとダミー プロシージャ間の競合を通知するためのパッチもありました。

Huang は、不足しているエラー コードを追加するパッチを、I/O リスト マッチャのほとんど使用されていない部分に送信しました。

Paul は、組み込みサブルーチンの一部を組み込みのリストから削除するためのパッチを送信し、reshape 組み込みを変更しました。

12月18日

Arnaud からの小規模な修正により、ヘルプ画面の言葉遣いが改善され、モジュール プロシージャに関する問題が修正されました。12月16日

Paul は組み込みサブルーチンの解決を行うコードを送ってくれました。私はそれを少し変更しました。

Arnaud は、要素処理を関数比較に追加し、いくつかの制約を追加した修正を送信しました。彼はまた、g95 が適切に解析し、スイートに追加された有限要素の教科書からいくつかの f90 コードへのリンクを送信しました。2 番目の例には、準拠していないコードが含まれているか、標準のバージョンが完全に正しくありません。

12月14日

Arnaud によるその他の修正。10月15日

シーケンシャル、ダイレクト、フォーマット済み、フォーマットなしの複雑さを読み上げます。

10月14日

INQUIRE ステートメントの非 IOLENGTH バージョンを実装しました。

10月12日

より多くの OPEN と CLOSE のもの。これらは暫定的に完成しており、機能しているように見えます。

10月11日

ライブラリ、特に OPEN ステートメントと CLOSE ステートメントに取り組みました。ほとんどのコードでは、ステートメントで渡されたオプションを理解し、競合しないようにします。

10月8日

多くのバックエンドの変更。

私は、昨日 Arnaud によって報告された配列演算に関連する問題を調査してきました。修正により、新しい問題が明らかになりました。

10月7日

Paul は、派生型を扱うバックエンドにいくつかの大きな変更を加えました。

Arnaud は、私が今日見る機会がなかった 2 つのバグを見つけました。

ランタイム ライブラリ、特にエラー処理/回復サブルーチンで数時間作業しました。OPEN ステートメントで、C stdio サブルーチンをストリーム I/O に置き換え始めました。

10月6日

今日も図書館で大活躍。赤黒のツリーを Treap に置き換えました (バランスは悪くなりますが、コードのフットプリントが小さくなり、すっきりします)。OPEN ステートメントに必要な制約をいくつか追加し始めました。

10月3日

今日のその他のパッチ、Arnaud からのリーク プラグ、およびコピー コンストラクター パッチを完成させる Paul からのパッチ。

大きなことは、初期化式のマッチング中に型解決への呼び出しを追加したことです。これにより、中間のもののタイプとランクが設定されます。数日前に Arnaud によって報告され、今日 Paul によって報告された問題を修正します。

10月1日

ランタイム ライブラリに取り組みました。STOP ステートメントの 3 つのバリアントのサポートが追加されました。

9月30日

週末はメールをチェックしていなかったので、いろいろありました…

Paul は、形状が配列演算内でコピーされたときのメモリ リークを報告しました。私はいくつかのコーナーを切り取り、そこでいくつかの構造を再利用していましたが、構造の一貫性を保ち、コピーを行い、コピーを変更し、オリジナルを解放できるようにする方がはるかに良い考えであると判断しました.

次の問題は、先週 Arnaud によって報告された配列コンストラクターの展開に関する問題の修正でした。Paul がパッチを送ってくれました。元の関数が大きくなりすぎたので、新しい関数に変更しました。これにより、初期化式のチェック方法に関するいくつかの問題が明らかになりました。反復変数は、整数として扱われる必要があります (たとえ他の変数であっても)。これらの型を正しく報告するために、expr.c にいくつかのコードを追加しました。

Paul は、SIGN 組み込み関数の評価を修正するパッチを送信しました。機能を大幅に簡素化するためにパッチを変更しました。

Arnaud は、組み込みの SIZE を簡素化する際のメモリ リークを修正するためのパッチと、組み込みのバイナリ操作と割り当ての間のより広範な適合性チェックのための別のパッチを送信しました。これにより、配列照会関数で SIZE (およびその他の配列照会関数) が許可されていないバグも明らかになりました。

9月29日

IO ライブラリに取り組み、fortran 文字列を数値オプションとフラグに解析する関数を追加しました。9月25日

Arnaud は、配列の処理、特にいくつかの適合性テストのためのいくつかのパッチを送信しました。彼が送信したバグがあり、現時点では未解決です。

ライブラリをもう少しいじって、主にパブリック インターフェイスの名前をプレフィックスで変更しました。

9月24日

家に帰る。環境スキャナのさらなる作業。どうやら最終形態のようです。ライブラリで必須の醜い接頭辞を取り除くためにマクロに取り組みました。これで、ライブラリは醜い名前のない実際のプログラムのように見えます。9月18日

最後に、環境スキャナーをデバッグする機会を得ました。現在の設定がきれいに表示されるようになりました。

9月17日

Paul は、配列演算に関連する操作順序の問題を修正するパッチを送信しました。

最後に、複数の属性に対する制限を追加しました。最大の驚きは、シンボルが ENTRY ステートメントを介して 2 回ダミー変数になる可能性があることです。

9月16日

環境スキャナーのオプションが増えました。

9月13日

フロントエンドにいくつかの制限を追加しました。初期化された変数はデータステートメントに表示できなくなり、データステートメントに表示される変数はマークされ、基本型を追加すると、プログラムユニット、モジュール、ラベルなどの特定のフレーバーと競合するようになりました。

私は明日休暇で出発しますが、私のネット アクセスは来週にかけて散発的になるでしょう。

9月12日

環境スキャナーにオプションを追加しました。主に浮動小数点制御ワードに影響します。

9月11日

Richard Maine は、FORALL ステートメント内のプロシージャが PURE であることを要求しない g95 の問題を発見しました。これは修正されました。9月10日

計画はコードとの接触に耐えられませんでした。私は物事を構築することに取り組みました。明日は環境スキャナーのデバッグです。コードを書くには面白い環境でした。私はラップトップをプールのそばに置いて、今日の午後、モンスーンが迷信を吹き飛ばしたのを聞きました。雨は降っていませんが(とにかく、私には)、たくさんの稲妻があります。

9月9日
ランタイム ライブラリに取り組んでいます。ストリーム I/O モジュールはほとんど完成しており、環境変数を読み取り、プログラムの実行のさまざまな側面を制御する内部フラグを設定するモジュールがあります。次のタスクは、CI/O ライブラリから gforio を切り離すことです。

9月?
Sander Belien は、テスト スイート用に 20,000 行の有限要素コードを寄贈してくれました。の最初のテストでは、他のすべてが含まれる最初のファイルで (g95 の) エラーが発生します。

Paul Book は、配列式の依存関係の分析について助けを求めています。彼の要求は次のとおりです。

g95 への貢献を望んでいるが、どこから始めればよいかわからない人がこのリストに載っている場合に備えて:

配列代入については、fortran 仕様。実際の割り当てが行われる前に、割り当てステートメント内のすべての式が評価される必要があります。多くの式 (例: a(:) = a(:) + 1、a(:) = b(:)) では、これは問題ではなく、プロセッサは任意の順序で代入を実行できます。他の式 (例: a(2:n) = a(1:n-1)) の場合、コンパイラはこの制約に違反しないように特別な予防措置を講じる必要があります。多くの場合、一時的な割り当てが含まれます。

最初の段階は、これが式で依存関係分析を実行することです。

2 つの式 (g95_expr ノード) が与えられた場合、データの依存関係があるかどうかを判断する必要があります。最初の式に値を割り当てると、2 番目の式の値が変更される場合。

これは、依存関係分析がインデックス変数に対処しなければならない forall ステートメントによってさらに複雑になります。

ボランティアはいますか?

8月8日
Paul は、願わくは最後に残ったホールドアウトに固有の解像度を追加するパッチを送信しました。

Toon Moene は、来週ラスベガスで開催される J3 でのデモに向けて、動作する g95 の準備を進めています。それは見てクールだろう。

NOAA からの WETA 天気コードである、さらにいくつかのテスト コードを取得しました。まだ開梱中です。最近の私の好みは f90 コードです。なぜなら、f77 コードよりも g95 のダスティ コーナーを多く使用するからです。

8月5日
よく考えた結果、Fortran I/O ライブラリで標準の CI/O ライブラリを使用することを断念し、別のものを使用することにしました。主な違いは、このアプローチは可能であれば mmap()ed ファイルを使用し、内部ファイルに非常にうまく適合することです。ASI を完全な汎用性で実装するつもりはありませんが、Fortran が必要とするものだけを実装します。

7月31日
昨夜、いくつかのマイナーなバグを発見し、今夜は新しいテスト コードを取得するのに時間を費やしました。最大のものは、Fortran コードの膨大なコレクションを集めた John Burkardt の Web ページからのものです。また、Udo Grabowski の DarkStar コードに時間をかけ、物事を適切な場所に配置しようとしました。実際、私は g95 よりも多くの時間をテスト プログラムの修正に費やしてきました。どうやら他のほとんどのコンパイラは、コードがかなり緩いです。新しいコードを Web サイトのメイン テスト スイートにアップロードする機会はありませんでしたが、すぐにアップロードできるようにします。

ポールはバックエンドで躍進を続けています。

7月25日
さらにいくつかのメモリ リークを発見し、テスト ツールに取り組みました。私は断続的に glibc の malloc トレース機能を使用してきましたが、現在はプロセスをより自動化しています。

これが機能する方法は、MALLOC_TRACE という名前の環境変数を定義すると、割り当てが書き込まれ、このファイルに解放されます。’mtrace’ (perl スクリプト) と呼ばれるプログラムがあり、このファイルを読み取り、どの割り当てに空きがないかを判断します。私はこのファイルを名前付きパイプとして実行してきました。これは、700 メガバイトのトレース ファイルが生成された 1 つのケースでは必須でした。

mkf90.py スクリプトは環境変数をチェックし、存在する場合は mtrace のコピーをフォークし、その出力を画面に出力します (問題が発生した場合)。常に同じことを 2 回行うとは限りません。

明日確認する保留中のパッチはほとんどありません。

7月18日
Paul は引き続きバックエンドの作業を行っており、’hello world’ プログラムが動作するようになるまであと少しです。

今日はモジュールにもっと取り組みました。現在の問題は、式の前にベース シンボルがロードされていない式 (配列仕様) 内のコンポーネント参照に関係しています。これについては解決策が見つかったと思いますが、明日まで待つ必要があります。

7月16日
私はその夜、CVS の問題に取り組みました。最近、断続的に何かをしようとすると、CVS がハングアップします。苦労の末、問題は私の ssh と SF の sshd の間の相互作用を行う必要があるようです。SF は opensshd 3.1 を実行していますが、これは最近発見されたリモート ルート エクスプロイトに対して脆弱です。特定の状況下で SF に接続すると ssh がクラッシュする可能性があるため、エクスプロイトが発見されたときに SF が sshd にパッチを適用したと思われます。

古い ssh をアップグレードすることを考えましたが、自宅で実行している (古い) バージョンの sshd でリモート ルート エクスプロイトを誰も発見しておらず、ログに多くのプローブが記録されているため、アップグレードを選択しませんでした。SF のテクニカル サポートからは何の回答も得られませんでしたが (1 週間経ちました)、問題を回避することができました。

少し前に言及されたホスト アソシエーション処理の大幅な改訂版をチェックインしました。その間に、バイナリ ツリーを処理するための一般的なモジュールを追加しました。これは、モジュールの読み書きのアップグレードを処理するために必要でした。特に、インターフェイスに関連付けられた名前空間が正確に再作成されるようになりました。新しい実装では、循環参照を処理するための柔軟性も残されています。

7月4日
今日はたくさん。ホストの関連付けが正しく機能するように取り組んできましたが、モジュールのロード方法に問題が発生しました。現状では、モジュールはインターフェイスである名前空間を保存していません。これは変更する必要があります。非シンボル ポインターを正しく保存および復元する必要があるモジュールには、関連する既知の問題がもう 1 つあります。多数の名前については、バイナリ ツリーが示されます。二分木が必要になるもう 1 つの場所は、文字 SELECT ステートメントです。そのため、時間をかけて二分木コードを一般化しました。

symtrees には特定のツリー コードはありませんが、一般的なバージョンを使用します。赤黒の木をトレプに置き換えましたが、これは間違いです。それらは均等にバランスが取れていないためです。これは、SELECT ケース コードにとっては良いアイデアです。コードは、実際にツリーを使用するセグメントを気にすることなく、実際のツリー実装を変更できるところまで来ています。

 

7月1日
Paul と Steven は、g95 が実際の実行可能コードを出力するところまでほぼ到達しました。

私は、最近のシンボルの再編成で破ったという前提を修正するのに苦労しています。

6月30日
ホストの関連付けがどのように行われるかのやり直しに関する多くの作業。書き直しは完了しましたが、水面下に潜んでいた多くのバグが明らかになりました。修正に時間がかからないことを願っています。

6月16日
最近ホームページの更新がかなり滞っています。最新の変更には、Arnaud のおかげで多くのメモリ リークが含まれています。

今夜、ホストの関連付けが正しく行われていないという問題に取り組み始めました。一般に解決時に実行する必要があり、特定のケースでは解析時にのみ実行できることがわかりました。ホスト協会の現在のシステムは悪臭を放っており、見逃すことはできません。

6月9日
今日は変更点が多い。Arnaud には、主に GMP 構造を扱ういくつかのリークを塞ぐいくつかのパッチがありました。

Paul Brook は、バックエンドの作業を開始することを申し出ました。これがしばらく前に開始できなかった理由はありません。

コンストラクターの展開方法を作り直しました。250,000 要素の配列コンストラクターを持つテスト コードの 1 つに問題がありました。G95 は、この獣を拡張するためにかなりのメモリと時間を使用していました。また、モジュール内にあったため、モジュールがかなり巨大になりました。したがって、ルールは、コンストラクターが十分に小さい場合にのみ展開することです。

配列コンストラクターのサイズをカウントし、任意の要素を抽出するサブルーチンも新しい拡張メカニズムを使用し、これにより反復子の一部である要素を正しく展開できます。

テスト スクリプトにサウンドを追加しました。スイートが完成すると、心地よいコードが演奏されます。エラーメッセージが表示されると、爆発が再生されます。これは、変更のテスト中にソリティアをプレイするのに非常に便利です。

Édouard Canot は先日 3 つの問題を送信しましたが、そのうち 2 つが修正されました。最後の問題は、g95 がホストの関連付けを行う方法に関する非常に悪い問題を示していました。ホストの関連付けは解決時に行う必要があることがわかりましたが、解析時に実行しようとしました…

6月6日
Arnaud は、メモリ リークを解消するためのいくつかのパッチと、g77 の -Wimplicit オプションのように、すべてのプログラム ユニットに IMPLICIT NONE を設定するパッチを送信しました。

制限された表現のチェックについて、いくつかの進歩を続けてきました。関数のチェックを除いて、ほとんど完了しています。

6月4日
Arnaud はさらにいくつかのメモリ エラーを報告しました。仕様の式をチェックするためのサポートを追加しました。ほとんどの場合、既に存在するコードをフックします。まだいくつかの問題があるため、まだチェックインされていません。

6月3日
Arnaud からのマイナーなメモリ リーク。Craig Burley は、数日前の ‘5 月 39 日’ というタイプミスを少し面白がってメールを送りました。

6月2日
Arnaud が valgrind で見つけた多くのメモリ リークを塞ぎました。

6月1日
Steven と Arnaud は、割り当てられた GOTO からさまざまな条件下でのメモリ リークまで、さまざまな問題に取り組んできました。また腕を痛めたので、強制的でないタイピングは避ける必要があります。

5月26日
Steven は、メーリング リストで話題になっているいくつかのことを実装しました。まず、いくつかの alloca() がより適切な自動変数に置き換えられました。エラー メッセージ内のスワップされたパラメーターが意味をなすように反転されました。エラーは不正な IO イテレーターで返されるようになりました。暗黙的に宣言された関数は純粋でないと見なされるようになり、ポインターの割り当てに対していくつかの機能強化が行われました。

5月23日
スティーブンはさらに変更を加えています。1 つ目は arith.c に対するもので、算術処理に関するいくつかのエラー レポートを修正します。彼と Arnaud は、オーバーフローではなくアンダーフローのケースをいくつか発見しました。このパッチは、この状況をより適切に処理します。彼はまた、メーリング リストで話題になっている -r8 と -i8 の両方を意味する -d8 オプションを追加しました。しばらく前に Arnaud によって報告された問題を修正する PURE 関数とポインタに関する修正もいくつかありました。

Arnaud は、g95_is_whitespace() マクロの動作が原因で g95_next_char() が 2 回呼び出される g95_match_whitespace() のバグを報告しました。これは修正されました。

彼はまた、g95_intrinsic_sub_interface() で別の未解決の問題を抱えていました。これは、’try’ を返しますが、’match’ のように処理されていました。対応する関数は 3 つの戻り値があるため一致を返しますが、sub() は成功または失敗しかありません。

今日、私は 45 通のメールを処理しました。その多くは、私とリストに送信された重複したもので、まだ約 2 日遅れています…

5月20日
Steven は、実数と整数の範囲チェック関数を 1 つの範囲チェッカーに統合しました。

Arnaud によって報告されたメモリ破損の問題を修正しました。COMMON ステートメントの解析中にエラーが発生したときに、空白のコモンが正しく復元されませんでした。

次の問題は、コンマが P 記述子と繰り返し回数の間にない場合、エラーが報告されないことでした。私が持っているテスト コードには、このエラーの例が約 12 あります。エラーが -pedantic の実行中にのみ表示されるようにしました。

また、Arnaud は、-i8 オプションに関するいくつかの問題について、メーリング リストでやり取りを始めました。ある時点で -r8 と混同されていましたが、現在はラップ解除されています。修正された ABS() 関数に関していくつかの特定の問題がありました。

5月17日
少し前に Arnaud Desitter から寄せられたさまざまなバグを修正しました。これらは、宣言と DATA ステートメントのステートメント ラベルに関する問題を除いて修正されています。DATA ステートメントは合法ですが、違法ではなく役に立ちません。(それらに分岐することは違法です)。

Steven Bosscher は、適切に処理されていないアンダーフローの問題として私が見なかった問題の 1 つを特定しました。

5月15日
かなりのバックログが蓄積されていたメールボックスの整理に取り組みました。

Arnaud からさらにいくつかのパッチを適用して、多くの小さな醜さを解消しました。

5月11日
パーティーとビールはもうすぐ終わります。よかった。楽しいことしかできません。

ISO 変数文字列モジュールが正しくコンパイルされるようになりました。小さなバグがたくさん修正されました。ジェネリックとしてマークされるべき組み込み関数がたくさんありましたが、そうではありませんでした。

Arjen Markus は、少し前に -pedantic の下での偽の警告について書きました。これらは修正されました。

Edouard Canot さんは、MERGE() 組み込み関数で失敗した別のプログラムを送信しました。実際の問題は、IOR() が渡されたのと同じ種類の整数を返さないことでした。IEOR()、IAND()、IBITS()、IBCLR()、および IBSET() の類似の問題を修正しました。

Arnaud Desitter は別のパッチを送ってくれました。これは、私の綴りの間違いから、設定されて使用されなかった変数まで、あらゆる種類の小さな問題を修正するものでした。

5月8日
バックログの一部を処理し始めました。

Arnaud は、g95_intrinsic_sub_interface() の戻り型の矛盾を指摘するメールを受け取りました。

Steven は、J. L. &;Schonfelder によって書かれた可変長文字列ライブラリを指すメールを受け取りましたが、これは多くのエラーを引き起こします。Steven さんは、エラー メッセージの英語の悪さを指摘しました。最初の技術的問題は、組み込みシンボルに「純粋な」フラグを追加する必要がありました。要素性を見ることで解決できると思っていましたが、すべての組み込み関数は純粋であり、すべての組み込みサブルーチンは、それらが要素的である場合に純粋であることがわかりました。

5月7日
Arnaud からの大きなパッチのほとんどを適用しました。メール キューから順番を外しましたが、他の問題はバグ レポートに関係しており、介在する問題を修正するとパッチが難しくなる傾向があります。

5月6日
私の家族のほとんどは今週末に卒業式に出席していますが、物事は通常に戻り始めています.

Arnaud Desitter が著作権の割り当てを送信し、私はそれを FSF に転送しました。彼は私のメールボックスにいくつかの変更をキューに入れています。私はすぐに取得しようとします。

mkf90.py のオーバーホールを行いました。これは、読みやすさを向上させることを目的としています。私は、このスクリプトを、Van Snyder によって以前に提案された Fortran 95 データ分析ツールの基礎にすることを計画しています。計画では、いくつかの理由から、コード ジェネレーターを優先して作業する予定です。まず、コード ジェネレーターがなくても、g95 はすぐに使えるようになります。これは便利なので、より多くの人が解析フェーズと解決フェーズをテストするようになり、g95 がどのようにこれらのことを行うかを忘れ始める前に、これらをより詳細にデバッグできます。

5月1日
私は防御を通過しました。

4月21日
分岐解決コードの作業が完了しました。新しいコードを複製したいくつかの関数を削除しました。今後数日間で、蓄積された未処理のメールの一部を取り除こうとします。

4月18日
Steven の分岐解決コードの作業を開始し、算術 IF とデータ転送ラベルを処理するために一般化しました。

4月16日
少なくとも g95 については、今日はあまりありません。最近、やることが多すぎて忙しいです。良いニュースは、私の弁護期日は 5 月 1 日であり、私の現在の関心事のほとんどは私の論文とは何の関係もありませんが、すぐにそのサルを背負わせるということです.

4月13日
Steven は、プログラムが制御をブロックに移していないことを確認して、分岐を正しく解決するパッチを追加しました。

散発的に数日間作業した後、インターフェイスが実際にどこから来ているかを追跡し、インターフェイスがない場合とは対照的にインターフェイスに引数がない場合を正しく処理するパッチを追加しました。

4月5日
Édouard Canot は、数日前に 2 つのバグを送信しました。これらのバグはしばらくの間機能していませんでしたが、現在は修正されています。1 つは要素関数参照のランクを正しく計算することであり、もう 1 つは配列の境界の 1 つが実際には関数参照であった場合のコア ダンプを修正することでした。

Steven は、スペースを含む自由形式モードでのいくつかの問題を修正するパッチを送信しました。問題は、g95 が無効なコードについて文句を言わず、スペースが意味を持たない固定形式のように解析することです。g95 には、このような類似の問題がたくさん残っています。

4月4日
私はちょっと忙しく、いくつかのバグレポートが待ち行列に入っているので、それらが今のところどうしようもない状態になっているのではないかと心配しています。簡単なことをしたくて、Udo Grabowski の DarkStar 恒星モデリング コードを解凍しました。ここには、約 300 のソース ファイルにまたがる約 15 万行があります。予備的な実行では、いくつかの明確な問題が示されています (万歳!)。

リクエストが多かったので、匿名 CVS から現在の g95 を入手する方法についての sourceforge の説明に g95 のページをリンクしました。

4月2日
Steven Bosscher は修正された C の順序付けの問題について書き込んでいます。彼の新しいコンパイラは、私がそうしなかったところで不平を言いました。

ELEMENTAL サブルーチンに関連する制限が追加されました。

4月1日
Erik Schnetter さんが 2 つの問題を報告しました。1 つ目は、g95 (実際には stdio) が特殊ファイルを正しく処理していないことです。g95 が通常のファイルのみを開くようにチェックを追加しました。2 つ目の問題は、-O2 が指定された場合にのみ表示される初期化されていないメモリに関する警告を黙らせることでした。

PURE プロシージャーへの制約の追加が完了しました。現在のスイートは正常にコンパイルされますが、Purity を使用するコードは多くないと思います。行ったときに確認しましたが、おそらくすべてを取得していません。これを行うと、引数リストの処理に関するいくつかの重大な問題が明らかになりました。特に、特定のインターフェイスに一致した後にソートされていないように見えます。

現在の計画は、ELEMENTAL プロシージャーに追加の制約を追加することです (それほど多くはありません)。その後、戻って、引数リストの何が問題なのかを突き止めます。

3月31日
PURE 関数の問題検出のサポートを追加し始めました。変更はほぼ完了しましたが、実際の引数の意図が形式的な引数の意図に一致するという制約に行き詰まりました。これは、プロシージャの INTENT(OUT) 引数に、純粋なプロシージャに対してローカルである必要がある変数を渡すことができないようにするためです。これは、INTENT(IN) を INTENT(OUT) に渡すことに関連しています。コードは配置されていますが、現時点では呼び出されていません。

これが行われた後、ELEMENTAL属性についても同じです。主な制約は要素関数も純粋であるため、これははるかに簡単になります。

3月30日
他にも多くのことが起こっており、時間を見つけるのは困難でした。さらに2つの問題が修正されました。

まず、Steven Bosscher は、定数でない配列仕様を持つモジュールを記述したコードに問題がありました。配列仕様へのポインターは、各配列参照とともに格納されますが、主にスペース上の理由からモジュールには格納されません。配列仕様は、多くの配列参照によってポイントされる可能性があります。いくつかの誤った解決策の後、ロードされた配列仕様は型解決の一部として再計算されます。

Édouard Canot は、SHAPE= キーワードで SHAPE() を呼び出す RESHAPE 呼び出しに関する問題も報告しました。この引数は、一定サイズの配列を必要とするという点で特別です。SHAPE() の結果のサイズは、ランクによって異なります。以前は、サブルーチンを呼び出すと想定していました。結局のところ、これは不要です。SHAPE embedded() への呼び出しは、何らかの配列コンストラクターとして常に単純化できます。これが今起こっていることです。

3月25日
左と右の要素の数を比較し、RHS の要素の数が LHS の要素の数よりも多い場合に不平を言う、Arnaud によって提案されたテストを追加しました。また、範囲外の配列参照をエラーからの警告に切り替えました。

それ以外にも、他のテスト コードを探すのに時間を費やしました。g95 に問題を起こすものをいくつか見つけたので、それはおそらく明日にします。

3月24日
しばらく検討されていたいくつかのバグを解決しました。最後に、DATA ステートメントの解決に関する Arnaud の最後のバグを修正しました。Édouard はまた、可能であれば SHAPE() 組み込み関数が定数配列コンストラクターを返さないというバグを報告しました。配列サイズを計算するほとんどの関数が既に存在するため、SIZE() 関数も実装しました。

また、ネットで見つけたいくつかのテスト スイートを追加しました。その結果、複雑な定数と、配列コンストラクターまたは I/O データ転送リストのリストの開始との違いについて混乱するパーサーのバグが見つかりました。これらを修正しました。

3月20日
Michael Richmond は、すべてが正常な範囲外の文字列を報告する、簡単に修正できるバグを送信しました。

DATA ステートメントを解決するコードを追加しました。ほとんどの場合、変数と同じ数のデータ値があることを確認します。まだテストする機会がありません。

3月19日
Arnaud Desitter さんは数日前に範囲外の文字部分文字列に関する問題を報告しました。いくつかの変更を加えましたが、g95 は現在、文字配列について少し混乱しています。もう 1 つの重大な欠陥は、コードが範囲外の警告を出すことを拒否したときに気づいたものです。DATA ステートメントはまったく型チェックされていません。

DATA ステートメントの型チェックは、変数リストと値リストをトラバースすることになり、すべてが代入互換性があり、2 つのリストが同じ長さであることを確認します。ああ、イテレータも展開する必要があるため、これは配列コンストラクタを展開するよりも少し不快です。これを行う最善の方法についていくつか考えています。

3月17日
サブルーチンの解決に関連するバグの発見が完了し、チェックインしました。現在のテスト スイートの実行には約 20 分かかります。最初の重大な違反者は、David Bailey のプログラムの 1 つで、解析と解決に約 3 分かかりました。調査の結果、非表示のシンボルがモジュールに保存され、時間とメモリを消費するだけであることが判明しました。隠しシンボルが書き込まれないようにすると、同じプログラムのコンパイルに 10 秒かかります。

これはまだ少し長いので、プロファイリングを行ったところ、最適化する価値のあるサブルーチンがいくつか見つかりました – parse_name() と parse_atom()。ここで注意を払った結果、合計テスト時間は約 15 分に短縮され、25% の速度向上が実現しました。多くの時間は LAPACK95 に費やされます。LAPACK95 は、多くの長いモジュール プロシージャを含むモジュールを作成します。残りの部分には、f77 LAPACK サブルーチン用の個別のラッパー関数があります。

さらにプロファイリングを行うと、大部分の時間が stdio サブルーチンで費やされていることがわかります。lapack サブルーチンは、長いモジュールから単一のシンボルを取得する ONLY で USE ステートメントを使用します。1 つのシンボルを見つけるのに時間はかかりません。それは、モジュール内のすべてのシンボルがどこにあるのかを調べている間です。

物事をスピードアップするための現在のアイデアは、さまざまな属性の長い名前を短い名前に置き換えるか、さまざまなフィールドを一連の単語ではなく単一の整数にキャストすることです。今のところ、何が起こっているのかを確認できることが重要です。後はもっとスピード。

3月16日
MERGE() に関する Édouard Canot の問題は、以前考えられていたよりも大きいことが判明しました。彼は次のように書いていました。

論理 :: m(10)
整数 :: k(10)

k = マージ (1, 0, m)
m がスカラーとは異なるランクであるため、これは失敗していました。MERGE() は要素的であり、0 と 1 は m と一致することがわかります。関数が要素かどうかに基づいてランクをチェックするコードを追加しました。
私が実行した主なテスト スイートにさらにいくつかのテスト スイートを追加し、配列コンストラクターの配列要素を参照する際の問題を修正しました。

Arnaud Desitter さんは、g95 が unit タグのオブジェクトとしてスカラー変数を想定していたため、UNIT=string タグで文字列 (文字の配列) が誤って失敗するという問題を報告しました。配列が必要であることがわかりました。

また、関数参照と同様にサブルーチン参照を解決するための修正も開始しました。間違ったスタートを切った後、既存の関数コードを再利用することはありませんでした。サブルーチン呼び出しの表現が異なっていて、これが面倒なことになっていたからです。これはまだ完了していません。

3月14日
ユーザー オペレータを独自のネームスペースに移動しました。新しいコードは現在の回帰テストに合格し、チェックインされています。

Édouard Canot が MERGE() の問題を報告しましたが、これは修正されました。

現在のすべてのテストに合格したので、さらにテスト スイートを探しに出かけました。David Bailey の multiprecision パッケージをダウンロードしたところ、派生型を比較す​​るための規則のバグが発見されました。名前は、それらに関する他のほとんどすべてと同様に一致する必要があります。それは今通過します。

また、J3 の現在の編集者である Richard Maine によるスイートも見つけました。配列コンストラクターの配列参照に関する厄介な問題が明らかになりました。まだそれを理解していません。

3月13日
先週の土曜日のハッカソンは私から多くのことを奪ったので、休憩が必要でした。しかし、強打します。

正式なインターフェースを他の正式なインターフェースや実際のインターフェースと比較する方法を変更しました。比較ではダミー プロシージャが考慮されるようになり、任意の深さまで再帰できるようになりました (もちろん、スタック サイズの影響を受けます)。解決に失敗した Jos Bergervoet のコードは、正しく解決されるようになりました。

また、通常のシンボルに便乗するのではなく、ユーザー オペレータを独自のシンボル ツリーに分割するための大きなパッチの作業も開始しました。問題は、名前がユーザー オペレーターにのみ使用される場合、その名前の変数が定義されてしまうことです。モジュールが使用されているサブプログラムでこの変数を使用しようとすると、エラーが発生します。いくつかのハッキングは可能だったかもしれませんが、正しい方法で分割する方が良い考えのようです. 副次的な利点として、シンボル ノードのサイズが 8 バイト減少します。

3月9日
RESHAPE() コードを完成させてテストしました。また、配列コンストラクターの型変換に関する問題も修正されました。

Hannes Boehm 氏は、セグメンテーション違反を起こした 2 つのプログラムを報告しました。両方の場合の問題は、ダミー関数の結果名を設定できないことでした。この場合、’result’ 変数は対象の元のシンボルを指します。

Jos Bergervoet が数日前に非常に微妙な問題を報告しましたが、現在は解決されています。組み込み型変換が挿入された場合、それらは基本的なものであるため、ランクは変換によって伝播される必要があります。彼はまた、すべて g95 に適合した 11 人の不良少年のリストを私にメールしました。オペレーター インターフェイス名を独自の名前空間に分割することを含むものを除いて、それらをすべて修正しました。

3月7日
RESHAPE() を処理するコードを追加しました。これは、’shape’ 引数に指定された配列要素の数をカウントすることを意味します。要素の数から、結果のランクを取得します。これをテストする機会がなく、いくつかの古いテストケースがまだ失敗しているため、まだチェックインしていません。

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