<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2015-03-22 16:24 GMT+00:00 Manlio Perillo <span dir="ltr"><<a href="mailto:manlio.perillo@gmail.com" target="_blank">manlio.perillo@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="">2015-03-22 17:06 GMT+01:00 enrico franchi <span dir="ltr"><<a href="mailto:enrico.franchi@gmail.com" target="_blank">enrico.franchi@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><span><br><div class="gmail_quote">2015-03-22 15:35 GMT+00:00 Manlio Perillo <span dir="ltr"><<a href="mailto:manlio.perillo@gmail.com" target="_blank">manlio.perillo@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>Tra l'altro il tutto è complicato dal fatto, AFAIK, che ciascuno degli operandi può avere effetti collaterali.</div><div>Ad esempio:</div><div><a href="https://play.golang.org/p/jc0vKCWFu7" target="_blank">https://play.golang.org/p/jc0vKCWFu7</a></div></blockquote></div><br></span>Scusa non comprendo... in C (e in Go) && introduce un sequence point. Quindi *sai* l'ordine in cui le cose sono valutate.</div></div></blockquote><div><br></div></span>Logical operators apply to boolean values and yield a result of the same type as the operands. The right operand is evaluated conditionally.<div>Senza il "conditionally", il compilatore potrebbe evaluare `*p` anche se `p != ni`l è falso.</div></div></div></div></blockquote><div><br></div><div>Si, ovvio. Ma non capisco quale sia il tuo punto. Facendo retrospettiva credo che intendessi dire che uno dei problemi degli operatori cortocircuitati e' che siccome la valutazione di alcuni operandi e' condizionale puoi avere bachi in cui alcuni effetti collaterali che intendevi avere in realta' non ce li hai perche' il primo e' andato a falso. Viceversa l'esempio che fai e' quello di un effetto collaterale che non vuoi (spaccare il programma) e che fortunatamente non hai per via della condizionalita'.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra">Ovviamente in C (e in GO) se scrivi & *non* hai un sequence point.</div></div></blockquote><div><br></div></span><div>In realtà, come dici dopo, Go non ha la nozione di sequence point.</div></div></div></div></blockquote><div><br></div><div>Veramente, rileggendo quello che ho scritto, mi e' scappato un Go di troppo e ho scritto una minchiata. Ovvero, in C & *non* ti da un sequence point.</div><div><br></div><div>In Go, invece, come dicevo piu' sotto, te lo da. Appunto perche' in C una generica espressione non ti da garanzie sull'ordine di valutazione (per esempio invece , lo fa && lo fa || lo fa, etc). Viceversa, in Go il linguaggio ti dice l'ordine di valutazione delle cose, che vuole dire che essenzialmente ogni operazione introduce un sequence point o giu' di li.</div><div><br></div><div>Ovvero se in go scrivi f() & g() sai che f() sara' completamente valutata prima di iniziare a valutare g() [nota, go routine et similia non contano, perche' se dentro f c'e' qualcosa tipo go h(), il side effect e' "lanciare una go-routine che esegue h, i side effect di h non contano).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><br></div><div class="gmail_extra">Dopo di che mi gira il cazzo perche' in Go non c'e' un singolo modo decente per convertire un booleano in intero (no, fare un if non e' un modo decente) e per *nessuna* ragione che a me paia sensata (per favore, qualcuno mi spieghi il perche') & e | non funzionano con operandi booleani.  Voglio dire, sarebbero operazioni perfettamente definite e type safe. WTF!<span><font color="#888888"><br><br clear="all"></font></span></div></div></blockquote><div><br></div></span><div>La risposta ufficiale credo sia : "ti scrivi delle funzioni apposite "</div></div></div></div></blockquote><div><br></div><div>E la risposta alla risposta ufficiale e' fare torreggiare un dito medio alto quattro piani. :)</div><div> </div><div>Cioe', davvero... e' una delle cose che non comprendo. Veramente... Go mi e' piaciuto un sacco, mi ha intrigato un sacco. Posso arrivare a dire che dopo Python nessun linguaggio mi aveva intrigato altrettanto... ma ci sono una piccola serie di cose che proprio non riesco a digerire.</div><div><br></div></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>