BufferProvider: re-think through the process of Key creation
...while the implementation provided herein is trivial,
it represents the entrance point into the process covered by the
''Buffer Provider Protocol''; thus I went again through all the
stages of the implementation, and confirmed my analyiss from 2024:
9a23aa773b
Today I'd even go so far as to call this a **crietrion of consistency**:
The path leading to the LOCK-transition must be reproducible.
The existing implementation, now re-cast into a new API,
ensures this by requiring an explicitly given Buffer Descriptor
at that point, and ''does not offer any one-step shortcut.''
__The point to note is__: the system used for implementing those type-IDs,
which is a tree of chained hashes, is deliberately open and extensible.
''In theory'' it would be possible thus to arrive at different hash-IDs
for the same criteria, if these are added gradually, in several steps,
as a refinement. This leeway is acceptable, as long as it can not happen
that two competing allocation processes want to lock the same
memory address, but tracked through different parent type-IDs.
This commit is contained in:
parent
3738026945
commit
1230cbae12
6 changed files with 368 additions and 18 deletions
|
|
@ -20,6 +20,7 @@
|
|||
#include "lib/error.hpp"
|
||||
#include "steam/engine/buffer-provider.hpp"
|
||||
#include "steam/engine/buffer-metadata.hpp" /////////////////////////OOO must be removed from here
|
||||
#include "steam/engine/simple-buffer-state-registry.hpp" /////////////OOO better use constexpr for hash-chaining?
|
||||
#include "lib/util.hpp"
|
||||
|
||||
using util::isSameAdr;
|
||||
|
|
@ -30,7 +31,7 @@ namespace engine {
|
|||
// storage for the default-marker constants
|
||||
const TypeHandler TypeHandler::RAW{};
|
||||
const LocalTag LocalTag::UNKNOWN{};
|
||||
|
||||
const metadata::Key SimpleBufferStateRegistry::NULL_KEY{HashVal(0), size_t(0)}; //////OOO try to make this init into a constexpr and then do it in-class!
|
||||
|
||||
namespace { // impl. details and definitions
|
||||
|
||||
|
|
@ -59,14 +60,16 @@ namespace engine {
|
|||
BuffDescr
|
||||
BufferProvider::getDescriptorFor (size_t storageSize)
|
||||
{
|
||||
return BuffDescr (*this, bufferStage_->key (storageSize));
|
||||
auto& typeKey = bufferStage_->defineBufferType (storageSize, TypeHandler::RAW);
|
||||
return BuffDescr (*this, typeKey);
|
||||
}
|
||||
|
||||
|
||||
BuffDescr
|
||||
BufferProvider::getDescriptorFor(size_t storageSize, TypeHandler specialTreatment)
|
||||
{
|
||||
return BuffDescr (*this, bufferStage_->key (storageSize, specialTreatment));
|
||||
auto& typeKey = bufferStage_->defineBufferType (storageSize, move (specialTreatment));
|
||||
return BuffDescr (*this, typeKey);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -193,6 +193,7 @@ namespace engine {
|
|||
virtual ~BufferStage() { } ///< this is an interface
|
||||
using BufferMetadata::BufferMetadata; ///////////////////////////////////////////////////////////TICKET #1410 : actual implementation structures should move down into this classes implementation
|
||||
|
||||
virtual ID defineBufferType (size_t, TypeHandler) =0;
|
||||
virtual ID lookup (HashVal) =0;
|
||||
virtual ID mark_locked (ID typeKey, Buff*, LocalTag) =0;
|
||||
virtual ID mark_emitted (HashVal stateKey) =0;
|
||||
|
|
|
|||
|
|
@ -50,15 +50,23 @@ namespace engine {
|
|||
: public BufferProviderSetup::Stage
|
||||
{
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////TICKET 1410 : rather hold BufferMetatdata object here
|
||||
static const metadata::Key NULL_KEY; ////////////////////////////OOO better init directly here as constexpr (to keep it really an implementation detail)
|
||||
|
||||
/* === BufferStage interface === */
|
||||
|
||||
|
||||
ID
|
||||
lookup (HashVal key) override
|
||||
{
|
||||
return this->get (key);
|
||||
return this->isKnown(key)? this->get (key)
|
||||
: NULL_KEY;
|
||||
}
|
||||
|
||||
ID
|
||||
defineBufferType (size_t buffSiz, TypeHandler handlerFunctions)
|
||||
{
|
||||
return lookup (this->key (buffSiz, move (handlerFunctions)));
|
||||
} // deliberately: create storage, and return reference to it
|
||||
|
||||
ID
|
||||
mark_locked (ID typeKey, Buff* storage, LocalTag implMark) override
|
||||
{
|
||||
|
|
|
|||
|
|
@ -118,6 +118,7 @@ namespace engine {
|
|||
, destroyAttached()
|
||||
, identity{0}
|
||||
{ }
|
||||
// has value semantics; default copy OK
|
||||
|
||||
/** build a TypeHandler
|
||||
* binding to arbitrary constructor and destructor functions.
|
||||
|
|
|
|||
|
|
@ -1252,16 +1252,23 @@ Mostly, the //client code,// i.e. code in need of using buffers, can access some
|
|||
:a //naive// implementation is used for unit-tests: each buffer request is simply allocated from the heap and this memory is not released or re-used, which allows to verify memory content after invoking the test subject.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="BufferMetadata" modifier="Ichthyostega" created="201109240004" modified="201109240026" tags="spec Rendering draft">
|
||||
<pre>the generic BufferProvider implementation exposes a service to attach and maintain additional metadata with individual buffers. Using this service is not mandatory -- a concrete buffer provider implementation may chose to maintain more specific metadata right on the implementation level, especially if more elaborate management is necessary within the implementation anyway (e.g. the frame index). We can expect most buffer provider implementations to utilise at least the generic buffer type id service though.
|
||||
<div title="BufferMetadata" modifier="Ichthyostega" created="201109240004" modified="202602152125" tags="spec Rendering draft" changecount="3">
|
||||
<pre>The generic BufferProvider implementation involves a service to attach and maintain additional metadata with individual buffers. The scheme used for forming this metadata became effectively part of the standard, to the degree that this generic high-level implementation of the //|Buffer Proivder Protocol«// is considered a façade, leaving room to configure the actual implementation backend. However, a concrete buffer provider implementation may chose to maintain more specific metadata right on the implementation level, especially if more elaborate management is necessary within the implementation anyway (e.g. the frame index). The metadata scheme offers a {{{LocalTag}}} to attach and mark such additional implementation-level qualification.
|
||||
|
||||
We can expect every buffer provider implementation to utilise at least the generic buffer type-ID to keep track of the allocation size.
|
||||
|
||||
|
||||
!buffer types and descriptors
|
||||
Client code accesses buffer through [[smart buffer handles|BuffHandle]], including some kind of buffer type information, encoded into a type ID within the ''buffer descriptor''. These descriptors are used like prototypes, relating the type-~IDs hierarchically. Obviously, the most fundamental distinction is the BufferProvider in charge for that specific buffer. Below that, the next mandatory level of distinction is the ''buffer size''. In some cases, additional distinctions can be necessary. Each BufferProvider exposes a service to yield unique type ~IDs governed by such a hierarchical scheme.
|
||||
Client code accesses buffer through [[opaque buffer handles|BuffHandle]], including some kind of buffer type information, encoded into a type ID within the ''buffer descriptor'' ({{{BuffDescr}}}). These descriptors are used like prototypes, relating the type-~IDs hierarchically. Obviously, the most fundamental distinction is the BufferProvider in charge for that specific buffer. Below that, the next mandatory level of distinction is the ''buffer size''. In some cases, additional distinctions can be necessary. Each BufferProvider exposes a service to yield unique type ~IDs governed by such a hierarchical scheme.
|
||||
|
||||
Notably the //actual meaning of such a buffer type// remains implementation-defined. The scheme to generate and refine metadata, which is part of the //Buffer Provider Protocol,// only serves to keep different usage patterns disjoint. When following this protocol, some //type// of buffer is qualified first, and materialised as Descriptor. This may include some additional qualification steps, like the definition of a //type handler//, with functions to initialise and de-initialise the storage within the buffer; furthermore, an implementation-defined {{{LocalTag}}} can be attached. Together, this leads to a tree of hierarchically related hash-IDs.
|
||||
|
||||
There is one crucial ''consistency criterion'' though: irrespective how a given usage arrives at some specific sub-type, there must be //only one single way// to transition into {{{LOCKED}}} state. The implementation //must ensure// that it is not possible to qualify different sub-types for //effectively the same storage location.// The high-level façade implementation „hooked behind“ the BufferProvider interface indeed fulfils this criterion: simply by requiring the client to present a Buffer Descriptor, that has been set-up and qualified in preceding steps. The implementation does not care //how// the client has obtained the type-ID embedded into the descriptor, but it provides //only one code path// to qualify any given type-ID with an actual //memory location//, so to obtain a //state-ID//, that can proceed through the stages of buffer lifecycle.
|
||||
|
||||
!state and metadata for individual buffers
|
||||
Beyond that, it can be necessary to associate at least a state flag with //individual buffers.// Doing so requires the buffer to be in //locked state,// otherwise it wouldn't be distinguishable as an separate entity (a client is able to access the buffer memory address only after "locking" this buffer). Especially when using a buffer provider in conjunction with an OutputSlot, these states and transitions are crucial for performing an orderly handover of generated data from the producer (render engine) to the consumer (external output sink).
|
||||
|
||||
__Note__: while the API to access this service is uniform, conceptually there is a difference between just using the (shared) type information and associating individual metadata, like the buffer state. Type-~IDs, once allocated, will never be discarded (within the lifetime of an Lumiera application instance -- buffer associations aren't persistent). To the contrary, individual metadata //will be discarded,// when releasing the corresponding buffer. According to the ''prototype pattern'', individual metadata is treated as a one-way-off specialisation.
|
||||
__Note__: while the API to access this service is uniform, conceptually there is a difference between just using the (shared) type information and associating individual metadata, like the buffer state. Type-~IDs, once allocated, will never be discarded (within the lifetime of an Lumiera application instance -- while buffer associations, and further individual metadata //will be discarded,// when releasing the corresponding buffer. According to the ''prototype pattern'', individual metadata is treated as a one-way-off specialisation.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="BufferProvider" modifier="Ichthyostega" created="201107082330" modified="202602150142" tags="Rendering spec draft" changecount="12">
|
||||
|
|
|
|||
|
|
@ -84479,7 +84479,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#a9276b" DESTINATION="ID_1837848811" ENDARROW="Default" ENDINCLINATION="26;-72;" ID="Arrow_ID_1346798150" STARTARROW="None" STARTINCLINATION="-562;35;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1714329419212" HGAP="28" ID="ID_739040055" MODIFIED="1714912937726" TEXT="auf welcher Ebene erfolgt das 1:N-Mapping?" VSHIFT="15">
|
||||
<linktarget COLOR="#aa3f74" DESTINATION="ID_739040055" ENDARROW="Default" ENDINCLINATION="-1316;83;" ID="Arrow_ID_238210700" SOURCE="ID_910049756" STARTARROW="None" STARTINCLINATION="1219;30;"/>
|
||||
<linktarget COLOR="#aa3f74" DESTINATION="ID_739040055" ENDARROW="Default" ENDINCLINATION="-1316;83;" ID="Arrow_ID_238210700" SOURCE="ID_910049756" STARTARROW="None" STARTINCLINATION="1245;47;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1714329453840" ID="ID_154403175" MODIFIED="1714329486612" TEXT="klar ist: 1 Feed ≙ N CalcStreams">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -85218,6 +85218,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#263bd0" DESTINATION="ID_1148074170" ENDARROW="Default" ENDINCLINATION="555;-1157;" ID="Arrow_ID_1408757425" STARTARROW="None" STARTINCLINATION="16;273;"/>
|
||||
<linktarget COLOR="#3c61b7" DESTINATION="ID_900623108" ENDARROW="Default" ENDINCLINATION="-475;-40;" ID="Arrow_ID_245920004" SOURCE="ID_267762321" STARTARROW="None" STARTINCLINATION="-218;8;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node COLOR="#2a6680" CREATED="1771181562474" ID="ID_84082154" MODIFIED="1771183598205" TEXT="wurde aus der ersten Prototyp-Implementierung heraus entworfen (2011/13)">
|
||||
<linktarget COLOR="#2b6b92" DESTINATION="ID_84082154" ENDARROW="Default" ENDINCLINATION="-422;17;" ID="Arrow_ID_598368066" SOURCE="ID_168023967" STARTARROW="None" STARTINCLINATION="2691;151;"/>
|
||||
<font NAME="SansSerif" SIZE="11"/>
|
||||
<icon BUILTIN="freemind_butterfly"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1721958694600" ID="ID_769985598" MODIFIED="1721958851624" TEXT="dokumentiert durch: nur BufferProviderProtocol_test">
|
||||
<arrowlink COLOR="#5387dc" DESTINATION="ID_1661035289" ENDARROW="Default" ENDINCLINATION="-1176;-93;" ID="Arrow_ID_1311080426" STARTARROW="None" STARTINCLINATION="-1176;64;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -85298,7 +85303,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#c65566" DESTINATION="ID_258322349" ENDARROW="Default" ENDINCLINATION="38;-195;" ID="Arrow_ID_1387680951" STARTARROW="None" STARTINCLINATION="225;9;"/>
|
||||
<arrowlink COLOR="#aa3f74" DESTINATION="ID_739040055" ENDARROW="Default" ENDINCLINATION="-1316;83;" ID="Arrow_ID_238210700" STARTARROW="None" STARTINCLINATION="1219;30;"/>
|
||||
<arrowlink COLOR="#aa3f74" DESTINATION="ID_739040055" ENDARROW="Default" ENDINCLINATION="-1316;83;" ID="Arrow_ID_238210700" STARTARROW="None" STARTINCLINATION="1245;47;"/>
|
||||
</node>
|
||||
<node CREATED="1714913499629" ID="ID_1170027604" MODIFIED="1714913540560" TEXT="Nodes mit mehreren Ausgängen sind unbestreitbar eine Möglichkeit">
|
||||
<node CREATED="1714913631281" ID="ID_1220650888" MODIFIED="1714914012803" TEXT="Ableitung oder Generierung mit Freiheitsgraden">
|
||||
|
|
@ -99379,9 +99384,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1771184395055" ID="ID_593967041" MODIFIED="1771184434311" TEXT="die Gefahr besteht in dem Moment, wo von einem Type-Key ein Entry mit State angelegt wird">
|
||||
<linktarget COLOR="#ae163a" DESTINATION="ID_593967041" ENDARROW="Default" ENDINCLINATION="27;97;" ID="Arrow_ID_558973560" SOURCE="ID_355848157" STARTARROW="None" STARTINCLINATION="132;5;"/>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1721957074061" ID="ID_1934276567" LINK="#ID_876959484" MODIFIED="1721958546357" TEXT="siehe BufferMetadata_test::verifyStandardCase()"/>
|
||||
<node COLOR="#435e98" CREATED="1721962300725" ID="ID_1284720886" MODIFIED="1721962403740" TEXT="Fazit">
|
||||
<node COLOR="#435e98" CREATED="1721962300725" ID="ID_1284720886" MODIFIED="1771183279152" TEXT="Fazit">
|
||||
<linktarget COLOR="#244ad5" DESTINATION="ID_1284720886" ENDARROW="Default" ENDINCLINATION="-1522;391;" ID="Arrow_ID_597904659" SOURCE="ID_54983367" STARTARROW="None" STARTINCLINATION="1182;40;"/>
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1721962307945" ID="ID_944887840" MODIFIED="1721962326774" TEXT="meine Analyse von 2013 war gründlich"/>
|
||||
|
|
@ -99406,6 +99416,18 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1771184290219" ID="ID_355848157" MODIFIED="1771184439974">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<b><u><font color="#660527">Konsistenz</font></u></b><u><font color="#660527">-Kriterium</font></u>: Weg zum State-Entry muß reproduzierbar/eindeutig sein
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#ae163a" DESTINATION="ID_593967041" ENDARROW="Default" ENDINCLINATION="27;97;" ID="Arrow_ID_558973560" STARTARROW="None" STARTINCLINATION="132;5;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#5b280f" CREATED="1721962419154" ID="ID_197438854" MODIFIED="1722470869273" TEXT="zu überlegen: wann im Lebenszyklus muß diese Info gegeben werden">
|
||||
|
|
@ -100072,6 +100094,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#80456c" CREATED="1765478451368" ID="ID_476569779" MODIFIED="1765478573873" TEXT="wie wäre sonst die Situation entstanden, einen Hash von einem Funktor nehmen zu „müssen“ ??">
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#8c00da" CREATED="1771178650022" ID="ID_496074077" MODIFIED="1771178938612" TEXT="es ist aber noch nicht klar in welchem Kontext diese Metadaten verankert sind">
|
||||
<linktarget COLOR="#fece63" DESTINATION="ID_496074077" ENDARROW="Default" ENDINCLINATION="7;22;" ID="Arrow_ID_1731746580" SOURCE="ID_89101518" STARTARROW="Default" STARTINCLINATION="37;3;"/>
|
||||
<font NAME="SansSerif" SIZE="11"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1731889562472" ID="ID_1782397614" MODIFIED="1731889575163" TEXT="welche Typ-Information wird benötigt?">
|
||||
|
|
@ -100079,6 +100105,17 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1731889584979" ID="ID_966020586" MODIFIED="1731889616225" TEXT="Fest steht: der Aufruf braucht passende Buffer (Allokation)">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e7c39a" COLOR="#74000b" CREATED="1771178453703" ID="ID_345513083" MODIFIED="1771178957939" TEXT="Vorläufige Fassung: wir müssen unterschiedliche TypeHandler unterscheiden können">
|
||||
<linktarget COLOR="#fe6636" DESTINATION="ID_345513083" ENDARROW="Default" ENDINCLINATION="-1626;55;" ID="Arrow_ID_1491353300" SOURCE="ID_993497441" STARTARROW="None" STARTINCLINATION="1146;36;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node COLOR="#170f97" CREATED="1771178718306" ID="ID_89101518" MODIFIED="1771178938612" TEXT="zumindest zur korrekten Verwendung">
|
||||
<arrowlink COLOR="#fece63" DESTINATION="ID_496074077" ENDARROW="Default" ENDINCLINATION="7;22;" ID="Arrow_ID_1731746580" STARTARROW="Default" STARTINCLINATION="37;3;"/>
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1771178893268" ID="ID_1881663423" MODIFIED="1771178913141" TEXT="im Builder könnte darüber hinaugehende Introspektion notwendig sein (oder nicht)">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731889618623" ID="ID_768812789" MODIFIED="1731889647842" TEXT="dieser Zusammenhang muß auf Builder-Level-3 geklärt werden">
|
||||
<icon BUILTIN="bell"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1731889660185" ID="ID_1751478781" MODIFIED="1731889709324" TEXT="irgendwo in dem Lib-Plugn gib es eine Assotiation">
|
||||
|
|
@ -110847,7 +110884,7 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
<node CREATED="1769303576693" ID="ID_623188672" MODIFIED="1769303591585" TEXT="die Zustandsübergänge der Metadaten wurden damals nicht richtig bedacht">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1769303593435" ID="ID_895728856" MODIFIED="1769303610989" TEXT="vermutlich ist das die Wurzel der Probleme mit den Buffer-Metadaten"/>
|
||||
<node CREATED="1769303611584" ID="ID_1319373371" MODIFIED="1769303665723" TEXT="hier ist aber der »Zustand« stärker an die Implementierung gebunden">
|
||||
<node CREATED="1769303611584" ID="ID_1319373371" MODIFIED="1771180036381" TEXT="hier ist aber der »Zustand« stärker an die Implementierung gebunden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -110867,6 +110904,48 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1771180015108" ID="ID_486118029" MODIFIED="1771180568442" TEXT="2026/1 : bin mir nicht sicher was eigentlich das Problem ist hier...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Im Zusammenhang mit der alten Implementierung bin ich immer wieder auf die BufferMetadata gestoßen, aber eigentlich nur insofern, als ich immer wieder hier „den Faden verloren“ habe. Das muß aber kein Problem der BufferMetadata sein, denn — für sich betrachtet sind sie offensichtlich und langweilig. Es gibt auch einen Test (der allerdings auch ziemlich feingranular ist, und vielleicht etwas mehr Fokus gebrauchen könnte).
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Nun habe ich die sonstige Implementierung so hablwegs in den Griff bekommen (oder besser: eine erste Bresche geschlagen, so daß ich mich dort verankern kann, und dann weiter bauen). Vielleicht war das Problem nur, daß die sonstige Implementierung mir entglitten war, und daher die BufferMetadata überall eingewoben wurden, und zwar per direktem Durchgrif auf ihr internes Verhalten. Es kann aber auch sein, daß das Konzept der BufferMetadata einfach nicht auf die Realität paßt — denn, ehrlich gesagt, Kontakt mit »der Realität« haben wir <i>immer noch nicht, auch nicht im Entfernstesten...</i>
|
||||
</p>
|
||||
<p>
|
||||
<font color="#b9015d" size="5">☹</font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#44296a" DESTINATION="ID_486118029" ENDARROW="Default" ENDINCLINATION="-233;10;" ID="Arrow_ID_488829725" SOURCE="ID_417601632" STARTARROW="None" STARTINCLINATION="243;17;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e4bdc4" CREATED="1771179820377" ID="ID_417601632" MODIFIED="1771183573049" TEXT="gemischte Gefühle bzg. BufferMetadata">
|
||||
<arrowlink COLOR="#65638b" DESTINATION="ID_1000193046" ENDARROW="Default" ENDINCLINATION="-762;0;" ID="Arrow_ID_1618702439" STARTARROW="None" STARTINCLINATION="707;49;"/>
|
||||
<arrowlink COLOR="#44296a" DESTINATION="ID_486118029" ENDARROW="Default" ENDINCLINATION="-233;10;" ID="Arrow_ID_488829725" STARTARROW="None" STARTINCLINATION="243;17;"/>
|
||||
<linktarget COLOR="#5c617e" DESTINATION="ID_417601632" ENDARROW="Default" ENDINCLINATION="-1000;61;" ID="Arrow_ID_993142525" SOURCE="ID_886897159" STARTARROW="None" STARTINCLINATION="-1410;73;"/>
|
||||
<icon BUILTIN="smiley-neutral"/>
|
||||
<node CREATED="1771180081878" HGAP="39" ID="ID_1672109973" MODIFIED="1771185691093" TEXT="eigentlich sieht die Implementierung OK aus..." VSHIFT="-27">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
sie ist etwas zerfasert, und sehr offen (was man aber nicht monieren kann) — letztlich aber überschaubar, konsistent durchgearbeitet und ohne offensichtliche <i>Taschenspieler-Tricks... </i>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
<i>Will sagen,</i> bin irgendwie noch nicht glücklich mit dem Stück Code, finde aber keine greifbaren Einwände; vielleicht müßte man nur die Hashtable-Implementierung nach Innen herausziehen, und dann die Formulierung nochmal stringent überarbeiten, und ein paar „auf Verdacht“ dazugebaute Hilfsprädikate zurückbauen?
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1769303977673" ID="ID_105336756" MODIFIED="1769306583888" TEXT="zu klären ist in welcher Weise ein OutputSlot ein BuffHandle braucht">
|
||||
|
|
@ -110883,7 +110962,7 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1769304142533" ID="ID_1886652999" MODIFIED="1769304259236" TEXT="außerdem hatte ich beim Design des Protokolls das Thema »Concurrency« übersehen">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1769304142533" ID="ID_1886652999" MODIFIED="1771179986963" TEXT="außerdem hatte ich beim Design des Protokolls das Thema »Concurrency« übersehen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -112346,6 +112425,7 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</html></richcontent>
|
||||
<arrowlink COLOR="#feded2" DESTINATION="ID_211253816" ENDARROW="Default" ENDINCLINATION="51;-168;" ID="Arrow_ID_1480603828" STARTARROW="None" STARTINCLINATION="-359;15;"/>
|
||||
<linktarget COLOR="#899097" DESTINATION="ID_608985526" ENDARROW="Default" ENDINCLINATION="81;-7;" ID="Arrow_ID_59002244" SOURCE="ID_765319520" STARTARROW="None" STARTINCLINATION="450;28;"/>
|
||||
<linktarget COLOR="#6385ac" DESTINATION="ID_608985526" ENDARROW="Default" ENDINCLINATION="1104;43;" ID="Arrow_ID_1542652809" SOURCE="ID_1525296815" STARTARROW="None" STARTINCLINATION="1067;41;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -112764,7 +112844,34 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1770590137705" ID="ID_775309144" MODIFIED="1770595373702" TEXT="Schritt-3 : auftrennen">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1770590149154" ID="ID_560066313" MODIFIED="1770590174661" TEXT="das verbleibende Buffer-Provider-Interface überprüfen"/>
|
||||
<node CREATED="1770590149154" ID="ID_560066313" MODIFIED="1770590174661" TEXT="das verbleibende Buffer-Provider-Interface überprüfen">
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1771187992449" ID="ID_879534010" MODIFIED="1771188056278" TEXT="die »zweite Säule« ebenfalls herauslösen">
|
||||
<linktarget COLOR="#fd4d3b" DESTINATION="ID_879534010" ENDARROW="Default" ENDINCLINATION="-1311;87;" ID="Arrow_ID_837039459" SOURCE="ID_1560791221" STARTARROW="None" STARTINCLINATION="198;-860;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1771188065991" ID="ID_414170063" MODIFIED="1771188084276" TEXT="den regulären Nutzungs-Zyklus auf Konsistenz durchdenken">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1771184206669" ID="ID_807907887" LINK="#ID_355848157" MODIFIED="1771188172054" TEXT="hab ich eigentlich bereits 2024 getan....">
|
||||
<arrowlink COLOR="#38768e" DESTINATION="ID_92190194" ENDARROW="Default" ENDINCLINATION="-1027;35;" ID="Arrow_ID_1107601109" STARTARROW="None" STARTINCLINATION="211;14;"/>
|
||||
</node>
|
||||
<node CREATED="1771188180430" ID="ID_1525296815" MODIFIED="1771188324498" TEXT="gut ist: habe jetzt die »alternativen« Nutzungsmuster bereits zurückgebaut">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
BuffHandle sit nun definitiv kein smart-Ptr mehr; damit fällt alles nachträgliche »andocken« und »verfeinern« weg.....
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#6385ac" DESTINATION="ID_608985526" ENDARROW="Default" ENDINCLINATION="1104;43;" ID="Arrow_ID_1542652809" STARTARROW="None" STARTINCLINATION="1067;41;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1771188353739" ID="ID_809940304" MODIFIED="1771188423612" TEXT="die bool-Checks / Test-Prädikate....">
|
||||
<arrowlink COLOR="#6b5f81" DESTINATION="ID_17538120" ENDARROW="Default" ENDINCLINATION="107;-147;" ID="Arrow_ID_196819766" STARTARROW="None" STARTINCLINATION="253;20;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1770590206837" ID="ID_933010628" MODIFIED="1770590228576" TEXT="den DiagnosticOutputSlot seitwärts abspalten">
|
||||
<node CREATED="1770686001136" ID="ID_936149730" MODIFIED="1770686019100" TEXT="der muß dann u.U auf den DiagnosticBufferProvider aufsetzen"/>
|
||||
<node CREATED="1770686020808" ID="ID_1229524958" MODIFIED="1770686029464" TEXT="oder sein Tracking selber implementieren"/>
|
||||
|
|
@ -112790,7 +112897,9 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#b7c4da" COLOR="#435e98" CREATED="1771012551876" HGAP="35" ID="ID_335656320" MODIFIED="1771012599378" TEXT="auch unterliegende Implementierung entfernt" VSHIFT="-1"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1770857874819" ID="ID_17538120" MODIFIED="1770859527690" TEXT="Test-Prädikate auf den Handles nachschärfen">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1770857874819" ID="ID_17538120" MODIFIED="1771188423612" TEXT="Test-Prädikate auf den Handles nachschärfen">
|
||||
<linktarget COLOR="#f03963" DESTINATION="ID_17538120" ENDARROW="Default" ENDINCLINATION="-605;990;" ID="Arrow_ID_600202029" SOURCE="ID_200153250" STARTARROW="None" STARTINCLINATION="-309;23;"/>
|
||||
<linktarget COLOR="#6b5f81" DESTINATION="ID_17538120" ENDARROW="Default" ENDINCLINATION="107;-147;" ID="Arrow_ID_196819766" SOURCE="ID_809940304" STARTARROW="None" STARTINCLINATION="253;20;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1770857900164" ID="ID_65421257" MODIFIED="1770857904935" TEXT="Buffer-Descriptor">
|
||||
<node CREATED="1770857906234" ID="ID_1594660218" MODIFIED="1770857923105" TEXT="bool ≙ isValid"/>
|
||||
|
|
@ -112973,11 +113082,201 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</node>
|
||||
</node>
|
||||
<node CREATED="1771118137345" ID="ID_315166171" MODIFIED="1771118153438" TEXT="bleibt zu lösen bei diesem Ansatz...">
|
||||
<node CREATED="1771118154825" ID="ID_1441684417" MODIFIED="1771118177093" TEXT="lookup mit unbekannter Hash-ID">
|
||||
<node COLOR="#338800" CREATED="1771118154825" ID="ID_1441684417" MODIFIED="1771177848090" TEXT="lookup mit unbekannter Hash-ID">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1771118178245" ID="ID_877974485" MODIFIED="1771118185152" TEXT="wirft bisher eine Exception"/>
|
||||
<node CREATED="1771118190407" ID="ID_1178898246" MODIFIED="1771118207348" TEXT="problematisch für Informations-Funktionen"/>
|
||||
<node CREATED="1771174971119" ID="ID_571954052" MODIFIED="1771175070270" TEXT="Verhalten in BufferMetadata zu ändern wäre riskant (aber möglich)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Man müßte dazu die Logik erschöpfend durchdenken; nach einem oberflächlichen Check wäre es durchaus möglich. Ich würde es aber trotzdem nicht machen, da es der zugrunde liegenden Logik widerspricht.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1771118235061" ID="ID_307563520" MODIFIED="1771118247998" TEXT="Mapping der Typ-Registrierung entsprechend ergänzen"/>
|
||||
<node COLOR="#338800" CREATED="1771174959802" ID="ID_47905633" MODIFIED="1771177839349" TEXT="kann ich im API-Mapping lösen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1771175081008" ID="ID_1748441958" MODIFIED="1771175116673" TEXT="man kann die Funktion medatata.isKnown(ID) nutzen"/>
|
||||
<node CREATED="1771175118028" ID="ID_1512731504" MODIFIED="1771175134151" TEXT="man kann zudem einen Key::forEntry(nullptr) jederzeit erzeugen"/>
|
||||
<node COLOR="#435e98" CREATED="1771175164757" ID="ID_109938334" MODIFIED="1771177835187" TEXT="man müßte diesen Key dann allerdings irgendwo vorhalten">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...da er als Referenz heraugegeben wird
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node COLOR="#5b280f" CREATED="1771176809675" ID="ID_741025772" MODIFIED="1771177697623" TEXT="statisch scheidet aus">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
....wegen der impliziten Abhängigkeit der Hashes von der Seed-ID; Knackpunkt ist: das geht über einen <i>reinen Typ-Ausdruck</i>  hinaus...
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#9901b9" CREATED="1771177595187" ID="ID_1402715106" MODIFIED="1771177827345" TEXT="Obwohl ⟶ statisch könnte gehen....">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
und zwar, weil bei einer reinen Typ-Registrierung der Parent-Key auch nur ein Platzhalter ist, also selber eine Art Null-Objekt. Wenn ich ehrlich bin, ist <i>das</i> der Grund für die Instanz-ID...
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1771176917030" ID="ID_1025575839" MODIFIED="1771176962418" TEXT="im Objekt ist nur hässlich, tut aber nicht weh">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
selbst für die PROD-Variante ist das bloß Engine-Infrastruktur und Engine-Init, hat also keinen Hebel
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1771118235061" ID="ID_307563520" MODIFIED="1771118247998" TEXT="Mapping der Typ-Registrierung entsprechend ergänzen">
|
||||
<node CREATED="1771178178261" ID="ID_66569162" MODIFIED="1771179037426" TEXT="hier kann man das API auf eine Funktion reduzieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
da wir uns im internen API-Mapping befinden, ist das hier angemessen; auf dem externen BufferProvier-API dagegen <i>müssen</i> die zwei Fälle als getrennte Funktionen stehen bleiben — denn die dahinter stehenden Use-Cases sind <i>grundverschieden</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1771180922440" ID="ID_1131997042" MODIFIED="1771180938455" TEXT="es kommt nur darauf an, den Key zu tracken"/>
|
||||
<node CREATED="1771180940256" ID="ID_868668870" MODIFIED="1771181021684" TEXT="das macht jeder Aufruf von BufferMetadata::key(..*..)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
nachgeprüft: sie führen alle letztlich zu trackKey(Key) — und mit den letzten Refactorings vor ein paar Jahren, passiert das jetzt auch in einer konsistenten Reihenfolge
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1771178191348" ID="ID_1000193046" MODIFIED="1771180615895" TEXT="denn TypeHandler::RAW wird in der Implementierung korrekt verstanden und behandelt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Stelle mit Erstaunen fest: der Kern der BufferMetadata-Implementierung ist eigentlich kompakt und übersichtlich
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#65638b" DESTINATION="ID_1000193046" ENDARROW="Default" ENDINCLINATION="-762;0;" ID="Arrow_ID_1618702439" SOURCE="ID_417601632" STARTARROW="None" STARTINCLINATION="707;49;"/>
|
||||
</node>
|
||||
<node CREATED="1771178218407" ID="ID_993497441" MODIFIED="1771178957937" TEXT="für den Key kommt es darauf an, die Implementierungs-Varianten zuverlässig zu unterscheiden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<i>Das</i> ist der Kern, worauf sich mutmaßlich die immer noch ungelösten Probleme mit der Type-Handler-Registrierung reduzieren lassen
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#fe6636" DESTINATION="ID_345513083" ENDARROW="Default" ENDINCLINATION="-1626;55;" ID="Arrow_ID_1491353300" STARTARROW="None" STARTINCLINATION="1146;36;"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1771179494648" ID="ID_1680308687" MODIFIED="1771187573319">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<u>Namensvorschlag</u>: defineBufferType (storageSiz, typeHandler)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1771184140448" ID="ID_1116588636" MODIFIED="1771184498183">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
<b>Einsichten</b> hier....
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1771184149567" ID="ID_547348773" MODIFIED="1771184172487" TEXT="es gibt ein Einstiegs-API und ein API zur Typ-Erweiterung"/>
|
||||
<node CREATED="1771184173436" ID="ID_28119569" MODIFIED="1771184186870" TEXT="in der aktuellen Implementierung gehen alle Aufrufe nur über das Einstiegs-API"/>
|
||||
<node CREATED="1771184206669" ID="ID_92190194" LINK="#ID_355848157" MODIFIED="1771188172054" TEXT="für Erweiterungen wurde 2024 ein Konsistenzkriterium aufgestellt">
|
||||
<linktarget COLOR="#38768e" DESTINATION="ID_92190194" ENDARROW="Default" ENDINCLINATION="-1027;35;" ID="Arrow_ID_1107601109" SOURCE="ID_807907887" STARTARROW="None" STARTINCLINATION="211;14;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#1d1863" CREATED="1771184519421" ID="ID_1073530137" MODIFIED="1771184627653" TEXT="derzeit ist das der einzige Weg, einen BuffDescr zu bekommen (gut so)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Dadurch ist das Konsistenz-Kriterium von 2024 erfüllt: denn nur mit einem Buffer-Descriptor können wir eine LOCK-Transition machen. An dem Punkt ist es dann egal, wie der Hash im BuffDescr zustande gekommen ist, wir halten uns einfach in dem Zweig des Typ-Baumes fest, in dem wir nun mal geandet sind....
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1771185797480" ID="ID_470195697" MODIFIED="1771185832497" TEXT="Oh Kacke! kann hier keine Referenz aufs API schreiben">
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
<node COLOR="#cd0a93" CREATED="1771185834616" ID="ID_236779315" MODIFIED="1771185896490" TEXT="was mich das wieder ankotzt!!!">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Jetzt hab ich gestern so endlos lange rumgedödelt mit den Typen, bloß damit das API einfach und schlank aussieht. Und jetzt sowas. Ach grausame Welt!
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
<node CREATED="1771185916566" ID="ID_1027075339" MODIFIED="1771186425158" TEXT="vielleicht kann ich mich ja aus der Affäre ziehen?">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...mit dem gleichen Argument, daß es der Optimiser schon richten wird? Vielleicht gitb es noch ein besseres, formales Argument um das zu rechtfertigen... (wiewohl meine Motivation hier ganz klar ist: ich will ein stimmiges API)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1771185967936" ID="ID_1975717001" MODIFIED="1771186432276">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Argument dafür: es <b>muß</b> an dieser Stelle intern auch was persistiert werden
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1771174242074" ID="ID_926200360" MODIFIED="1771174255852" TEXT="man könnte das separate release() durch ein Lambda los werden"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1771187666261" ID="ID_200153250" MODIFIED="1771187733513" TEXT="die Validitäts-Checks sind noch offen">
|
||||
<arrowlink COLOR="#f03963" DESTINATION="ID_17538120" ENDARROW="Default" ENDINCLINATION="-605;990;" ID="Arrow_ID_600202029" STARTARROW="None" STARTINCLINATION="-309;23;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1771187772375" ID="ID_1560791221" MODIFIED="1771188056278" TEXT="jetzt könnte die BufferStage-Impl bereits »nach unten gedrückt« werden">
|
||||
<arrowlink COLOR="#fd4d3b" DESTINATION="ID_879534010" ENDARROW="Default" ENDINCLINATION="-1311;87;" ID="Arrow_ID_837039459" STARTARROW="None" STARTINCLINATION="198;-860;"/>
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1771180748333" ID="ID_738177995" MODIFIED="1771180765150" TEXT="Fazit">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1771180751573" ID="ID_577853070" MODIFIED="1771180760077" TEXT="jetzt sieht die Sache schon klarer aus?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -113087,6 +113386,10 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1771180678142" ID="ID_560454050" MODIFIED="1771180695692" TEXT="ist jetzt vielleicht gar nicht mehr notwendig?">
|
||||
<font NAME="SansSerif" SIZE="11"/>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1770414314373" ID="ID_864311296" MODIFIED="1770414338896" TEXT="aber es stellt sich die Frage: wo wird das asynchrone Messaging eingeschleift?">
|
||||
<icon BUILTIN="help"/>
|
||||
|
|
@ -132627,6 +132930,33 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
<linktarget COLOR="#263bd0" DESTINATION="ID_1148074170" ENDARROW="Default" ENDINCLINATION="555;-1157;" ID="Arrow_ID_1408757425" SOURCE="ID_900623108" STARTARROW="None" STARTINCLINATION="16;273;"/>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1771181363395" ID="ID_31918987" MODIFIED="1771181686905" TEXT="BufferMetadata wurde schrittweise ausgereift">
|
||||
<node CREATED="1771181708405" ID="ID_168023967" LINK="https://git.lumiera.org/gitweb?p=LUMIERA;a=shortlog;h=7ba8ff432" MODIFIED="1771184097393" TEXT="2011 : aus Prototyping für den Player entstanden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Dieses Prototyping war ein zweiter (letztlich ebenfalls nicht erfolgreicher) Anlauf, um zum »Kern von Lumiera« vorzudringen. Ein erster, systematisch-planender Anlauf über die Typen im High-Level-Model war vorher bereits im Ungreifbaren versandet.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#2b6b92" DESTINATION="ID_84082154" ENDARROW="Default" ENDINCLINATION="-422;17;" ID="Arrow_ID_598368066" STARTARROW="None" STARTINCLINATION="2691;151;"/>
|
||||
</node>
|
||||
<node CREATED="1771181396918" ID="ID_54983367" LINK="https://git.lumiera.org/gitweb?p=LUMIERA;a=shortlog;h=9a23aa773b93b0be8a3d85437f5f267d405bd87c" MODIFIED="1771184024039" TEXT="2024 : Überprüfung und Nachschärfung der Konsistenz (⟹ LocalTag verallgemeinert)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
habe seinerzeit die erkennbaren Abläufe insgesamt durchdacht, mit Fokus auf eine Typ-Registrierungs-Hierarchie (als Chained-Hash-Tree gedacht). Meine Schlußfolgerung war, daß man das System <i>»offen« lassen kann</i> — unter einer entscheidenden <b>Konsistenz-Bedingung</b>: der Zugangs-Pfad, der dann zu einer konkreten Buffer-Registrierung führt, muß <i>eindeutig</i> und <i>deterministisch</i> sein. Denn sonst besteht die Gefahr, daß zwei konkurrierende Verwendungen jeweils verschiedene State-Entries schaffen für exakt die gleiche Speicher-Adresse. In der seinerzeit (und auch 2026 noch) bestehenden Implementierung kann das nicht passieren, weil der State-Entry mit einer LOCK-Transition erzeugt wird, und diese setzt explizit auf einem bestehenden Type-Key auf, ohne an der Stelle weitere Qualifizierungen vorzunehmen. Ich halte es für wichtig, <i>diesen Gefahrenpunkt zu notieren.</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#244ad5" DESTINATION="ID_1284720886" ENDARROW="Default" ENDINCLINATION="-1522;391;" ID="Arrow_ID_597904659" STARTARROW="None" STARTINCLINATION="1182;40;"/>
|
||||
</node>
|
||||
<node CREATED="1771183400259" ID="ID_886897159" MODIFIED="1771183644696" TEXT="2026 : Konsolidierung BufferProvider-Implementierung">
|
||||
<arrowlink COLOR="#5c617e" DESTINATION="ID_417601632" ENDARROW="Default" ENDINCLINATION="-1000;61;" ID="Arrow_ID_993142525" STARTARROW="None" STARTINCLINATION="-1410;73;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1769303576693" ID="ID_399072135" MODIFIED="1770828085997" TEXT="die Implementierung ist nicht ausreichend auf Zustandsübergänge zentriert">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue