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:
Fischlurch 2023-10-22 00:55:56 +02:00
parent d67c62b02f
commit ccf970eaee
2 changed files with 74 additions and 44 deletions

View file

@ -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)
{

View file

@ -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>&#187;Invocable&#171; </i>eine Signatur abgreifen
@ -57355,9 +57353,7 @@
<node CREATED="1697905716970" ID="ID_1853665060" MODIFIED="1697905729917" TEXT="unterst&#xfc;tzt bisher nur Function-Member-Pointer"/>
<node CREATED="1697905731145" ID="ID_1467529623" MODIFIED="1697906017054" TEXT="die Erweiterung erscheint mir relativ ungef&#xe4;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&#223; man noch einen decltype() darum wickeln. M&#246;gliche Probleme:
@ -57382,9 +57378,7 @@
<node CREATED="1697906663564" ID="ID_1606991462" MODIFIED="1697906676958" TEXT="aber an einer Stelle, an der man einen Funktor &#xfc;bergibt"/>
<node CREATED="1697906678426" ID="ID_1127757601" MODIFIED="1697906784367" TEXT="ein blanken Member-Pointer macht an dieser Stelle &#xfc;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&#246;sen, wenn der gegebene Typ &#252;berhaupt nicht Funktions-artig ist (&#10233; denn dann ist die Aussage trivialer Weise wiederlegt; was gar keine Signatur hat, kann auch nicht eine bestimmte Signatur haben). Realisieren kann man das &#252;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:&#160;&#160;&#160;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="&#x3bb;-post">
<node CREATED="1690736737684" ID="ID_1359419273" MODIFIED="1692293968492" TEXT="(Time, Activity, ExecutionCtx) activity::Proc &#x27fc; activity::Proc"/>
<node CREATED="1690736737684" FOLDED="true" ID="ID_1359419273" MODIFIED="1697930193115" TEXT="(Time, Activity, ExecutionCtx) &#x27fc; 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 &#955;-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&#xfc;r Funktor / Stub-Implementierung">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
wenn man n&#228;mlich als Funktor oder statische Funktion implementiert, bekommt man kein &quot;this&quot; in die Hand
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1697929988337" ID="ID_1148794257" MODIFIED="1697930062682" TEXT="und sie entspricht auch dem durchg&#xe4;ngigen Aufruf-Schema"/>
<node CREATED="1697930064006" ID="ID_396076619" MODIFIED="1697930065506" TEXT="&#x3bb;-post &#x27f6; ActivityLang::dispatchChain(Activity*, ExecutionCtx)"/>
</node>
</node>
</node>
<node CREATED="1690069365933" ID="ID_1190433817" MODIFIED="1690735578970" TEXT="&#x3bb;-work">
<node CREATED="1690740582313" ID="ID_1898791811" MODIFIED="1690740723196" TEXT="(Time, quality)"/>
@ -80404,9 +80423,7 @@ Date:&#160;&#160;&#160;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:&#160;&#160;&#160;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&#xe4;ngt von der Art des Members ab">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<ul>
<li>
@ -80432,8 +80447,7 @@ Date:&#160;&#160;&#160;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&#xe4;re f&#xfc;r alle drei F&#xe4;lle valide">
<icon BUILTIN="idea"/>
@ -80454,9 +80468,7 @@ Date:&#160;&#160;&#160;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>&#955;-post</b>&#160;ist im Grunde
@ -80467,9 +80479,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...n&#228;mlich die F&#228;higkeit, einen Activity-chain zu einem geplanten Zeitpunkt oder auf Signal hin auszuf&#252;hren &#8212; und diese F&#228;higkeit mu&#223; selbstverst&#228;ndlich der Sprache selber zu Gebote stehen, damit sie komplexe Aktionsmuster flexibel ausdr&#252;cken kann
@ -80587,12 +80597,12 @@ Date:&#160;&#160;&#160;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:&#160;&#160;&#160;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:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="forward"/>
<node CREATED="1697844618383" ID="ID_988917685" MODIFIED="1697844647556" TEXT="f&#xfc;r den Test wurde der stets nur gemockt">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
es gen&#252;gte, an diesen Stellen die Ausf&#252;hrung der abstrahierten Aktionen zu loggen
@ -82030,9 +82039,7 @@ Date:&#160;&#160;&#160;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>
&#10233; <i>der Scheduler selber</i>&#160;kann diese Rolle <b>generisch</b>&#160;&#252;bernehmen
@ -82042,9 +82049,7 @@ Date:&#160;&#160;&#160;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:&#160;&#160;&#160;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 &#x3bb;-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&#xfc;r Tests / Mocking">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...speziell wenn man &#955;-post als Funktor implementiert, bekommt man keinen <font face="Monospaced">this*</font>
</p>
<p>
...entspricht au&#223;erdem dem generellen Schema, nach dem alle &#187;downstream&#171; ben&#246;tigten Argumente durch die ganze Kette m&#246;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:&#160;&#160;&#160;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&#xe4;ngigkeits-Struktur"/>
<node CREATED="1690492556024" ID="ID_1073489318" MODIFIED="1690494850606" TEXT="aber delegiert externe Effekte &#xfc;ber ein &#x3bb;-Binding">
<node CREATED="1690492556024" ID="ID_1073489318" MODIFIED="1697929464087" TEXT="aber delegiert externe Effekte &#xfc;ber ein &#x3bb;-Binding">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -87015,6 +87040,7 @@ Date:&#160;&#160;&#160;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"/>