Josef Templ wrote:Dmitry Dagaev wrote:Josef Templ wrote:
It is easy to construct perfectly meaningful applications that cannot be implemented with Co_.
Can you, please, show any example?
What about nested iterators, for example.
If an iterator A is implemented as a coroutine and that coroutine uses
another iterator B that is also implemented as a coroutine, then
B has to transfer control to A, not to main.
- Josef
Quite simple: main calls B, B calls A for increment value.
Result is: 0 1 2 ... 10 20 30 ... 110 210 310 ...
Code: Select all
TYPE
Ait = POINTER TO AitDesc;
AitDesc = RECORD (Co.CoroutineDesc)
v: INTEGER;
END;
Bit = POINTER TO BitDesc;
BitDesc = RECORD (Co.CoroutineDesc)
a: Ait;
v: INTEGER;
END;
PROCEDURE (a: Ait) Do;
BEGIN
a.v := 1; Co.Yield;
a.v := 10; Co.Yield;
a.v := 100; Co.Stop;
END Do;
PROCEDURE (b: Bit) Do;
VAR j, k: INTEGER;
BEGIN
FOR j := 0 TO 2 DO
b.a.Transfer;
FOR k := 0 TO 9 DO
Co.Yield;
INC(b.v, b.a.v);
END
END;
Co.Stop;
END Do;
PROCEDURE Run*;
VAR b: Bit;
BEGIN
NEW(b); b.Start;
NEW(b.a); b.a.Start;
WHILE ~b.eor DO
b.Transfer;
Log.String("Val="); Log.Int(b.v); Log.Ln
END;
Log.String("End");Log.Ln;
END Run;
For new Kernel:
StdCoder.Decode ..,, ..BS....3QwdONl9RhOO9vRbf9b8R7fJHPNGomCrlAyIhgs,CbKBhZ
xi2,CoruKu4qouqm8rtuGfa4.hOO9vRb1Y66wb8RTfQ9vQRtIdvPZHWKqtCa.E.U5UOw.2U.Qk
lbeZ3DPuP7PNNvQRtId9NPuP7X2hgnRAXDJ.QCPuP7PNG2sET1.PuP.MHT9N9nt.G2sIdvPZnt
gcghghZcZRC8T0E.kpH.T.5D,2U..hP.cU.ktAcoZimBhWhiohgnZcZRC.,.D,,6.IX.U.U,U.
I3l6w1.0E65.21AU0Ky8.,UkU.US.,.16.MEZPO19PWFs5U,UE0,cFE,E,8Mtf.0E.s8E.c5E.
k.U,,U.E.07c43U1IkmL,6.o66.o16.M.kU..0ES9.Y.IUx0Z.3s.E.E2PP,2eHJ.3Qw7ONhvE
TPPPPMR9N9fQbf9b8RO3U.Ay2hgq,.RdJ.0EtD.2..c,6.,k8E5E,G.yzayIWKJaKIECorypb8
KwGpvyqYGrm8bvgVB2ZeIZUgV7QgjphoJidJAyKtCr2qHE8GWqqoGLtaLEOJLGokSqkKKv8m4a
EqaqlKKrCrm0mS0GF0pu8Kqaql0GWyqq4qouKFqEJemIqk2qk2aoa0pb8Je0mVyKEenS0mVyaG
xhpZidphZRig2YAxhbRbBAVBAVIBfEhcBAV7AcdZiUgbU2eDBdCZe3JeUYeD3Y,BhoZcZRiXl2
akU6F66v76ZOF5uHZ8F,785uPRtETfQTPRd17ONAZBAV7AVqJbUAdCZe3xc3JevgV7AV3pd2Rb
BAV7gV7cEH9R,ND.83IcdZi2hAi18270,,...UdU7Agu2Y,BhoRbBA,HcR.D0MF.PM1H6IZuH5
OF7OJZOF,781fC,NEAZUYcjRbBAV0hc5BdChV7AVVpZq3YugbUAav2Y1xhiAfdhggZgvg,44Uk
QbUQcj,..6Ar765WHZij3ivgV7gcC767uPrVB6I.EleHE8ooGrI00M0hOEZ86J99,tOp76HeH.
I6.BuHZ86J96pND0HEGpb0GN0GWyo4ak2aElumkuGe8rkuqtOqm8rRqk2aU4Vf3Yug5Ut2Y2xd
BU7QcjpZN,M0akYuoVWGluGvmGE8KL4KLOrIin4ak2g6qk2akWsCsEQ8U3FE.PEc.EdKLremRq
k2o8Igu22QbBcE.uoWSJI8qIiHE8KLCJu4KtGrRqk2aEbUiAgdQbUIA1f9b8R11sJFOGNOF,dT
3f99vPZ967uHM03He8rk.UAxhbpZHZimBhixgcIYKBgghbWAZv2YAxhbpZ7pho3ZWpZqBZv226
HRP1HM09WvUAVH,MFR9N3N8r7HTvNR7Hin4akW66ZORRvCPM0PMFR8FCorypb.UigVBIU1xhTx
7.EdKLr8ssHpmsETfPdnrmKqKKtCbH7N58RZ9P7ONbH.4Te..c95uPR9R.7ONbvM,kVkk.Um,.
.Unp3.6F6.ZD,6.636.M00U.2..AU0CyIhA8pumqm8rtumdcIf9PY62Ulb8.CLL8ZghA70,cw5
.0.L3D.53,6.C6.QiiQ8CJuaLqKKWKqt2Ul1.RVtZBE.8T2E..2,I92U.E,,.RNEd1MNG20U2U
...G00k.0.0.0mFf32UlSw,sbTX,U,U.2.8Mtf.2..c4,.,.1.e0.,6Y1.0..bb,...
--- end of encoding ---