SAD部屋 - 開発メモ/コードのクリーンアップ Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
!コードのクリーンアップ
!! itfmalocp
* ''src/tffswake.f''に関しては、Fortran pointerベースで可搬性のある形に再実装を行い、itfmalocpはlist2array_utilsで置き換え廃止する
* 現状の分析・設計案は'''TODO.wake'''を参照
!! italoc/tfreeによる作業領域の割り当て
* 型安全な割付配列とallocate文に書き換える
!! implicitな型宣言
* commonブロック等をmodule化する際に、暗黙の型宣言があると定義消失シンボルの発見が困難
* 少なくともimplicit宣言を含む '''src/inc/*.inc'''は廃止するべき
|| include元 || 参照数 || ファイル数 ||
|| src/inc/TFMACRO.inc || 123 || 104 ||
|| src/inc/TMACRO.inc || 33 || 28 ||
!! 並列計算絡みの計算領域割り当て
*GO/CALC==GO/CALC回りで、shared属性の付与が間違ってる可能性が残っているので確認が必要==([[2019-01-16|self:diary/?date=20190116#p01]] rev.5471にて修正実施)
** 日記 2017-12-02 / 2017-12-04 / 2017-12-14 / 2018-04-13
* tffssetupqu/tffsqu回りで操作している'''qu(nqcol,nvar)'''配列であるば、スコープ内で'''nvar'''が定数・'''nqcol'''が増減する構造なので、線形代数演算時に転置した行列を渡せれば、'''nqcol'''が減るケースでのポインタ再割り当てを削除出来るので、余裕があれば検討すべき
** SAD組み込みではなく、BLAS/LAPACKを使えば転置行列で解ける?
!! 数学関数wrapperの近代化
* '''Log[x, y]'''のケースに関して、x/yがリストの場合の意味論定義を明確化し、コード生成器を実装する
!Cコードのクリーンアップ
!! 引数数の評価
* Narg/NargQへ置き換える
** 引数0時に、LINE/Twiss等の古いコードの為に、暗黙の引数Nullをスタックに積み込んでいる部分の隠蔽
** 将来的に廃止する際に、判定条件が変更となる
!! jlistによるStringの参照(完了)
* sad_cstrへ置き換える
** '''const char*'''なので、一部のAPIに渡す際にcastが必要
!! ilistによるString/コンテナ長の参照
* sad_strlenへ置き換える
* sad_list_sizeへ置き換える
!! rlist経由のRealListの参照・構築
* 参照系は、'''const double *'''を返すhelperの実装を考える
* 構築系は、tfsetlistの使用もしくはReal専用のsetterの実装を考える
** RealVectorの生成は、itfr2l等のhelperに置き換える
!! ilist経由のコンテナ参照・構築
* 参照形は、抽象化の為のイテレータ型の導入を検討すべき
* 構築系は、tfsetlistの使用もしくは…
!! itfgetoptionstkの再設計
* 現状作業領域をスタック展開しているが、mstk検査をしていない
* オプションリストは、呼び出し時に確定しているので、展開領域を引数で受け取れば、スタックを消費しない
* 特に、Symbol参照を格納する領域を受け取れば、文字列からSymbolへの解決を省略出来る
** 格納領域を受け取り、検査と初期化を実装する
** Symbol参照配列を初期化する関数を用意してstatic変数を初期化し、初期化済みの参照配列を受け取る
*** const staticな参照配列を用意できる
*** thread safe singletonによる初期化を期待できる(少なくともC++はそうなる)
*** オプションリストの展開先は、object reference型の配列となる
!! itflistによるリスト構築
* mstkの検査が必要
* 不定長の場合は、独自にheapを管理することを検討すべき
* object reference型の導入と拡張可能なobject reference配列及びAppend操作helperを用意すべき
** object reference配列からListを構築する構築子も必要
** Listからheapへコンテンツを展開するhelperも欲しい(○○stk相当)
** 将来的には、Fortran版も欲しい
* 解析すべき場所
** src/tfTkInter_.c 2019-01-10の日記参照
!! スタックへのリスト展開
* mstkの検査が必要
* 不定長の場合は、独自にheapを管理することを検討すべき(itflistの件と本質的には同等)
* 手続き呼び出しに関しては、スタックに展開するのが正しいが、mstk検査を実装すべき
!! itfmalocp
* ''src/tffswake.f''に関しては、Fortran pointerベースで可搬性のある形に再実装を行い、itfmalocpはlist2array_utilsで置き換え廃止する
* 現状の分析・設計案は'''TODO.wake'''を参照
!! italoc/tfreeによる作業領域の割り当て
* 型安全な割付配列とallocate文に書き換える
!! implicitな型宣言
* commonブロック等をmodule化する際に、暗黙の型宣言があると定義消失シンボルの発見が困難
* 少なくともimplicit宣言を含む '''src/inc/*.inc'''は廃止するべき
|| include元 || 参照数 || ファイル数 ||
|| src/inc/TFMACRO.inc || 123 || 104 ||
|| src/inc/TMACRO.inc || 33 || 28 ||
!! 並列計算絡みの計算領域割り当て
*
** 日記 2017-12-02 / 2017-12-04 / 2017-12-14 / 2018-04-13
* tffssetupqu/tffsqu回りで操作している'''qu(nqcol,nvar)'''配列であるば、スコープ内で'''nvar'''が定数・'''nqcol'''が増減する構造なので、線形代数演算時に転置した行列を渡せれば、'''nqcol'''が減るケースでのポインタ再割り当てを削除出来るので、余裕があれば検討すべき
** SAD組み込みではなく、BLAS/LAPACKを使えば転置行列で解ける?
!! 数学関数wrapperの近代化
* '''Log[x, y]'''のケースに関して、x/yがリストの場合の意味論定義を明確化し、コード生成器を実装する
!Cコードのクリーンアップ
!! 引数数の評価
* Narg/NargQへ置き換える
** 引数0時に、LINE/Twiss等の古いコードの為に、暗黙の引数Nullをスタックに積み込んでいる部分の隠蔽
** 将来的に廃止する際に、判定条件が変更となる
!! jlistによるStringの参照(完了)
* sad_cstrへ置き換える
** '''const char*'''なので、一部のAPIに渡す際にcastが必要
!! ilistによるString/コンテナ長の参照
* sad_strlenへ置き換える
* sad_list_sizeへ置き換える
!! rlist経由のRealListの参照・構築
* 参照系は、'''const double *'''を返すhelperの実装を考える
* 構築系は、tfsetlistの使用もしくはReal専用のsetterの実装を考える
** RealVectorの生成は、itfr2l等のhelperに置き換える
!! ilist経由のコンテナ参照・構築
* 参照形は、抽象化の為のイテレータ型の導入を検討すべき
* 構築系は、tfsetlistの使用もしくは…
!! itfgetoptionstkの再設計
* 現状作業領域をスタック展開しているが、mstk検査をしていない
* オプションリストは、呼び出し時に確定しているので、展開領域を引数で受け取れば、スタックを消費しない
* 特に、Symbol参照を格納する領域を受け取れば、文字列からSymbolへの解決を省略出来る
** 格納領域を受け取り、検査と初期化を実装する
** Symbol参照配列を初期化する関数を用意してstatic変数を初期化し、初期化済みの参照配列を受け取る
*** const staticな参照配列を用意できる
*** thread safe singletonによる初期化を期待できる(少なくともC++はそうなる)
*** オプションリストの展開先は、object reference型の配列となる
!! itflistによるリスト構築
* mstkの検査が必要
* 不定長の場合は、独自にheapを管理することを検討すべき
* object reference型の導入と拡張可能なobject reference配列及びAppend操作helperを用意すべき
** object reference配列からListを構築する構築子も必要
** Listからheapへコンテンツを展開するhelperも欲しい(○○stk相当)
** 将来的には、Fortran版も欲しい
* 解析すべき場所
** src/tfTkInter_.c 2019-01-10の日記参照
!! スタックへのリスト展開
* mstkの検査が必要
* 不定長の場合は、独自にheapを管理することを検討すべき(itflistの件と本質的には同等)
* 手続き呼び出しに関しては、スタックに展開するのが正しいが、mstk検査を実装すべき