[Go to BBS]
All articles in a thread
Subjectamorita branchの変更予定
Article No510
Date: 2008/01/11(Fri) 03:23:11
ContributorAKio Morita
amorita branchでの変更予定や検討中or検討すべき開発項目などを掲示してみる

o SAD本体側に取り込んだ各種 framework用の header fileを dynamic loading module
コンパイル時に参照できるように、mk/sad.module.mkをアップデートする
- USE_FRAMEWORK/FRAMEWORK_HEADERS変数を導入予定
- mk/sad.framework.mkを新設か?

o 拡張モジュール等で実装している機能毎の version番号を検査する機構を実装する
- feature_provide(name, version)、feature_version(name)の実装(C用の framework)
- FeatureQ[]の実装(SADScript側からの検査関数)
- Version番号は uint32_t型、0は未実装と定義
- extensions/RandomMT/Framework等に feature_provide()を入れる

o extensions/RandomMT/Frameworkにて、カット無しのガウス分布をサポートする
- 各種Pluginも更新する
- Framework versionを上げる

o 既存の Date[], ToDate[], FromDate[], DateString[], FromDateString[], Day[]を外す
- DateTAI拡張モジュールを SAD本体に取り込む予定
- 閏秒をサポートする場合には、FromDate[]の返り値(SAD epoch表現)に互換性が
なくなるので要注意

o extensions/RandomMT/Frameworkを SAD本体に取り込む
- SeedRandom[]の返り値がスカラーからリスト型に変化するので要注意
- SEED/$SEEDに関しては本質的に解決不能っぽいので、旧来の SEED/$SEEDを
使ったコードは動かなくなる予定
- inline展開された線形合同法を根絶する
- array generationなAPIを使って書き直さないと、確実に遅くなる
- 疑似乱数発生器の実装隠蔽か、保守性のためには必要

o Beam Line Elementの動的定義(low priority)
- On the flyで、Beam Line Elementの定義を追加する(2nd SAD Workshopでリクエストがあった)
- 要するに、ExternalMap[]なことが Element Type名付きで出来るやつ
- 可能なら、動的に定義したElementと組み込み Elementは同格とすべき

o SPAC系のコードの動的定義(low priority)
- tturnにある SPAC系コードのif-then-elseは格好悪い
- SPAC系のエンジンを増設・交換しても tturn側を変更せずにすむのが理想
- SPAC系のコードを差し込む汎用のホックを埋めておいて、差し込む関数ポインタを動的に書き換える?
- Data Sampling用のホック(粒子分布の読みだし)
- Kick用のホック(粒子分布を蹴る)
- NPARAの扱いは?(並列プロセス間の同期処理)

o EPICS Channel Accessの再実装(low priority)
- 重複コードの削減や、chid objectの隠蔽のため
- 新しい EPICS Channel Access APIで書き直す
- テスト環境をどの様に構築するか検討中

o 外部関数呼び出し機能の実装(low priority)
- 他の言語で書かれた外部関数を直接呼び出す
- 関数シンボルはdynl_function()で解決可能
- 関数呼び出しに伴うスタック操作を如何に隠蔽するかが鍵
- ffcall, libffiの利用を検討中
- 最悪は、ラッパー関数のソースを動的に生成してCompile&Dynamic Loading

SubjectRe: amorita branchの変更予定
Article No511
Date: 2008/01/14(Mon) 22:40:33
ContributorAKio Morita
> o SAD本体側に取り込んだ各種 framework用の header fileを dynamic loading module
> コンパイル時に参照できるように、mk/sad.module.mkをアップデートする
> - USE_FRAMEWORK/FRAMEWORK_HEADERS変数を導入予定
> - mk/sad.framework.mkを新設か?
Revision 1236/1241で初期の実装を完了

> o 拡張モジュール等で実装している機能毎の version番号を検査する機構を実装する
> - feature_provide(name, version)、feature_version(name)の実装(C用の framework)
> - FeatureQ[]の実装(SADScript側からの検査関数)
> - Version番号は uint32_t型、0は未実装と定義
> - extensions/RandomMT/Framework等に feature_provide()を入れる
Revision 1236/1251で初期の実装を完了
o FeatureQ[]
定義されている機能名のリストを得る
o FeatureQ[func_String]
定義されている機能 funcの version番号を返す(未定義の場合は 0を返す)
o FeatureQ[func_String, ver_Real]
定義されている機能 funcが verと互換か検査し、互換性があればTrueを返す

> o extensions/RandomMT/Frameworkにて、カット無しのガウス分布をサポートする
> - 各種Pluginも更新する
> - Framework versionを上げる
RandomMT-Rev.15.tar.gzで実装(Plugin ABI Versionは 1.5へ更新)

> o 既存の Date[], ToDate[], FromDate[], DateString[], FromDateString[], Day[]を外す
> - DateTAI拡張モジュールを SAD本体に取り込む予定
> - 閏秒をサポートする場合には、FromDate[]の返り値(SAD epoch表現)に互換性が
> なくなるので要注意
Revision 1248-1249で実装をDateTAIへ入れ替え
閏秒サポートをサポートする環境では、HAVE_LEAPSECONDS=YES付きでコンパイルすること
仕様の拡張としては、
o SAD起動時の標準のタイムゾーンが JST(日本標準時)から動作環境のローカル時刻へ変更されました
o ローカル時刻表現として、既存の{Y,m,d,H,M,S}のみではなく タイムゾーンオフセットを含む形の
{Y,m,d,H,M,S,offset}とその省略形{Y,m,d[,H[,M[,S[,offset]]]]}が扱えます
o 新しい変数&関数
- TimeZoneOffset
UTCからのタイムゾーンオフセット(分)
- JulianDay[]
1858/11/17を 0日とする修正ユリウス日を返す
- FromDateString2Date[]
DateStringを ローカル時刻{Y,m,d,H,M,S}へ変換する
- FromDateString2Date$[], Date$[], ToDate$[]
$なしの関数の出力をタイムゾーンオフセット付きにした関数
o 新しいオプション
- TimeZone->_Real|_String
ローカル時刻のタイムゾーンもしくは分単位のオフセット(Default TimeZoneOffset)
* 代表的なタイムゾーンは、タイムゾーン名で指定可能(例 "GMT", "JST", "Asia/Tokyo")
* 符号+4桁の時差表現"+HHMM" or "-HHMM"(RFC822で使われるものと同等)
- Format->_String
DateStringの書式指定(Default "SAD")
* "SAD" mm/dd/YYYY HH:MM:SS[.ticks]
* "ISO" YYYY-mm-dd HH:MM:SS[.ticks] TimeZoneOffset
* "ISOs" "ISO"の短縮版(オフセット無し)