Giter Site home page Giter Site logo

Comments (3)

yossi-tahara avatar yossi-tahara commented on May 16, 2024

同じ領域を複数回保存/回復する件

この件について検討しました。
オブジェクト追跡を開発した当初、同じ領域を複数回保存すると回復時、混乱すると考えました。
オブジェクト追跡している時はそれを検出できるため、検出した時エラーにしました。
しかし、よく考えてみると同じ領域を複数回保存しても混乱しません。「同じ領域」のアドレスは同じです。それを複数回保存してもオブジェクト追跡するアドレスは変わらないのでポインタの保存/回復に支障はないのです。

そこで、今回、オブジェクト追跡のエラー処理を見直し、同じ領域の複数回の保存/回復はエラーにしないようにしました。

from theolizer.

yossi-tahara avatar yossi-tahara commented on May 16, 2024

あけましておめでとうございます。

やっとポリモーフィズムを含むオブジェクト追跡の自動テストの実装を完了しました。
大きな問題点が2つ見つかりました。

2番目以降の基底クラスへのポインタから派生クラスをシリアライズする時の不具合修正

動的処理するために、ポインタを一度void*へ変更していたため、2番目以降の基底クラスへのポインタで派生クラスを保存/回復する時、ポインタの指すアドレスを適切に変換できていませんでした。

2番目以降の基底クラスへのポインタのアドレス != 派生クラスへのポインタのアドレスなので、この変換はコンパイラに任せる必要があるのに、void*へreinterpret_castしていたため、アドレス変換されず不適切なアドレスでシリアライズ処理してました。

ポリモーフィズム対応処理を全体的に見直し、基底クラスへのポインタと派生クラスへのポインタを変換する時は、static_cast<>で変換できるよう静的処理するように変更しました。
その際、旧バージョンと新バージョンで基底クラスを変更するようなケースへの対応を断念しました。
恐らく、頑張ればこのケースにも対応できると思いますが、レアな要求と思いますので、現段階では断念します。
将来的に要求が発生した時に再度検討します。

非侵入型手動クラスを抽象クラスにすることを非サポート

非侵入型完全自動クラスと侵入型半自動クラスは、メンバ変数をTheolizerが別途生成して管理するため、抽象型でも領域確保でき、サポートできます。
しかし、非侵入型手動クラスは、メンバ変数をプログラマが管理するため、抽象型の記憶領域はクラス自身が管理します。

自動型はそれが包含するクラスについて、クラス毎にバージョン間の引き継ぎを行います。
そして、新バージョンで基底クラスが削除された時、旧バージョン形式で保存する場合に、旧バージョンへ引き継ぐ基底クラスの記憶領域を確保する必要があります。この時、抽象クラスでは、単独でコンストラクトできないため、その記憶領域の確保ができないことが原因です。

領域確保するための派生クラスをドライバにて自動生成する等の手法でサポートすることは可能と思いますが、現時点では保留します。
将来的に要求が発生した時に再度検討します。

from theolizer.

yossi-tahara avatar yossi-tahara commented on May 16, 2024

実装完了し、v.0.4.2としてリリースしましたので、クローズします。

from theolizer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.