Comments (3)
同じ領域を複数回保存/回復する件
この件について検討しました。
オブジェクト追跡を開発した当初、同じ領域を複数回保存すると回復時、混乱すると考えました。
オブジェクト追跡している時はそれを検出できるため、検出した時エラーにしました。
しかし、よく考えてみると同じ領域を複数回保存しても混乱しません。「同じ領域」のアドレスは同じです。それを複数回保存してもオブジェクト追跡するアドレスは変わらないのでポインタの保存/回復に支障はないのです。
そこで、今回、オブジェクト追跡のエラー処理を見直し、同じ領域の複数回の保存/回復はエラーにしないようにしました。
from theolizer.
あけましておめでとうございます。
やっとポリモーフィズムを含むオブジェクト追跡の自動テストの実装を完了しました。
大きな問題点が2つ見つかりました。
2番目以降の基底クラスへのポインタから派生クラスをシリアライズする時の不具合修正
動的処理するために、ポインタを一度void*へ変更していたため、2番目以降の基底クラスへのポインタで派生クラスを保存/回復する時、ポインタの指すアドレスを適切に変換できていませんでした。
2番目以降の基底クラスへのポインタのアドレス != 派生クラスへのポインタのアドレスなので、この変換はコンパイラに任せる必要があるのに、void*へreinterpret_castしていたため、アドレス変換されず不適切なアドレスでシリアライズ処理してました。
ポリモーフィズム対応処理を全体的に見直し、基底クラスへのポインタと派生クラスへのポインタを変換する時は、static_cast<>で変換できるよう静的処理するように変更しました。
その際、旧バージョンと新バージョンで基底クラスを変更するようなケースへの対応を断念しました。
恐らく、頑張ればこのケースにも対応できると思いますが、レアな要求と思いますので、現段階では断念します。
将来的に要求が発生した時に再度検討します。
非侵入型手動クラスを抽象クラスにすることを非サポート
非侵入型完全自動クラスと侵入型半自動クラスは、メンバ変数をTheolizerが別途生成して管理するため、抽象型でも領域確保でき、サポートできます。
しかし、非侵入型手動クラスは、メンバ変数をプログラマが管理するため、抽象型の記憶領域はクラス自身が管理します。
自動型はそれが包含するクラスについて、クラス毎にバージョン間の引き継ぎを行います。
そして、新バージョンで基底クラスが削除された時、旧バージョン形式で保存する場合に、旧バージョンへ引き継ぐ基底クラスの記憶領域を確保する必要があります。この時、抽象クラスでは、単独でコンストラクトできないため、その記憶領域の確保ができないことが原因です。
領域確保するための派生クラスをドライバにて自動生成する等の手法でサポートすることは可能と思いますが、現時点では保留します。
将来的に要求が発生した時に再度検討します。
from theolizer.
実装完了し、v.0.4.2としてリリースしましたので、クローズします。
from theolizer.
Related Issues (20)
- 「参照」処理の見直し HOT 1
- libToolingのWindows上ビルドにninjaを使ってみる
- Travis CIでタイムアウト(travis_wait) HOT 2
- Travis CIでタイムアウト(テスト時間不足) HOT 1
- clangのAST解析が落ちる
- プリミティブとenumのバージョン間引継ぎ処理見直し HOT 1
- 正式公開の最終準備を開始します HOT 1
- バイナリからソースを特定する仕組み見直し HOT 2
- THEOLIZER_INTRUSIVE()指定方法の検討 HOT 1
- CMake 3.8.0以降のCTestの文字化け対策 HOT 5
- Travis-CIでビルドに失敗する HOT 4
- 使用しているコンポーネント群のバージョンアップ HOT 8
- メモリ・リーク検出機能の追加とリーク発見 HOT 3
- xmlシリアライザ開発 HOT 2
- メタ・シリアライズによるC#連携機能の追加について HOT 1
- C#連携:C#側シリアライザの開発 HOT 7
- 最初のシリアライザだけで処理している完全自動型クラスのコードが自動生成されない
- C#連携:メタ・シリアライザ開発 HOT 9
- C#連携:メタ・デシリアライザ開発
- Visual C++ 2017対応
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from theolizer.