ab.com コミュニティ https://www.activebasic.com/forum/ |
|
エディタの改善その他 https://www.activebasic.com/forum/viewtopic.php?t=2583 |
ページ 1 / 1 |
作成者: | aaf1687 [ 2009年7月20日(月) 21:45 ] |
記事の件名: | エディタの改善その他 |
ActiveBasic Version.4.24.00 を使用しています。 プログラム作成時およびプログラム実行時に気になる箇所がありますのでお知らせします。 (使用環境) Windows XP Version 2002 Service Pack 3 Celeron 1.21GB RAM [プログラム作成時] 1. システムメニューのないウィンドウの「テスト」表示を行うと消すことができません。 2. ウィンドウ数が13個以上になると編集画面が正しく表示されなくなります。 [プログラム実行時] 1. 平方根(Sqr)計算でまれに無限ループに入ることがあります。 (平方根関数の収束条件に問題があるのではないでしょうか。) 2. 呼び出しのない(使用されない)プロシージャを含むプログラムをコンパイルすると 呼び出しのないプロシージャの構文チェックが行われていないようです。 呼び出しのないプロシージャ内にバグがあってもコンパイルできますが、 プログラムを実行すると、動作が不安定になることがあります。 (計算結果が不正、異常終了が発生する等) 呼び出しのないプロシージャの構文チェックが正しく行われるようにならないでしょうか。 3. 実行時エラーが発生するとWindowsシステムにより強制終了されます。 まれにWindowsそのものが終了することがあります。 AB5は例外処理が可能になるようですが、AB5の完成が遅れているようなので、 AB4に例外処理を取り入れていただけないでしょうか。 (エラー表示があれば原因が特定しやすい。安定したプログラムが開発できる。) 4.文字列を多用するプログラムは、実行速度が遅くなります。 下記のように[\Include\system]内の"_System_HeapStringFree"関数を変更すると速くなります。 変更に問題がないか検討をお願いします(変更行は1行のみ)。 Sub _System_HeapStringFree(BufPtr As VoidPtr) Dim i As Long Dim pPtr As DWord EnterCriticalSection(_System_CriticalSection) ' For i=0 To _System_AllocatedStringInfo.num-1 (元のコード) For i=_System_AllocatedStringInfo.num-1 To 0 Step -1' (変更コード) pPtr=GetDWord(_System_AllocatedStringInfo.pAddress+i*4) If pPtr=BufPtr Then HeapFree(_System_hProcessHeap,0,BufPtr-4) _System_AllocatedStringInfo.num=_System_AllocatedStringInfo.num-1 For i=i To _System_AllocatedStringInfo.num-1 SetDWord(_System_AllocatedStringInfo.pAddress+i*SizeOf(DWord),GetDWord(_System_AllocatedStringInfo.pAddress+(i+1)*SizeOf(DWord))) Next LeaveCriticalSection(_System_CriticalSection) Exit Sub End If Next LeaveCriticalSection(_System_CriticalSection) If BufPtr Then OutputDebugString(Ex"未知の文字列が解放されようとしました。\r\n") End If End Sub |
作成者: | konisi [ 2009年7月25日(土) 13:14 ] |
記事の件名: | |
引用: 1. システムメニューのないウィンドウの「テスト」表示を行うと消すことができません。 こちらの環境でも2番は確認できました。10個より多くしたあたりから動作が遅くなってきます。2. ウィンドウ数が13個以上になると編集画面が正しく表示されなくなります。 AB4.23/WinXPSP3/CPU:PenD3.0/Mem:2GB 1番はAlt+F4で消してあげてください。 引用: 1. 平方根(Sqr)計算でまれに無限ループに入ることがあります。 無限ループに入る値を例示してもらえれば助かるのですが、確かにこのコード(Include/basic/function.sbp内)では無限ループに陥る可能性があります。 安易な解決例としては(指数部と符号を含めた)上位32bitの差を取り、その差の絶対値が1以下になったらあと2回ループを回す等。 #ニュートン法を使ってるので19bit程度の精度で求めればあと2回の計算で76bit程度の精度は出る筈。(必要なのは52bit) 引用: 2. 呼び出しのない(使用されない)プロシージャを含むプログラムをコンパイルすると AB5では全ての関数の構文チェックをするように設定できるようになっています。呼び出しのないプロシージャの構文チェックが行われていないようです。 呼び出しのないプロシージャ内にバグがあってもコンパイルできますが、 プログラムを実行すると、動作が不安定になることがあります。 動作が不安定になるというのは初耳。 引用: 3. 実行時エラーが発生するとWindowsシステムにより強制終了されます。 スタックオーバーフロー、メモリアクセス違反等でプログラムが強制終了させられるのはよく知られた事実だと思いますが、まれにWindowsそのものが終了することがあります。 それで落ちるのはプログラマ側のミスだと思うのですが・・・・・・ 引用: 4.文字列を多用するプログラムは、実行速度が遅くなります。 当たり前です。文字列を多用して、且つ実行速度を上げたいならまずはString型から抜け出してmalloc等を利用してみましょう。コードの変更例にはぱっと見た所問題が無さそうですね。 #何というかこれって仕様提案と言うよりはバグ報告のような |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |