Thread fails to start

Adam Conner-Sax adam_conner_sax at yahoo.com
Sun Jan 2 08:28:32 PST 2011


== Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
> On 01/01/2011 06:02 PM, Adam Conner-Sax wrote:
> > As a way to learn D, I am writing a quick test setup for examining different
> > ways of passing data from one set of threads to another.  I am trying a few
> > kinds of queues (resizeable array with locking, linked list with locking and
> > lockfree with cas) and trying to also add message passing and then compare
> > performance.
> >
> > Anyway, I'm running into an odd case where a thread fails to start.  The code
> > simply hangs in the Threadgroup.create(...) call. I am printing (with
> > unbuffered i/o) right before the call to "create" and then as soon as the
> > threadfunction starts so as far as I can tell, the "create" call is made but
> > the threadfunc never starts and "create" never returns.
> >
> > It's repeatable but doesn't happen every time the queue is used. It happens
> > sometimes when the queue is locking and sometimes when it is lockfree. I'd be
> > happy to post code but for now I thought I'd just see if anyone can think of
> > why that might happen or can provide some ideas for how to debug it.
> >
> > The code always starts the one consumer thread (via spawn. I'm learning!),
> > then loops over the producers and creates them in a threadgroup just so I can
> > do a "joinAll" to wait for them to finish.  Also, when the problem occurs,
> > it's always the first producer thread that fails.  I never get 2 out of 4
> > started, e.g.
> >
> > I am truly enjoying learning D.  Coming from a C++ and C# background, it's a
> > pleasure.
> >
> > Any ideas would be appreciated.
> >
> > Thanks!
> >
> > Adam
> Welcome. I suggest you post some code to serve as a basis for suggestions.
> Andrei

Okay, thanks. Was trying to avoid subjecting  you all to my naive first try code...

 alias void delegate(in Data_Packet d) sender;

 void produce(sender send, Random r, int packets, int packets_per_s, int
us_variability)
  {
    debug { printf("in produce(...)\n"); }
    int packet_spacing = 10000000/packets_per_s; //units are 100ns
    // make sure we can't have -tve sleep
    int packet_variability = min(10*us_variability,packet_spacing+1);

    packets--; // one extra produced after loop with signal to end
    int counter = 0;
    while (counter++ < packets)  {
      Data_Packet data;
      data.pTime = systime();
      debug (5) { printf("Sending t=%i\n",data.pTime.value); }
      debug (3) { printf("S"); }
      send(data);
      Thread.sleep(packet_spacing +
uniform(-packet_variability,packet_variability,r));
    }
    Data_Packet data;
    data.last = true;
    data.pTime = systime();
    send(data);
  }


for (int k=0; k<num_producers_; ++k)  {
  debug { printf("creating & starting producer\n"); }
	  producer_threads[k] =
	   producerThreads.create({produce(delegate void(in Data_Packet d) { q.produce(d); },
					gen,packets_per_producer_,pps,microsecond_variability_);});

	debug { printf("started.\n"); }
	}


So, in the normal case, I get matched "creating & starting..." and "started" and
"in produce()"

In the case where it hangs, all I get is "Creating and starting..." and then it
stays forever (or as long as I have patience to leave it).

Full source attached

begin 644 Queue.d
M:6UP;W)T('-T9"YC+G-T9&EO.PT*:6UP;W)T(&-O<F4N871O;6EC.PT*:6UP
M;W)T('-T9"YC;VYC=7)R96YC>3L-"@T*+R\@9FER<W0@=&%K92P@=7-E9"!L
M:6YK960@;&ES=`T*+R\@;6%Y8F4 at 9V5N97)A;&EZ92!M96UO<GD@;6]D96P-
M"@T*=&5M<&QA=&4 at 475E=65?5'EP97,@*%0I#0I[#0H@(&-L87-S($YO9&4@
M#0H@('L-"B`@("!T:&ES*"D@>WT-"B`@("!T:&ES*%0@=F%L*2`-"B`@("![
M#0H@("`@("!V86QU92`]('9A;#L-"B`@("`@(&YE>'0@/2!N=6QL.PT*("`@
M('T-"B`@("!4('9A;'5E.PT*("`@($YO9&4@;F5X=#L-"B`@?0T*("`-"B`@
M#0H@(&EN=&5R9F%C92!1=65U92`-"B`@>PT*("`@('9O:60@<F5S970H*3L-
M"B`@("!V;VED('!R;V1U8V4H:6X at 5"!T*3L-"B`@("!B;V]L(&-O;G-U;64H
M;W5T(%0@="D[#0H@("`@<W1R:6YG(&YA;64H*3L-"B`@("!S=')I;F<@9&5S
M8W)I<'1I;VXH*3L-"B`@?0T*#0H@(&EN=&5R9F%C92!-97-S86=E7U!A<W-I
M;F=?475E=64 at .B!1=65U90T*("![#0H@("`@=F]I9"!S971?8V]N<W5M97)?
M5&ED*%1I9"!T*3L-"B`@?0T*("`-"B`@8VQA<W, at 1DE&3U],:6YK961,:7-T
M7TQO8VMI;F=?475E=64 at .B!1=65U90T*("![#0H@('!R:79A=&4Z#0H@("`@
M3F]D92!F:7)S="P@;&%S=#L-"B`@("`@("`@#0H@('!U8FQI8SH-"B`@("!V
M;VED(')E<V5T*"D@>R!F:7)S="`](&QA<W0@/2!N97<@3F]D93L@?0T*("`@
M('1H:7,H*2![(')E<V5T*"D[('T-"B`@("`-"B`@("!S=')I;F<@;F%M92 at I
M('L@<F5T=7)N(")&+$Q,+$QK(CL@?0T*("`@('-T<FEN9R!D97-C<FEP=&EO
M;B at I('L@<F5T=7)N(")&249/.B!,;V-K:6YG+"!U<VEN9R!A(&QI;FME9"!L
M:7-T(&%S('-T;W)A9V4N(CL@?0T*("`@("`@(`T*("`@('9O:60@<')O9'5C
M92AI;B!4('0I#0H@("`@>PT*("`@("`@3F]D92!T;7`@/2!N97<@3F]D92AT
M*3L-"B`@("`@('-Y;F-H<F]N:7IE9"`H=&AI<RD@>PT*"71M<"YN97AT(#T@
M;&%S="YN97AT.PT*"6QA<W0N;F5X="`]('1M<#L)#0H@("`@("!](`T*("`@
M('T-"B`@("`-"B`@("!B;V]L(&-O;G-U;64H;W5T(%0@<F5S=6QT*2`-"B`@
M("![#0H@("`@("!.;V1E('1M<#L-"B`@("`@('-Y;F-H<F]N:7IE9"`H=&AI
M<RD@>PT*"71M<"`](&9I<G-T+FYE>'0[#0H):68@*'1M<"!I<R!N=6QL*0T*
M"2`@<F5T=7)N(&9A;'-E.PT*"69I<G-T+FYE>'0@/2!T;7`N;F5X=#L-"B`@
M("`@('T-"B`@("`@(')E<W5L="`]('1M<"YV86QU93L-"B`@("`@(')E='5R
M;B!T<G5E.PT*("`@('T-"B`@?0T*#0H@(&-L87-S($Q)1D]?3&EN:V5D3&ES
M=%],;V-K:6YG7U%U975E(#H at 475E=64-"B`@>PT*("!P<FEV871E. at T*("`@
M($YO9&4@;&%S=#L-"B`@("`@("`@#0H@('!U8FQI8SH-"B`@("!V;VED(')E
M<V5T*"D@>R!L87-T(#T@;F5W($YO9&4[('T-"B`@("!T:&ES*"D@>R!R97-E
M="@I.R!]#0H@("`@#0H@("`@<W1R:6YG(&YA;64H*2![(')E='5R;B`B3"Q,
M3"Q,:R([('T-"B`@("!S=')I;F<@9&5S8W)I<'1I;VXH*2![(')E='5R;B`B
M3$E&3SH at 3&]C:VEN9RP@=7-I;F<@82!L:6YK960@;&ES="!A<R!S=&]R86=E
M+B([('T-"B`@("`@("`-"B`@("!V;VED('!R;V1U8V4H:6X at 5"!T*0T*("`@
M('L-"B`@("`@($YO9&4@=&UP(#T@;F5W($YO9&4H="D[#0H@("`@("!S>6YC
M:')O;FEZ960@*'1H:7,I('L-"@ET;7`N;F5X="`](&QA<W0N;F5X=#L-"@EL
M87-T+FYE>'0@/2!T;7`["0T*("`@("`@?2`-"B`@("!]#0H@("`@#0H@("`@
M8F]O;"!C;VYS=6UE*&]U="!4(')E<W5L="D@#0H@("`@>PT*("`@("`@3F]D
M92!T;7`[#0H@("`@("!S>6YC:')O;FEZ960@*'1H:7,I('L-"@ET;7`@/2!L
M87-T+FYE>'0[#0H):68@*'1M<"!I<R!N=6QL*0T*"2`@<F5T=7)N(&9A;'-E
M.PT*"6QA<W0N;F5X="`]('1M<"YN97AT.PT*("`@("`@?0T*("`@("`@<F5S
M=6QT(#T@=&UP+G9A;'5E.PT*("`@("`@<F5T=7)N('1R=64[#0H@("`@?0T*
M("!]#0H@(`T*#0H@(&-L87-S($9)1D]?3&EN:V5D3&ES=%],;V-K1G)E95]1
M=65U92`Z(%%U975E#0H@('L-"B`@<')I=F%T93H-"B`@("!S:&%R960 at 3F]D
M92!F:7)S="QL87-T.PT*("`@("`@("`-"B`@<'5B;&EC. at T*("`@('9O:60@
M<F5S970H*2![(&9I<G-T(#T@;&%S="`](&YE=R!S:&%R960H3F]D92D[('T-
M"B`@("!T:&ES*"D@>R!R97-E="@I.R!]#0H@("`@("`@(`T*("`@('-T<FEN
M9R!N86UE*"D@>R!R971U<FX@(D8L3$PL3$8B.R!]#0H@("`@<W1R:6YG(&1E
M<V-R:7!T:6]N*"D@>R!R971U<FX@(D9)1D\Z($QO8VL at 1G)E92`H=7-I;F<@
M8V%S*2P@=7-I;F<@82!L:6YK960@;&ES="!A<R!S=&]R86=E+B([('T-"B`@
M("`-"B`@("`-"B`@("!V;VED('!R;V1U8V4H:6X at 5"!T*0T*("`@('L-"B`@
M("`@('-H87)E9"!A=71O('1M<"`](&YE=R!S:&%R960H3F]D92DH="D[("`@
M(`T*("`@("`@9&\@>PT*"71M<"YN97AT(#T@;&%S="YN97AT.PT*("`@("`@
M?2!W:&EL92`H(6-A<R at F;&%S="YN97AT+'1M<"YN97AT+'1M<"DI.PT*("`@
M('T@#0H@("`@#0H-"B`@("!B;V]L(&-O;G-U;64H;W5T(%0@<F5S=6QT*2`-
M"B`@("![#0H@("`@("!S:&%R960 at 3F]D92!T;7`[#0H@("`@("!D;R![#0H)
M=&UP(#T at 9FER<W0N;F5X=#L-"@EI9B`H=&UP(&ES(&YU;&PI#0H)("!R971U
M<FX at 9F%L<V4[#0H@("`@("!]('=H:6QE("@A8V%S*"9F:7)S="YN97AT+'1M
M<"QT;7`N;F5X="DI.PT*("`@("`@#0H@("`@("!R97-U;'0@/2!T;7`N=F%L
M=64[#0H@("`@("!R971U<FX@=')U93L@("`@#0H@("`@?0T*("!]#0H-"B`@
M8VQA<W, at 3$E&3U],:6YK961,:7-T7TQO8VM&<F5E7U%U975E(#H at 475E=64-
M"B`@>PT*("!P<FEV871E. at T*("`@('-H87)E9"!.;V1E(&QA<W0[#0H@("`@
M("`@(`T*("!P=6)L:6,Z#0H@("`@=F]I9"!R97-E="@I('L@;&%S="`](&YE
M=R!S:&%R960H3F]D92D[('T-"B`@("!T:&ES*"D@>R!R97-E="@I.R!]#0H@
M("`@("`@(`T*("`@('-T<FEN9R!N86UE*"D@>R!R971U<FX@(DPL3$PL3$8B
M.R!]#0H@("`@<W1R:6YG(&1E<V-R:7!T:6]N*"D@>R!R971U<FX@(DQ)1D\Z
M($QO8VL at 1G)E92`H=7-I;F<@8V%S*2P@=7-I;F<@82!L:6YK960@;&ES="!A
M<R!S=&]R86=E+B([('T-"B`@("`-"B`@("`-"B`@("!V;VED('!R;V1U8V4H
M:6X at 5"!T*0T*("`@('L-"B`@("`@('-H87)E9"!A=71O('1M<"`](&YE=R!S
M:&%R960H3F]D92DH="D[("`@(`T*("`@("`@9&\@>PT*"71M<"YN97AT(#T@
M;&%S="YN97AT.PT*("`@("`@?2!W:&EL92`H(6-A<R at F;&%S="YN97AT+'1M
M<"YN97AT+'1M<"DI.PT*("`@('T@#0H@("`@#0H-"B`@("!B;V]L(&-O;G-U
M;64H;W5T(%0@<F5S=6QT*2`-"B`@("![#0H@("`@("!S:&%R960 at 3F]D92!T
M;7`[#0H@("`@("!D;R![#0H)=&UP(#T@;&%S="YN97AT.PT*"6EF("AT;7`@
M:7,@;G5L;"D-"@D@(')E='5R;B!F86QS93L-"B`@("`@('T@=VAI;&4@*"%C
M87,H)FQA<W0N;F5X="QT;7`L=&UP+FYE>'0I*3L-"B`@("`@(`T*("`@("`@
M<F5S=6QT(#T@=&UP+G9A;'5E.PT*("`@("`@<F5T=7)N('1R=64[("`@(`T*
M("`@('T-"B`@?0T*#0H-"B`@8VQA<W, at 3$E&3U]"=69F97)?3&]C:VEN9U]1
M=65U92`Z(%%U975E#0H@('L-"B`@<')I=F%T93H-"B`@("!4*B!C=7)R96YT
M7SL-"B`@("!46UT at 8G5F9F5R7SL-"B`@("!I;G0@<W1A<G1I;F=?8G5F9F5R
M7V1E<'1H7SL-"B`@<'5B;&EC. at T*("`@('-T<FEN9R!N86UE*"D@>R!R971U
M<FX@(DPL0BQ,:R([('T-"B`@("!S=')I;F<@9&5S8W)I<'1I;VXH*2![(')E
M='5R;B`B3$E&3SH at 3&]C:VEN9RP@=7-I;F<@82!D>6YA;6EC86QL>2!R97-I
M>F%B;&4 at 87)R87D at 87,@<W1O<F%G92XB.R!]#0H-"B`@("!T:&ES*&EN="!S
M=&%R=&EN9U]B=69F97)?9&5P=&@],3`P*0T*("`@("`@>PT*"7-T87)T:6YG
M7V)U9F9E<E]D97!T:%\@/2!S=&%R=&EN9U]B=69F97)?9&5P=&@[#0H)<F5S
M970H*3L-"B`@("`@('T-"B`@("`-"B`@("!V;VED(')E<V5T*"D@>PT*("`@
M("`@8G5F9F5R7R`](&YE=R!46W-T87)T:6YG7V)U9F9E<E]D97!T:%]=.PT*
M("`@("`@8W5R<F5N=%\@/2`F8G5F9F5R7ULP73L-"B`@("!]#0H@("`@#0H@
M("`@?G1H:7,H*0T*("`@("`@>PT*"61E;&5T92!B=69F97)?.PT*("`@("`@
M?0T*#0H@("`-"B`@("!V;VED('!R;V1U8V4H:6X at 5"!T*0T*("`@('L-"B`@
M("`@('-Y;F-H<F]N:7IE9"`H=&AI<RD@>PT*"2HH8W5R<F5N=%\K*RD@/2!T
M.PT*#0H):68@*&-U<G)E;G1?(#T]("9B=69F97)?6V)U9F9E<E\N;&5N9W1H
M+3%=*2![#0H)("!I;G0@;"`](&)U9F9E<E\N;&5N9W1H.PT*"2`@8G5F9F5R
M7RYL96YG=&@@/2!L("H@,CL at +R\@<F5S:7IE#0H)("!C=7)R96YT7R`]("9B
M=69F97)?6VPM,5T[("\O(')E<&]I;G0 at 870@96YD(`T*"2`@<')I;G1F*")B
M=69F97(@<F5S:7IE9"!T;R`E:5QN(BQB=69F97)?+FQE;F=T:"D[#0H)?0T*
M("`@("`@?2`@("`@("`-"B`@("!]#0H@("`@#0H@("`@8F]O;"!C;VYS=6UE
M*&]U="!4(')E<W5L="D@#0H@("`@>PT*("`@("`@<WEN8VAR;VYI>F5D("AT
M:&ES*2![("`@("`-"@EI9B`H8W5R<F5N=%\@(3T@)F)U9F9E<E];,%TI('L)
M("`-"@D@("`@<F5S=6QT(#T@*B at M+6-U<G)E;G1?*3L-"@D@("`@<F5T=7)N
M('1R=64[#0H)?0T*"7)E='5R;B!F86QS93L-"B`@("`@('T-"B`@("!]#0H@
M('T-"@T*("!C;&%S<R!,249/7TUE<W-A9V5?4&%S<VEN9U]1=65U92`Z($UE
M<W-A9V5?4&%S<VEN9U]1=65U92`-"B`@>PT*("!P<FEV871E. at T*("`@(%1I
M9"!C;VYS=6UE<E]T:61?.PT*("!P=6)L:6,Z#0H@("`@8F]O;"!M97-S86=E
M7W!A<W-I;F<H*2![(')E='5R;B!T<G5E.R!]#0H@("`@<W1R:6YG(&YA;64H
M*2![(')E='5R;B`B3"Q-4"([('T-"B`@("!S=')I;F<@9&5S8W)I<'1I;VXH
M*2![(')E='5R;B`B3$E&3SH at 365S<V%G92!087-S:6YG(CL@?0T*#0H@("`@
M=F]I9"!S971?8V]N<W5M97)?5&ED*%1I9"!T*2![(&-O;G-U;65R7W1I9%\@
M/2!T.R!](`T*#0H@("`@=&AI<R at I('M](`T*("`@('9O:60@<F5S970H*2![
M?0T*#0H@("`@=F]I9"!P<F]D=6-E*&EN(%0@="D@>PT*("`@("`@<V5N9"AC
M;VYS=6UE<E]T:61?+'0I.PT*("`@('T-"B`@("`-"B`@("!B;V]L(&-O;G-U
M;64H;W5T(%0@<F5S=6QT*2![#0H@("`@("`O+W1H<F]W($5X8V5P=&EO;CL-
M"B`@("`@("\O<F5C96EV92 at H5"!T*2![(')E<W5L="`]('0[('TI.PT*("`@
G("`@<F5T=7)N(&9A;'-E.PT*("`@('T-"B`@?0T*#0I]#0H-"@T*
`
end
begin 644 Queue_Test.d
M:6UP;W)T('-T9"YC+G-T9&EO.PII;7!O<G0 at 8V]R92YT:')E860["FEM<&]R
M="!S=&0N9&%T971I;64["FEM<&]R="!S=&0N<F%N9&]M.PII;7!O<G0@<W1D
M+FUA=&@["FEM<&]R="!S=&0N86QG;W)I=&AM.PII;7!O<G0@<W1D+F9O<FUA
M=#L*:6UP;W)T('-T9"YR86YG93L*:6UP;W)T('-T9"YC;VYC=7)R96YC>3L*
M:6UP;W)T('-T9"YT<F%I=',["@II;7!O<G0 at 475E=64["@IT96UP;&%T92!1
M=65U95]497-T7U1Y<&5S*%0I(`I["B`@<W1R=6-T($1A=&%?4&%C:V5T(`H@
M('L*("`@(%1I8VMS('!4:6UE.PH@("`@8F]O;"!L87-T(#T at 9F%L<V4["B`@
M("!4(&1U;6UY.PH@('T*"B`@86QI87, at 475E=65?5'EP97,A*$1A=&%?4&%C
M:V5T*2!15#L*"B`@86QI87,@=F]I9"!D96QE9V%T92AI;B!$871A7U!A8VME
M="!D*2!S96YD97(["B`@86QI87, at 8F]O;"!D96QE9V%T92AO=70 at 1&%T85]0
M86-K970 at 9"D@<F5C96EV97(["@H@('9O:60@<')O9'5C92AS96YD97(@<V5N
M9"P at 4F%N9&]M('(L(&EN="!P86-K971S+"!I;G0@<&%C:V5T<U]P97)?<RP@
M:6YT('5S7W9A<FEA8FEL:71Y*2`*("!["B`@("!D96)U9R![('!R:6YT9B at B
M:6X@<')O9'5C92 at N+BXI7&XB*3L@?0H@("`@:6YT('!A8VME=%]S<&%C:6YG
M(#T@,3`P,#`P,#`O<&%C:V5T<U]P97)?<SL at +R]U;FET<R!A<F4@,3`P;G,@
M"B`@("`O+R!M86ME('-U<F4@=V4 at 8V%N)W0@:&%V92`M='9E('-L965P"B`@
M("!I;G0@<&%C:V5T7W9A<FEA8FEL:71Y(#T@;6EN*#$P*G5S7W9A<FEA8FEL
M:71Y+'!A8VME=%]S<&%C:6YG*S$I.PH@("`@"B`@("!P86-K971S+2T[("\O
M(&]N92!E>'1R82!P<F]D=6-E9"!A9G1E<B!L;V]P('=I=&@@<VEG;F%L('1O
M(&5N9`H@("`@:6YT(&-O=6YT97(@/2`P.PH@("`@=VAI;&4@*&-O=6YT97(K
M*R`\('!A8VME=',I("!["B`@("`@($1A=&%?4&%C:V5T(&1A=&$["B`@("`@
M(&1A=&$N<%1I;64@/2!S>7-T:6UE*"D["B`@("`@(&1E8G5G("@U*2![('!R
M:6YT9B at B4V5N9&EN9R!T/25I7&XB+&1A=&$N<%1I;64N=F%L=64I.R!]"B`@
M("`@(&1E8G5G("@S*2![('!R:6YT9B at B4R(I.R!]"B`@("`@('-E;F0H9&%T
M82D["B`@("`@(%1H<F5A9"YS;&5E<"AP86-K971?<W!A8VEN9R`K('5N:69O
M<FTH+7!A8VME=%]V87)I86)I;&ET>2QP86-K971?=F%R:6%B:6QI='DL<BDI
M.PH@("`@?0H@("`@1&%T85]086-K970 at 9&%T83L*("`@(&1A=&$N;&%S="`]
M('1R=64["B`@("!D871A+G!4:6UE(#T@<WES=&EM92 at I.PH@("`@<V5N9"AD
M871A*3L*("!]"B`@"B`@"B`@=F]I9"!C;VYS=6UE*&)O;VP at 9&5L96=A=&4H
M;W5T($1A=&%?4&%C:V5T(&0I(')E8V5I=F5?9BP@:6YT(&YU;6)E<E]P86-K
M971S+"!4:60@;51I9"P@;W5T(&QO;F=;72!D96QA>7,I(`H@('L*("`@(&1E
M8G5G('L@<')I;G1F*")I;B!C;VYS=6UE*"XN+BE<;B(I.R!]"B`@("!$871A
M7U!A8VME="!D871A.PH@("`@:6YT('!A8VME=%]N=6UB97(["B`@("!D96QA
M>7,N;&5N9W1H(#T@;G5M8F5R7W!A8VME=',["B`@("!W:&EL92AP86-K971?
M;G5M8F5R(#P@;G5M8F5R7W!A8VME=',I('L*("`@("`@:68@*')E8V5I=F5?
M9BAD871A*2D*"61E;&%Y<UMP86-K971?;G5M8F5R*RM=(#T@<')O8V5S<U]P
M86-K970H9&%T82D["B`@("!]"B`@("!D96)U9R![('!R:6YT9B at B9FEN:7-H
M960 at 8V]N<W5M92 at N+BXI7&XB*3L@?0H@("`@<')I;W)I='E396YD*"!M5&ED
M("P@=')U92D["B`@?0H*("!V;VED(&-O;G-U;65?;7`H:6YT(&YU;6)E<E]P
M86-K971S+"!4:60@;51I9"P@;W5T('-H87)E9"!L;VYG6UT at 9&5L87ES*2`*
M("!["B`@("`*("`@(&1E8G5G('L@<')I;G1F*")I;B!C;VYS=6UE7VUP*"XN
M+BDB*3L@?0H@("`@1&%T85]086-K970 at 9&%T83L*("`@(&EN="!P86-K971?
M;G5M8F5R.PH@("`@9&5L87ES+FQE;F=T:"`](&YU;6)E<E]P86-K971S.PH@
M("`@=VAI;&4H<&%C:V5T7VYU;6)E<B`\(&YU;6)E<E]P86-K971S*2`*("`@
M("`@<F5C96EV92 at H1&%T85]086-K970 at 9"D@>R!D96QA>7-;<&%C:V5T7VYU
M;6)E<BLK72`]('!R;V-E<W-?<&%C:V5T*&1A=&$I.R!]*3L*"B`@("!D96)U
M9R![('!R:6YT9B at B9FEN:7-H960 at 8V]N<W5M92 at N+BXI7&XB*3L@?0H@("`@
M<')I;W)I='E396YD*"!M5&ED("P@=')U92D["B`@?0H@(`H*("!L;VYG('!R
M;V-E<W-?<&%C:V5T*$1A=&%?4&%C:V5T(&1A=&$I(`H@('L*("`@(&1E8G5G
M("@U*2![('!R:6YT9B at B4F5C)V0@=#TE:5QN(BQD871A+G!4:6UE+G9A;'5E
M*3L@?0H@("`@9&5B=6<@*#,I('L@<')I;G1F*")#(BD[('T*("`@(%1I8VMS
M(&-4:6UE.PH@("`@8U1I;64@/2!S>7-T:6UE*"D[(`H@("`@9&5B=6<@*#4I
M('!R:6YT9B at B4F5C)V0 at 870@=#TE:5QN(BQC5&EM92YV86QU92D["B`@("!4
M:6-K<R!E;&%P<V5D(#T at 8U1I;64 at +2!D871A+G!4:6UE.PH@("`@;&]N9R!E
M;&%P<V5D7W5S(#T at 96QA<'-E9"YT;TUI8W)O<V5C;VYD<R$H;&]N9RDH*3L*
M("`@(&1E8G5G("@U*2!P<FEN=&8H(G5S/25I7&XB+&5L87!S961?=7,I.PH@
M("`@<F5T=7)N(&5L87!S961?=7,["B`@?0H*("`*("!C;&%S<R!1=65U95]4
M97-T('L*("`@(&EM;75T86)L92!S=')I;F<@5&5S=%]);F9O7TAE861E<B`]
M(")0<F]D<UQT<&MT<UQ<<')O9%QT<&MT<UQ<<UQT:FET=&5R(CL*("`@(&EM
M;75T86)L92!S=')I;F<@4G5N7TEN9F]?2&5A9&5R(#T@(E%U975E7'0 at 5&]T
M('-<="!A=F=<="`@<V1<=&UI;EQT(&UA>%QT/&UI;CY<="`\;6%X/EQN7U]?
M7U]?7'1?7U]?7U]<=%]?7U]?7'1?7U]?7UQT7U]?7'1?7U]?7UQT7U]?7U]<
M=%]?7U]?7U\B.PH*("!P<FEV871E. at H@("`@"B`@("`O+R!F;W(@=&5S="!I
M;G!U=',*("`@(&EN="!N=6U?<')O9'5C97)S7RP@<&%C:V5T<U]P97)?<')O
M9'5C97)?+"!A=F=?<&%C:V5T<U]P97)?<U\L(&UI8W)O<V5C;VYD7W9A<FEA
M8FEL:71Y7SL*("`@(`H@("`@+R\@9F]R('1E<W0@;W5T<'5T<PH@("`@;&]N
M9R!M87AI;75M7RQM:6YI;75M7RQ.7SL*("`@(&1O=6)L92!A=F=?+"!S=&1?
M9&5V7RP at 879G7VUI;E\L(&%V9U]M87A?+"!R=6Y?<U\["B`@("!S=')I;F<@
M<5]N86UE7SL*("`@(`H@('!U8FQI8SH*("`@('1H:7,H:6YT(&YU;5]P<F]D
M=6-E<G,L(&EN="!P86-K971S7W!E<E]P<F]D=6-E<BP@:6YT(&%V9U]P86-K
M971S7W!E<E]S+"!I;G0@;6EC<F]S96-O;F1?=F%R:6%B:6QI='DI(`H@("`@
M>PH@("`@("!N=6U?<')O9'5C97)S7R`](&YU;5]P<F]D=6-E<G,["B`@("`@
M('!A8VME='-?<&5R7W!R;V1U8V5R7R`]('!A8VME='-?<&5R7W!R;V1U8V5R
M.PH@("`@("!A=F=?<&%C:V5T<U]P97)?<U\@/2!A=F=?<&%C:V5T<U]P97)?
M<SL*("`@("`@;6EC<F]S96-O;F1?=F%R:6%B:6QI='E?(#T@;6EC<F]S96-O
M;F1?=F%R:6%B:6QI='D["B`@("!]"B`@("`*("`@('-T<FEN9R!497-T7TEN
M9F\H*2![(`H@("`@("!A=71O('=R:71E<B`](&%P<&5N9&5R(7-T<FEN9R at I
M.PD@("`@"B`@("`@(&9O<FUA='1E9%=R:71E*'=R:71E<BPB)7,@<')O9'5C
M97(H<RD at 96%C:"!P<F]D=6-I;F<@)7,@<&%C:V5T<R!A="`E<R!P:W1S+W,@
M*'1O=&%L*2!W:71H("5S('5S(&II='1E<CHB+&YU;5]P<F]D=6-E<G-?+'!A
M8VME='-?<&5R7W!R;V1U8V5R7RQA=F=?<&%C:V5T<U]P97)?<U\L;6EC<F]S
M96-O;F1?=F%R:6%B:6QI='E?*3L*("`@("`@<F5T=7)N('=R:71E<BYD871A
M.PH@("`@?0H@("`@"B`@("`*("`@('-T<FEN9R!2=6Y?26YF;R at I('L*("`@
M("`@875T;R!W<FET97(@/2!A<'!E;F1E<B%S=')I;F<H*3L*("`@("`@9F]R
M;6%T=&5D5W)I=&4H=W)I=&5R+"(E<UQT)38N,F9<="4U+C)F7'0E-2XR9EQT
M)3)S(BQQ7VYA;65?+')U;E]S7RQA=F=?+'-T9%]D979?+&UI;FEM=6U?*3L*
M("`@("`@9F]R;6%T=&5D5W)I=&4H=W)I=&5R+")<="4U<R(L(&UA>&EM=6U?
M*3L*("`@("`@9F]R;6%T=&5D5W)I=&4H=W)I=&5R+")<="4U+C)F(BQA=F=?
M;6EN7RD["B`@("`@(&9O<FUA='1E9%=R:71E*'=R:71E<BPB7'0E-RXR9B(L
M879G7VUA>%\I.PH@("`@("!R971U<FX@=W)I=&5R+F1A=&$["B`@("!]"B`@
M("`*("`@(&)O;VP@:7-?;7!?<75E=64H5"DH5"!Q*2!["B`@("`@(')E='5R
M;B!H87--96UB97(A*%0L(G-E=%]C;VYS=6UE<E]4:60B*3L*("`@('T*"B`@
M("!V;VED(')U;BA15"Y1=65U92!Q*0H@("`@>PH@("`@("!Q7VYA;65?(#T@
M<2YN86UE.PH@("`@("!Q+G)E<V5T*"D["B`@("`@("\O(&-R96%T92!A('!R
M;V1U8V5R('1H<F5A9"!A;F0 at 82!C;VYS=6UE<B!T:')E860*("`@("`@4F%N
M9&]M(&=E;CL*("`@("`@:6YT(&YU;5]P86-K971S(#T@;G5M7W!R;V1U8V5R
M<U\J<&%C:V5T<U]P97)?<')O9'5C97)?.PH@("`@(`H@("`@("`O+VQO;F=;
M72!D96QA>7,["B`@("`@(&)O;VP at 8V]N<W5M97)?9FEN:7-H960@/2!F86QS
M93L*("`@("`@"B`@("`@(%1I9"!T(#T@=&AI<U1I9"@I.PH@("`@("!4:60@
M8V]N<W5M97)?=&ED.PH@("`@("!L;VYG6UT at 9&5L87ES.PH@("`@("!S:&%R
M960@;&]N9UM=('-D96QA>7,["B`@("`@(%1H<F5A9"!C;VYS=6UE<CL*"B`@
M("`@(&EF("AI<U]M<%]Q=65U92AQ*2D@>PH)8V]N<W5M97)?=&ED(#T@<W!A
M=VXH)F-O;G-U;65?;7`L;G5M7W!A8VME=',L="QS9&5L87ES*3L*"2AC87-T
M*%%4+DUE<W-A9V5?4&%S<VEN9U]1=65U92EQ*2YS971?8V]N<W5M97)?5&ED
M*&-O;G-U;65R7W1I9"D["B`@("`@('T*("`@("`@96QS92!["@EC;VYS=6UE
M<B`](&YE=R!4:')E860H>R!C;VYS=6UE*&1E;&5G871E(&)O;VPH;W5T($1A
M=&%?4&%C:V5T(&0I('L@<F5T=7)N('$N8V]N<W5M92AD*3L@?2P@;G5M7W!A
M8VME=',L('0L(&1E;&%Y<RD[('TI.PH)9&5B=6<@>R!P<FEN=&8H(G-T87)T
M:6YG(&-O;G-U;65R7&XB*3L@?0H)8V]N<W5M97(N<W1A<G0H*3L@"@ED96)U
M9R![('!R:6YT9B at B<W1A<G1E9"Y<;B(I.R!]"B`@("`@('T*"B`@("`@(%1H
M<F5A9$=R;W5P('!R;V1U8V5R5&AR96%D<R`](&YE=R!4:')E861'<F]U<"@I
M.PH@("`@("!I;G0@<'!S(#T at 879G7W!A8VME='-?<&5R7W-?+VYU;5]P<F]D
M=6-E<G-?.PH@("`@("!4:6-K<R!S5&EM92`]('-Y<W1I;64H*3L*("`@("`@
M:68@*&ES7VUP7W%U975E*'$I*2!["@DO+W-P87=N(&EN<W1E860@;V8@=&AR
M96%D(&=R;W5P"B`@("`@('T*("`@("`@96QS92!["@E4:')E861;72!P<F]D
M=6-E<E]T:')E861S.PH)<')O9'5C97)?=&AR96%D<RYL96YG=&@@/2!N=6U?
M<')O9'5C97)S7SL*"69O<B`H:6YT(&L],#L@:SQN=6U?<')O9'5C97)S7SL@
M*RMK*2`@>PH)("!D96)U9R![('!R:6YT9B at B8W)E871I;F<@)B!S=&%R=&EN
M9R!P<F]D=6-E<EQN(BD[('T*"2`@<')O9'5C97)?=&AR96%D<UMK72`](`H)
M("`@('!R;V1U8V5R5&AR96%D<RYC<F5A=&4H>W!R;V1U8V4H9&5L96=A=&4@
M=F]I9"AI;B!$871A7U!A8VME="!D*2![('$N<')O9'5C92AD*3L@?2P*"0D)
M"0D@("`@9V5N+'!A8VME='-?<&5R7W!R;V1U8V5R7RQP<',L;6EC<F]S96-O
M;F1?=F%R:6%B:6QI='E?*3M]*3L)("`*("`@("`*"61E8G5G('L@<')I;G1F
M*")S=&%R=&5D+EQN(BD[('T*"7T*("`@("`@?0H@("`@("!D96)U9R!["@EP
M<FEN=&8H(E=A:71I;F<@9F]R('!R;V1U8V5R<R!T;R!F:6YI<VA<;B(I.PH)
M<')O9'5C97)4:')E861S+FIO:6Y!;&PH*3L@("\O('=A:70 at 9F]R('!R;V1U
M8V5R<R!T;R!F:6YI<V@*("`@("`@?0H@("`@("!D96)U9R!["@EP<FEN=&8H
M(D9I;FES:&5D+EQN(BD["@EP<FEN=&8H(E=A:71I;F<@9F]R(&-O;G-U;65R
M('1O('-E;F0@<VEG;F%L7&XB*3L*("`@("`@?0H@("`@("!R96-E:79E*"AB
M;V]L(&(I('M]*3L at +R\@=V%I="!F;W(@8V]N<W5M97(@=&\@9FEN:7-H("`@
M("`@"B`@("`@(&1E8G5G('L*"7!R:6YT9B at B<F5C96EV961<;B(I.PH@("`@
M("!]"B`@("`@(%1I8VMS(&54:6UE(#T@<WES=&EM92 at I.PH@("`@("!R=6Y?
M<U\@/2`H951I;64M<U1I;64I+G1O4V5C;VYD<R%D;W5B;&4H*3L*("`@("`@
M"B`@("`@(&EF("AI<U]M<%]Q=65U92AQ*2D@>PH)9&5L87ES+FQE;F=T:"`]
M('-D96QA>7,N;&5N9W1H.PH)"@EF;W(@*&EN="!K/3`[(&L\<V1E;&%Y<RYL
M96YG=&@[("LK:RD*"2`@9&5L87ES6VM=(#T@<V1E;&%Y<UMK73L*("`@("`@
M?0H@("`@("`*("`@("`@3E\@/2!D96QA>7,N;&5N9W1H.R`*("`@("`@("`@
M("`@"B`@("`@('-O<G0H9&5L87ES*3L*("`@("`@;6%X:6UU;5\@/2!D96QA
M>7-;9&5L87ES+FQE;F=T:"TQ73L*("`@("`@;6EN:6UU;5\@/2!D96QA>7-;
M,%T["B`@("`@(`H@("`@("!A=71O('-U;2`](')E9'5C92$H(F$K8B(I*&-A
M<W0H;&]N9RDP+&1E;&%Y<RD["B`@("`@(`H@("`@("!A=F=?(#T at 8V%S="AD
M;W5B;&4I<W5M+TY?.PH@("`@("`*("`@("`@;&]N9R!F*&QO;F<@82P@;&]N
M9R!B*2![(`H)9&]U8FQE('$R(#T@*&(M879G7RDJ*&(M879G7RD["@ER971U
M<FX at 82MC87-T*&QO;F<I<3([(`H@("`@("!]"B`@("`@(&%U=&\@<V0@/2!R
M961U8V4A*&8I*&-A<W0H;&]N9RDP+&1E;&%Y<RD["B`@("`@(`H@("`@("!S
M=&1?9&5V7R`]('-Q<G0H8V%S="AD;W5B;&4I<V0O3E\I.PH@("`@("`*("`@
M("`@:6YT('!C="`](&UA>"AD96QA>7,N;&5N9W1H+S$P,"PQ*3L*("`@("`@
M;&]N9UM=('-M86QL97-T(#T at 9&5L87ES6S`@+BX@<&-T73L*("`@("`@;&]N
M9UM=(&QA<F=E<W0@/2!D96QA>7-;*&1E;&%Y<RYL96YG=&@M<&-T*2`N+B!D
M96QA>7,N;&5N9W1H73L*("`@("`@879G7VUI;E\@/2!R961U8V4A*")A*V(B
M*2 at P+C`L<VUA;&QE<W0I+W!C=#L*("`@("`@879G7VUA>%\@/2!R961U8V4A
M*")A*V(B*2 at P+C`L;&%R9V5S="DO<&-T.PH@("`@("`*("`@('T*("!]"GT*
M"F%L:6%S(%%U975E7U1E<W1?5'EP97,A*&)O;VPI(%%45#L*"G9O:60@;6%I
M;B at I(`I["B`@<V5T8G5F*'-T9&]U="QN=6QL*3L*("!P<FEN=&8H(EQN06QL
M('1I;65S(&EN(&UI8W)O<V5C;VYD<R!U;FQE<W,@;W1H97)W:7-E('-P96-I
M9FEE9"Y<;B(I.PH@('!R:6YT9B at B7&X\;6EN/B!A;F0@/&UA>#X at 87)E(&%V
M97)A9V5S(&]V97(@9F%S=&5S="!A;F0@<VQO=V5S="`Q)24@<F5S<&5C=&EV
M96QY+EQN7&XB*3L*(`H@(%%45"Y15"Y1=65U95M=('%U975E<SL*("`O+W%U
M975E<R!^/2!N97<@4514+E%4+DQ)1D]?365S<V%G95]087-S:6YG7U%U975E
M*"D["B`@<75E=65S('X](&YE=R!15%0N450N3$E&3U]"=69F97)?3&]C:VEN
M9U]1=65U92 at Q,#`I.PH@('%U975E<R!^/2!N97<@4514+E%4+DQ)1D]?3&EN
M:V5D3&ES=%],;V-K:6YG7U%U975E*"D[(`H@('%U975E<R!^/2!N97<@4514
M+E%4+D9)1D]?3&EN:V5D3&ES=%],;V-K:6YG7U%U975E*"D[(`H@('%U975E
M<R!^/2!N97<@4514+E%4+DQ)1D]?3&EN:V5D3&ES=%],;V-K1G)E95]1=65U
M92 at I.PH@('%U975E<R!^/2!N97<@4514+E%4+D9)1D]?3&EN:V5D3&ES=%],
M;V-K1G)E95]1=65U92 at I.PH*"B`@9F]R96%C:"`H43L@<75E=65S*0H@("`@
M<')I;G1F*"(E+BIS(#T@)2XJ<UQN(BQ1+FYA;64L42YD97-C<FEP=&EO;BD[
M"B`@"B`@<')I;G1F*")<;B(I.PH*("!15%0N475E=65?5&5S=%M=('1E<W1S
M.PH@(`H@("\O=&5S=',@?CT@;F5W(%%45"Y1=65U95]497-T*#0L,3`L,3`L
M,2D["B`@+R]T97-T<R!^/2!N97<@4514+E%U975E7U1E<W0H-"PQ,#`L,3`P
M+#$I.PH@("\O=&5S=',@?CT@;F5W(%%45"Y1=65U95]497-T*#$L,3`P,"PQ
M,#`P+#$P,"D["B`@+R]T97-T<R!^/2!N97<@4514+E%U975E7U1E<W0H-"PQ
M,#`P+#$P,#`L,3`P*3L*("!T97-T<R!^/2!N97<@4514+E%U975E7U1E<W0H
M-"PT,#`P+#(P,#`L,3`P*3L*("!T97-T<R!^/2!N97<@4514+E%U975E7U1E
M<W0H-"PT,#`P+#(P,#`L,3`P,"D["B`@=&5S=',@?CT@;F5W(%%45"Y1=65U
M95]497-T*#0L-3`P,#`L-3`P,"PQ,#`I.PH@('1E<W1S('X](&YE=R!15%0N
M475E=65?5&5S="@T+#4P,#`P,"PU,#`P,"PQ*3L*("!T97-T<R!^/2!N97<@
M4514+E%U975E7U1E<W0H-"PU,#`P,#`L-3`P,#`L,3`P*3L*"@H@(&9O<F5A
M8V at H=#L@=&5S=',I('L*("`@('!R:6YT9B at B)2XJ<UQN7&XE+BIS7&XB+'0N
M5&5S=%]);F9O+'0N4G5N7TEN9F]?2&5A9&5R*3L*("`@(&9O<F5A8V@@*%$[
M('%U975E<RD@>PH@("`@("!T+G)U;BA1*3L*("`@("`@<')I;G1F*"(E+BIS
M7&XB+'0N4G5N7TEN9F\I.PH@("`@?0H@("`@<')I;G1F*")<;B(I.PH@('T*
&"GT*"@H*
`
end


More information about the Digitalmars-d mailing list