PDI^2

Java type safe? Non mi pare

programmazione, java, fastidio November 6, 2005 4:41 pm (Save post)

Zefram si lamenta per gli argomenti insensati degli esami. Ne avrei da dire pure io ma sto seguendo troppo poco per farlo :)
Ad ogni modo, mi attacco per un rant a questo:

l docente mostra una slide con scritto Da C a Java (sola andata) - e io commento: “sta scherzando, vero?”. Solo perché un linguaggio è type safe, garbage collected e portabile mica vuol dire che è meglio; se poi è Java - beh, lasciamo stare…

Premesso che beh, in effetti IMO java è meno vulnerabile del C per un bel po’ di ragioni, vorrei insistere sul fatto che java non è type safe.

I buchi nel type system di java (che ci sono anche nella versione 5 AFAIK) sono almeno tre, e prima o poi ci sbattono la testa tutti:

NullPointerException, quel simpaticone
Il semplice spezzone di codice:

String string= null;
string.concat( "hello");

fa un bel botto. Certo, questo è banale, ma un null pointer capita fin troppo spesso in bocca ad un metodo.

ClassCastException, il rompiscatole

Non solo questo codice fa esplodere allegramente il nostro programma:

Object foo=new Object();
String string = (String) foo;

ma questo:

Object foo=null;
String string = (String) foo;

va bene, col risultato che magari qualche bug finisce pure nascosto.
La cosa bella è che per evitare un’eccezione bisogna fare un bel controllo con instanceof.
Il che è assolutamente uguale a quello che si fa nei linguaggi in cui i controlli sui tipi si fanno a runtime (con la differenza, che almeno. in questi l’equivalente di null è un oggetto, il che ha parecchi vantaggi).

ArrayStoreException, il subdolo

Il codice incriminato è questo:

Object obj[] = new String[3];
obj[0] = new Integer(0);

I tecnicisti direbbero che il problema è che gli array in java sono covarianti.
Il problema, di nuovo, non è in queste semplici assegnazioni, ma nel passaggio di parametri. Se io passo un array di List dove il metodo si aspetta un array di Object il programma fa un bel botto.

La cosa bella è che questi problemi non sono intrinseci ai linguaggi con tipi statici. Essi possono essere risolti, semplicemente i progettisti di java non l’hanno fatto.

Va poi considerato che java ha tutta una serie di altri problemi che potrebbero essere risolti in maniera migliore. Ad esempio, per iterare su un array si fa a mano, il che è error prone (ecco a voi ArrayOutOfBoundException) mentre in altri linguaggi esistono meccanismi builtin per farlo che evitano questi errori (ma forse il for in java 1.5 risolve questo problema?).
Vabè, però sono solo i puristi che dicono che la dimensione di un array fa parte del tipo (dependent types, hint hint)

Boh, mi pare che ce ne siano anche altri ma al momento non mi vengono in mente, ma il punto è: java non è type safe come vogliono farvi credere ;)

Live Safety

win, web, software 11:16 am (Save post)

Il nuovo servizio live di microsoft (che poi mi chiedo quanto spenda microsoft per acquistare domini come live.com, passport.net e via dicendo) offre anche alcuni simpatici servizi online.

Non funzionano con firefox in quanto sono basati su activex, ma se avete ancora un’installazione windows avrete comunque IE da qualche parte anche se magari avreste preferito di no.

Tra i servizi di safety.live.com ci sono anche defrag, pulizia del disco e controllo antivirus.
Non dico che le prime due serva a qualcosa farle da lì, ma avere un antivirus free (as in beer), discretamente veloce (la prima volta si devono scaricare gli activex ed è un po’ più lento ma le volte seguenti è abbastanza efficiente) e che soprattutto non ammazza la macchina, è sicuramente una ottima cosa per l’utenza windows.

Per quel che mi riguarda ho provato le due scansioni (quick e full), ed il risultato è che non sembra io sia infestato dai virus, sebbene rifugga dagli AV da 6 anni. Sarà perché non uso outlook immagino :)

Get free blog up and running in minutes with Blogsome
Theme designed by Janis Joseph