重要v2 はここにあります。それは大きな変化です。最新の v1 リリースは v1.4.0 でした
DynaMix ( Dynamic Mixins ) は、オブジェクト指向プログラミングと動的ポリモーフィズムの別の解釈です。これにより、ユーザーは実行時にポリモーフィック オブジェクトを作成および変更できます。主なターゲット言語は C++ ですが、C もサポートされています。
ライブラリは、プロジェクトの目的を達成するのではなく、プロジェクトのアーキテクチャを作成する手段です。これは、拡張性、読みやすさ、スケーラビリティ、相互運用性に役立ちます。最大のパフォーマンスと最小限のメモリ オーバーヘッドに重点を置いています。
DynaMix は、次のような複雑なオブジェクトを含むシステムのソフトウェア アーキテクチャに適用できますが、これらに限定されません。
このライブラリはdynamix::object
型をプレースホルダーとして使用します。そのインスタンスは既存のクラス (ミックスイン) で拡張できるため、特定のインスタンスにこれらすべての型のミックスイン機能が提供されます。おそらく最も重要なタイプのミックスイン機能はメッセージです。これは、C++-OOP 用語ではメソッドと考えることができる機能オブジェクトです。 Mixin 機能はオーバーライド可能で、遅延バインディングと単一ディスパッチを使用します。ユニキャストとマルチキャストが可能です。
以下に、ライブラリを使用したコードがどのようなものになるかを示す小さな例を示します。
// assuming my_objects.get_ally(0); is a way to get an ally to the
// main character in a game
dynamix::object& obj = my_objects.get_ally( 0 );
// now let's make the object think some positive thoughts about the
// main character
think (obj); // C++ doesn't allow us to have obj.think().
// DynaMix's messages are like standalone functions
// composition
mutate (obj, dynamix::add<flying_creature>());
// object can now respond to fly()
fly (obj); // ...instead of obj.fly()
// mutation
mutate (obj
, dynamix::remove<ally>()
, dynamix::add<enemy>()
);
think (obj); // the same object now thinks negative thoughts about the main
// character, since it's no longer an ally, but an enemy
このライブラリの主な機能の一部を次に示します。
std::polymorphic_allocator
を使用すると、割り当てを微調整し、コードの重要な部分でキャッシュの局所性を実現できます。std::function
に相当次のプロジェクトは、ソフトウェア アーキテクチャの主要な部分として DynaMix を使用していることが知られています。
ドキュメントは、doc/ ディレクトリ内のリポジトリの一部です。
問題やプル リクエストの形式での貢献は歓迎されます。
このソフトウェアは、MIT ソフトウェア ライセンスに基づいて配布されます。
付属のファイル LICENSE を参照するか、ここからコピーしてください。
著作権 © 2013-2024 ボリスラフ・スタニミロフ、ザハリ・カラジョフ
。
DynaMix ロゴは、クリエイティブ コモンズ表示 4.0 国際ライセンスに基づいてライセンスされています。著作権 © 2018 area55git
DynaMix v2 は完全に書き直されたもので、v1 と同じ考え方を持っていますが、v1 と互換性がなく、インターフェイスが異なり、ほとんどの機能の実装が異なり、一部の機能については用語が異なります。
DynaMix v1 の最後のリリースは v1.4.0 でした。ドキュメントはここから入手できます
v1 と v2 の最も顕著な違いのリストは、ここにあります。
DynaMix は当初 Boost.Mixin として開発されましたが、現在は Boost ライブラリ コレクションに依存しない別のライブラリとなっています。