Scheduler: clarify redundant λ-post param
The signature for the »post« operation includes the ExecutionCtx itself, which is obviously redundant, given that this operation is ''part of this context.'' However, for mock-implementation of the ExecutionCtx for unit testing, the form of the implementation was deliberately kept unspecified, allowing to use functor objects, which can be instrumented later. Yet a functor stored as member has typically no access to the "this"-ptr...
This commit is contained in:
parent
d67c62b02f
commit
ccf970eaee
2 changed files with 74 additions and 44 deletions
|
|
@ -194,7 +194,11 @@ namespace gear {
|
|||
|
||||
/* ==== Implementation of the Concept ExecutionCtx ==== */
|
||||
|
||||
/** λ-post: */
|
||||
/**
|
||||
* λ-post: enqueue for time-bound execution, possibly dispatch immediately.
|
||||
* This is the »main entrance« to get some Activity scheduled.
|
||||
* @remark the \a ctx argument is redundant (helpful for test/mocking)
|
||||
*/
|
||||
activity::Proc
|
||||
post (Time when, Activity& chain, ExecutionCtx& ctx)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -57327,9 +57327,7 @@
|
|||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1697906147625" ID="ID_940224255" MODIFIED="1697906184451">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
damit kann man von jedem <i>»Invocable« </i>eine Signatur abgreifen
|
||||
|
|
@ -57355,9 +57353,7 @@
|
|||
<node CREATED="1697905716970" ID="ID_1853665060" MODIFIED="1697905729917" TEXT="unterstützt bisher nur Function-Member-Pointer"/>
|
||||
<node CREATED="1697905731145" ID="ID_1467529623" MODIFIED="1697906017054" TEXT="die Erweiterung erscheint mir relativ ungefährlich">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...denn man verwendet diese Metafunktion ja stets explizit mit einem gegebenen Typ, und im Falle eines Ausdrucks muß man noch einen decltype() darum wickeln. Mögliche Probleme:
|
||||
|
|
@ -57382,9 +57378,7 @@
|
|||
<node CREATED="1697906663564" ID="ID_1606991462" MODIFIED="1697906676958" TEXT="aber an einer Stelle, an der man einen Funktor übergibt"/>
|
||||
<node CREATED="1697906678426" ID="ID_1127757601" MODIFIED="1697906784367" TEXT="ein blanken Member-Pointer macht an dieser Stelle überhaupt keinen Sinn">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Beispiel: explore(elements).transform(....irgendwas....)
|
||||
|
|
@ -57411,9 +57405,7 @@
|
|||
</node>
|
||||
<node CREATED="1697925795562" ID="ID_340665610" MODIFIED="1697925947597" TEXT="und catch-all-Specialisation">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
has_Sig sollte keine Compile-Fehler auslösen, wenn der gegebene Typ überhaupt nicht Funktions-artig ist (⟹ denn dann ist die Aussage trivialer Weise wiederlegt; was gar keine Signatur hat, kann auch nicht eine bestimmte Signatur haben). Realisieren kann man das über den bool-Check, den ich vor einiger Zeit bereits in lib::meta::_Fun eingebaut habe (im Zusammenhang mit IterExplorer)
|
||||
|
|
@ -57423,9 +57415,7 @@
|
|||
</node>
|
||||
<node CREATED="1697925949821" ID="ID_1361817287" MODIFIED="1697926000759" TEXT="dann auch gleich noch ein spezielles ASSERT-Macro bereitstellen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Warum Macro? damit man per STRINGIFY() einen lesbareren Hinweis in die Static-Assertion bekommt
|
||||
|
|
@ -80375,7 +80365,36 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#e3fddf" DESTINATION="ID_229335349" ENDARROW="Default" ENDINCLINATION="46;-190;" ID="Arrow_ID_382638651" STARTARROW="None" STARTINCLINATION="-301;39;"/>
|
||||
<linktarget COLOR="#dae9fa" DESTINATION="ID_1532008023" ENDARROW="Default" ENDINCLINATION="-184;505;" ID="Arrow_ID_61418953" SOURCE="ID_1073489318" STARTARROW="None" STARTINCLINATION="630;34;"/>
|
||||
<node CREATED="1690069222750" ID="ID_276634248" MODIFIED="1690494867733" TEXT="λ-post">
|
||||
<node CREATED="1690736737684" ID="ID_1359419273" MODIFIED="1692293968492" TEXT="(Time, Activity, ExecutionCtx) activity::Proc ⟼ activity::Proc"/>
|
||||
<node CREATED="1690736737684" FOLDED="true" ID="ID_1359419273" MODIFIED="1697930193115" TEXT="(Time, Activity, ExecutionCtx) ⟼ activity::Proc">
|
||||
<node COLOR="#435e98" CREATED="1697929874025" ID="ID_1875907326" MODIFIED="1697930180261" TEXT="warum hier der ExecutionCtx (nochmal) als Argument?">
|
||||
<linktarget COLOR="#87a6b3" DESTINATION="ID_1875907326" ENDARROW="Default" ENDINCLINATION="543;939;" ID="Arrow_ID_1742040512" SOURCE="ID_1585090015" STARTARROW="None" STARTINCLINATION="271;21;"/>
|
||||
<font NAME="SansSerif" SIZE="11"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1697929919930" ID="ID_423839978" MODIFIED="1697929930037" TEXT="formal logisch ist das redundant"/>
|
||||
<node CREATED="1697929930647" ID="ID_2003851" MODIFIED="1697929960173">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
weil ja λ-post <i>selbst im </i>ExecutionCtx sitzt
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1697929961772" ID="ID_976407311" MODIFIED="1697930098296" TEXT="die Redundanz ist aber praktisch für Funktor / Stub-Implementierung">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
wenn man nämlich als Funktor oder statische Funktion implementiert, bekommt man kein "this" in die Hand
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1697929988337" ID="ID_1148794257" MODIFIED="1697930062682" TEXT="und sie entspricht auch dem durchgängigen Aufruf-Schema"/>
|
||||
<node CREATED="1697930064006" ID="ID_396076619" MODIFIED="1697930065506" TEXT="λ-post ⟶ ActivityLang::dispatchChain(Activity*, ExecutionCtx)"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1690069365933" ID="ID_1190433817" MODIFIED="1690735578970" TEXT="λ-work">
|
||||
<node CREATED="1690740582313" ID="ID_1898791811" MODIFIED="1690740723196" TEXT="(Time, quality)"/>
|
||||
|
|
@ -80404,9 +80423,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1697849570913" ID="ID_155562107" MODIFIED="1697849610947" TEXT="ging gut solange ich stets Functor-Objekte verwendet hatte">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...also solange ich nur mit Unit-Tests gearbeitet habe
|
||||
|
|
@ -80416,9 +80433,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697901649263" ID="ID_1005179743" MODIFIED="1697902145753" TEXT="der Zugriff auf den Typ hängt von der Art des Members ab">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
@ -80432,8 +80447,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1697902156764" ID="ID_1064629278" MODIFIED="1697902191903" TEXT="die Syntax Address-of-scope-qualfied-Member wäre für alle drei Fälle valide">
|
||||
<icon BUILTIN="idea"/>
|
||||
|
|
@ -80454,9 +80468,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1697844230190" ID="ID_1228967510" MODIFIED="1697844240670" TEXT="(mal abgesehen vom JobFunctor)"/>
|
||||
<node CREATED="1697844259176" ID="ID_142974884" MODIFIED="1697844537005">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
im Besonderen <b>λ-post</b> ist im Grunde
|
||||
|
|
@ -80467,9 +80479,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...nämlich die Fähigkeit, einen Activity-chain zu einem geplanten Zeitpunkt oder auf Signal hin auszuführen — und diese Fähigkeit muß selbstverständlich der Sprache selber zu Gebote stehen, damit sie komplexe Aktionsmuster flexibel ausdrücken kann
|
||||
|
|
@ -80587,12 +80597,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1693345602461" ID="ID_996451340" MODIFIED="1693345626237" TEXT="Dispatch">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node COLOR="#338800" CREATED="1693345602461" ID="ID_996451340" MODIFIED="1697929501959" TEXT="Dispatch">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1693345606503" ID="ID_1448505632" MODIFIED="1693345622980" TEXT="realisiert im Scheduler-Commutator (Layer-2)">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1693345633335" ID="ID_184362197" MODIFIED="1693345658139">
|
||||
<node COLOR="#435e98" CREATED="1693345633335" ID="ID_184362197" MODIFIED="1697929504081">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -81947,6 +81957,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1693171997528" ID="ID_862845398" MODIFIED="1693172169618" TEXT="Komponenten aufbauen">
|
||||
<arrowlink COLOR="#678999" DESTINATION="ID_1753236898" ENDARROW="Default" ENDINCLINATION="-719;-67;" ID="Arrow_ID_197736729" STARTARROW="None" STARTINCLINATION="-295;159;"/>
|
||||
<linktarget COLOR="#87584c" DESTINATION="ID_862845398" ENDARROW="Default" ENDINCLINATION="-1041;0;" ID="Arrow_ID_735728098" SOURCE="ID_204159198" STARTARROW="None" STARTINCLINATION="-238;-282;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1693172095351" ID="ID_605062962" MODIFIED="1697675312416" TEXT="Scheduler">
|
||||
|
|
@ -82011,9 +82022,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1697844618383" ID="ID_988917685" MODIFIED="1697844647556" TEXT="für den Test wurde der stets nur gemockt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
es genügte, an diesen Stellen die Ausführung der abstrahierten Aktionen zu loggen
|
||||
|
|
@ -82030,9 +82039,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697844763748" ID="ID_1789360174" MODIFIED="1697845607548">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
⟹ <i>der Scheduler selber</i> kann diese Rolle <b>generisch</b> übernehmen
|
||||
|
|
@ -82042,9 +82049,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697845608675" ID="ID_610860781" MODIFIED="1697845760326" TEXT="noch sauberer: ein Sub-Interface-Mapping">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
@ -82064,6 +82069,26 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1697929209697" FOLDED="true" ID="ID_862130924" MODIFIED="1697930318294" TEXT="wozu braucht λ-post den ExecutionCtx(parameter)?">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1697929254691" ID="ID_315183275" MODIFIED="1697929265630" TEXT="nebenbei aufgefallen bei der Implementierung">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1697930128320" ID="ID_1585090015" MODIFIED="1697930307837" TEXT="Antwort: ist hilfreich für Tests / Mocking">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...speziell wenn man λ-post als Funktor implementiert, bekommt man keinen <font face="Monospaced">this*</font>
|
||||
</p>
|
||||
<p>
|
||||
...entspricht außerdem dem generellen Schema, nach dem alle »downstream« benötigten Argumente durch die ganze Kette möglichst in gleicher Reihenfolge durchgegeben werden.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#87a6b3" DESTINATION="ID_1875907326" ENDARROW="Default" ENDINCLINATION="543;939;" ID="Arrow_ID_1742040512" STARTARROW="None" STARTINCLINATION="271;21;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697763699242" ID="ID_272943268" MODIFIED="1697763810547" TEXT="EngineObserver-Schnittstelle">
|
||||
|
|
@ -85879,7 +85904,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1687788659433" ID="ID_1507624704" MODIFIED="1687788784350" TEXT="es werden Satz-artige Terme ausgewertet">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1690492542473" ID="ID_508740677" MODIFIED="1690492555436" TEXT="die Auswertung implementiert direkt die Abhängigkeits-Struktur"/>
|
||||
<node CREATED="1690492556024" ID="ID_1073489318" MODIFIED="1690494850606" TEXT="aber delegiert externe Effekte über ein λ-Binding">
|
||||
<node CREATED="1690492556024" ID="ID_1073489318" MODIFIED="1697929464087" TEXT="aber delegiert externe Effekte über ein λ-Binding">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
|
|
@ -87015,6 +87040,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688336835085" ID="ID_1753236898" MODIFIED="1697732777759" TEXT="SchedulerService_test">
|
||||
<linktarget COLOR="#678999" DESTINATION="ID_1753236898" ENDARROW="Default" ENDINCLINATION="-719;-67;" ID="Arrow_ID_197736729" SOURCE="ID_862845398" STARTARROW="None" STARTINCLINATION="-295;159;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1688337200875" ID="ID_1269476607" MODIFIED="1697732840741" TEXT="Scheduler Component Integration End-to-End">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue