原案: &fmldevel; (仮名) のデザインコンセプト
fml-devel プロジェクトの構想
fml-devel
とも呼ばれている &fmldevel; プロジェクトは、
&fml4; の再構想(refactoring)とその実装(例)の構築
を行なっています。
http://www.fml.org/software/fml-devel/
は将来の fml-current についてのデザインや実装例を紹介しています。
現状の fml-devel はアイデアを実装し、運用テストするための fml 8.0 のア
ルファ版です。ですが、すでに動く実装例をダウンロードできますし、fml
1.2 相当ないしはそれ以上の機能を使うこともできます。しかしながら、変数
名もアーキテクチャアも本決まりではないので、将来変わる可能性があります。
でも、概ね固まったと思う。
自分がふだん使うには全然困らないのですが、&fml4; との互換性をいいだす
と、まだ多くの機能が実装されていないといえまそう。これは、デザインを最
初から考え直すに当たり、アイデアや意見を募集するためにまだまだ原型にと
どまっているためでもあります。
ものによっては &fmldevel; 用に作られたモジュールを &fml4; へ輸入/輸出
することも検討しています。IPv6 はすでに輸出されました。たとえば 4.0 で
も独立性の高い mead (エラーメール解析プログラム)などはその良い例だろう
し、新機能を提供するモジュールなども再輸入(輸出)可能なものは順次マージ
していきます。
これらのマージおよび 4.0 自体のコードの保守をしつつ 4.0 および &fmldevel; は
並行開発されていく予定です。
そのため 4.0 系は stable に近い current という位置付けになります。
そして 4.0 の bug fix は 4.0.x (4.0.1 4.0.2 …)としてまとめられリリー
スれていく予定です。
逆に &fmldevel; は本当の開発用のコード( fml-current )ということになります。
構想(詳細)
設定ファイルとメニュープログラムの負荷を少なくしたい
全部 perl module 形式 (要 &fmldevel;04 以降)
CUI (makefml) インターフェイスおよび CGI インターフェイス
これは従来通りのもの。
ただしより統合化され、
よりメニューなどが書きやすいものであるように
(実装者が楽できる設定ファイル形式がのぞましい et.al.)
乖離層
バージョンアップ
を簡単にできるように
CPAN モジュール使いまくり
(ただし、できるだけ直接使うより、
一層被せておくほうがよい)
3rd party 用ディレクトリ
統一化されたメンバーリストなどへのアクセスをできるだけ抽象化する。
ファイル (実装済み)
/etc/group (実装済み)
NIS (実装済み)
SQL (プロトタイプは実装済み)
LDAP
実際には効率の問題もあり、
あらゆる抽象化は重たくなってしまう。
しかし少々重くなっても実装しよう。
IPv4/IPv6 ready (実装済み)
fml をリファクトリングするアイデア
リファクトリング TODO
status
項目
詳細
done.
ライセンス
ライセンスを Perl 準拠へ変更する
イメージ/モティーフ
&fml4; から &fmldevel; へは、
sendmail から postfix への移行のようなイメージで。
最低限の config.ph コンバータは用意する。
done.
メインプログラムの wrapper (乖離層)。
バージョン管理やデバッグを簡単にするための乖離層
再利用性(自主開発はできるだけ避ける)
可能な限りあらゆる CPAN モジュールなどを使う。
そして利用する場合には乖離層を設けること。
例えば
”FML::モジュール → 乖離層 → CPAN/モジュール”
のように。
設定ファイルの形式は
cf と config.ph を統合化したようなもので、
配列を表現できる形式とする。
メニュープログラムが楽できるフォーマットにしたい。
原則として”設定ファイル”という名のものは
どれも同じフォーマットとする。
変数の命名規則の規格化
”USE_ほえ”および”ほえ_TYPE”形式か?
また、NOT_USE などは禁止する( default_config に書くこと)。
attribute にあたるものが
群れになってしまうのはしょうがない。しかし、
配列表現が可能なため、現在の ifdef の群れで表現する
ようなことが少なくなるはず。
関数名ルールの統一
main:: スペースに出てくるものは従来通り X11 風準拠に。
メソッドは他のモジュールにあるようなそれっぽい小文字の名前をつける。
lisp 的要素を廃止する。
参考文献 Perl Cookbook として、
そこにあるようなシンタックス風を推奨する?
例:
メソッドなら is_member() で、大域関数なら
”MemberP() -> IsMember()”
手づかず
queue manager
再送処理のため (e.g. smtpfeed )
may be
tools
BSD make を使わない。
C 言語ではないので、autoconf は特には必要ないと思う。
しかしながら configure という名前のスクリプトを(フェイクでも)
用意することはよいことかもしれない。
(と、最初はいっていたけど、結局つかってます:-)
そのスクリプトは例えば
IPv6 ready か否かを決めるために使われるだろう(
現在の実装では使ってはいない、IPv6 は常に挑戦してみる
)。
アーキテクチャア・イメージ
リリース・エンジニアリングについて
アーキテクトでも、デベロッパーに偏ってもいけない。
抽象化に萌過ぎても、オブジェクト指向分析に燃え過ぎてもいけない。
中庸であり、一カ月単位でフィードバックしながら
プロジェクトの計画とコードレビューを行なうこと。
リリース・インターバル
日取り
内容
最初の 4〜5日
計画を練り直す。
リリースエンジニアリングプロセス中の
20 %程度はこの計画に費やすこと
2〜3 週間
コードを書く
最終週
ドキュメントを見直す、およびコードレビュー
月の切れ目
まぁまぁ大丈夫ぽい snapshot を出してみる。
alpha-0,
alpha-1,
alpha-2, ...