<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2015-03-22 13:12 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-21 21:48 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"><div class="gmail_extra"><span><br><div class="gmail_quote">2015-03-21 19:55 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>Perchè, C te la da?</div><div><a href="http://en.wikipedia.org/wiki/Short-circuit_evaluation#Support_in_common_programming_languages" target="_blank">http://en.wikipedia.org/wiki/Short-circuit_evaluation#Support_in_common_programming_languages</a></div></blockquote></div><br></span>Il fatto che un linguaggio nato 40 anni fa non prestasse attenzione a questo aspetto, quando non era particolarmente critico (mentre saltare un branch di computazione lo era) mi da da pensare molto meno rispetto al fatto che un linguaggio nato negli ultimi anni non ci presti attenzione.</div></div></blockquote><div><br></div></span><div>Ok, però se hai letto la pagina di wikipedia vedi che Algol è antecedente a C ed offriva entrambe le scelte; Fortran è antecedente al C e lasciava la scelta al compilatore; Pascal è antecedente al C ed in una successiva revisione dello standard ha aggiunto supporto per entrambe le scelte.</div></div></div></div></blockquote><div><br></div><div>Si, sono d'accordo. Pero' dobbiamo considerare che i programmatori C sono sempre stati maestri nel trovare binary tricks che funzionano e che sono zozzerie finche' vuoi: ma i programmatori C scrivono cosi'.</div><div><br></div><div>Tipo se vuoi forzare l'ordine di valutazione fai qualcosa come</div><div><br></div><div>(a=f()), (b=g()), a && b</div><div><br></div><div>Se invece quello che ti interessa e' proprio solo un coso che funziona come &&, puoi usare *. </div><div>In teoria non funziona (ovvero, l'aritmetica unsigned in C funziona su un anello che *non* e' un dominio di integrita', il che ti rompe la proprieta' di cui sopra). Pero' nella pratica se a e b sono i classici 1 e 0 interi che le funzioni C ti ritornano per fare finta di essere booleane funziona tutto a meraviglia. E il caso in cui la cosa non funziona e' quando i vari operandi se moltiplicati ti danno un multiplo della caratteristica dell'anello.</div><div><br></div><div>Come dire, fa schifo, ma ci si gira intorno e non e' nemmeno la porcata piu' grossa che vedo fare in C.</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=""><div><br></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"> Ci sono anche 40 anni di binary tricks che in C funzionano eh... dopo di che, effettivamente, quando mi dicevi che le costanti in Go meritano un po' di attenzione ti ho dato retta: e' vero... e secondo me se uno comincia a fare i tricks per girare intorno allo short circuit prima o poi ci resta impiccato. Piu' prima che poi.</div></div></blockquote><div><br></div></span><div>Il trick è scriverti il codice in assembler :)</div><div>A Go, infatti, manca proprio un assembler di alto livello come C--, IMHO.</div></div></div></div></blockquote><div><br></div><div>Ha... interesting point. </div></div><br clear="all"><div><br></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>