<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2015-03-22 19:23 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">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>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></span><div>Si, ovvio. Ma non capisco quale sia il tuo punto.</div></div></div></div></blockquote><div><br></div><div>Il punto è che voglio gli operatori corto circuitati per avere un comportamente sempre ben definito.</div><div>AFAIK se && in Go non fosse corto circuitato, il compilatore potrebbe valutare `*p == 2`anche se p è nullo.</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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span><div></div></span><div>In realtà, come dici dopo, Go non ha la nozione di sequence point.</div></div></div></div></blockquote><div><br></div></span><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></div></div></blockquote><div><br></div><div>Quello che volevo dire è che la specifica del linguaggio non parla mai di sequence point, a differenza del C (ed è una delle parti più complesse del linguaggio).</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"><div></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><span class=""><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><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></span><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></div></div></blockquote><div><br></div><div>All'inizio la pensavo come te, e in alcuni punti lo penso ancora.</div><div>Però dopo averlo usato ne apprezzi meglio la semplicità.</div><div><br></div><div>Spero proprio che la semplicità, dopo i "danni" fatti dal C++, sia l'eredità di Go per i futuri linguaggi.</div><div><br></div><div><br></div><div>Ciao  Manlio </div></div></div></div>