[Python] un bel dilemma

enrico franchi enrico.franchi a gmail.com
Mar 28 Lug 2015 16:04:20 CEST


2015-07-28 13:39 GMT+01:00 Carlo Miron <miron a python.it>:

>
> > Ehm... *se* fosse Python valido, quell'if valuterebbe sempre a vero (a =
> 3,
> > varrebbe 3) e stamperebbe 3.
>
> e chi te lo dice? conosco almeno un (meraviglioso™) linguaggio in cui
> il valore restituito sarebbe il-valore-precedente-di-a.
>

Diciamo che lo riterrei parecchio probabile... a che linguaggio ti
riferisci per inciso?



>
> >> Poi, vabbè, evitiamo proprio di iniziare il discorso null/bottom, penso
> si
> >> sia tutti d'accordo ;)
> >
> > Fondamentalmente si. Dal punto di vista della type theory pero' *hai*
> > bisogno di un bottom type logico. Non necessariamente deve essere
> > esprimibile come un valore: anzi, il problema e' proprio che puoi
> esprimerlo
> > come un valore.
>
> cosa intendi, scusa? </gnurant>
>

Allora, se vuoi modellare una computazione fal punto di vista formale, hai
bisogno che ogni "operazione" abbia un tipo.
O per lo meno lo fai se stai facendo type-theory.

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.
Con bottom puoi modellizzare tante cose; per dire una computazione
divergente o anche una computazione che non termina perche' muore.
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).

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).

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?

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.

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.


-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150728/152b88ae/attachment.html>


Maggiori informazioni sulla lista Python