<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2015-07-28 13:39 GMT+01:00 Carlo Miron <span dir="ltr"><<a href="mailto:miron@python.it" target="_blank">miron@python.it</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> Ehm... *se* fosse Python valido, quell'if valuterebbe sempre a vero (a = 3,<br>
> varrebbe 3) e stamperebbe 3.<br>
<br>
</span>e chi te lo dice? conosco almeno un (meraviglioso™) linguaggio in cui<br>
il valore restituito sarebbe il-valore-precedente-di-a.<br></blockquote><div><br></div><div>Diciamo che lo riterrei parecchio probabile... a che linguaggio ti riferisci per inciso?</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class=""><br>
>> Poi, vabbè, evitiamo proprio di iniziare il discorso null/bottom, penso si<br>
>> sia tutti d'accordo ;)<br>
><br>
> Fondamentalmente si. Dal punto di vista della type theory pero' *hai*<br>
> bisogno di un bottom type logico. Non necessariamente deve essere<br>
> esprimibile come un valore: anzi, il problema e' proprio che puoi esprimerlo<br>
> come un valore.<br>
<br>
</span>cosa intendi, scusa? </gnurant><br></blockquote><div><br></div><div>Allora, se vuoi modellare una computazione fal punto di vista formale, hai bisogno che ogni "operazione" abbia un tipo.</div><div>O per lo meno lo fai se stai facendo type-theory.</div><div><br></div><div>bottom e' un tipo che e' sottotipo di tutti i tipi. E tipicamente *non* ha valori (ma vedi sotto). In questo e' diverso da "unit" (o void) che invece ha un solo valore.</div><div>Con bottom puoi modellizzare tante cose; per dire una computazione divergente o anche una computazione che non termina perche' muore. </div><div>Void/Unit invece rappresenta una computazione che termina senza avere un valore (tipo una funzione void in C). Di fatto "ha" un valore (perche' quando fai questo tipo di modellizzazione tutto ha un valore), ma non puoi farci nulla (void). </div><div><br></div><div>Ora, c'e' parecchio casino, perche' per dire se buttiamo fuori da Java tutti i tipi primitivi (se no il type system si complica parecchio) troveremmo che null... il tipo di null deve essere un sottotipo di ogni tipo. Strettamente parlando non e' un bottom, in quanto *ha* un valore (null, appunto). </div><div><br></div><div>Da cui la mia frase confusa sopra... bottom di per se non fa nulla di male. E' uno strumento teoretico per chi vuole studiare computazioni. Il fatto di avere "null" che si traveste da bottom ma invece e' un valore e' veramente seccante. Specie perche' non ha il comportamento vero di bottom ma semplicemente spacca le palle. E grazie che c'e' Optional adesso: ma cazzo, doveva arrivare Odersky a spiegarglielo?</div><div><br></div><div>Voglio dire... ML e combriccola esistono da "un po'". Il fatto che NULL in C e C++ ha fatto piu' morti di una guerra pure non era un mistero. Poi certo... quando Java e' nato non c'era alternativa, temo. Visto come andava piano, costringere tutti ad usare il concetto di "Optional" sarebbe stato infattibile prestazionalmente (e senza avere i generics, sarebbe stato anche un delirio di cast). E' un vero peccato quando un inevitabile errore di design infesta generazioni di programmazioni per 20 anni.</div><div><br></div><div>Giusto che si parlava di =... quello e' stato un errore di design di Fortan di quasi 60 anni fa. Grazie a Fortan e grazie a tutti quelli che di decennio in decennio hanno continuato a perpetrare. </div><div><br></div><div> </div></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>