torna ad essere corsi base, Re: [Soci SLIP] Android e Java [Era: corsi base]

Lucio Crusca lucio a sulweb.org
Mar 15 Gen 2013 14:17:22 CET


Al fondo c'è un punto di convergenza fra le nostre opinioni. Quando l'ho 
trovato avevo però già risposto punto per punto a tutto il resto dell'email e 
dato che qua e là ci sono informazioni che potrebbero essere utili, non mi 
metto a cancellare e riscrivere, ma invio così. 

In data martedì 15 gennaio 2013 12:05:04, loredana ha scritto:
> Chi sviluppa non è obbligato a sviluppare software libero, ma se
> pretende di essere creduto quando dice che lo fa, allora non può
> esimersi dal rilasciare il codice. Altrimenti sta ovviamente ciurlando
> nel manico.

Dove sta scritto nella GPL che il rilascio del codice prevede 
obbligatoriamente anche di mettere un link al codice sulla lista SLiP?

> Perciò, se è così (hai rilasciato con licenza libera e quindi ci puoi
> mostrare il codice), bene, molto bene. Se non è così, pace, ma allora
> rientri, come tutti o quasi, nella categoria di chi usa il software
> libero per sviluppare software non libero, sia esso open o
> proprietario (se non puoi rilasciare il codice, di sicuro è
> proprietario). 

L'errore che fai è questo. Non ho detto di non poterlo rilasciare, tant'è che 
l'ho già rilasciato e ti ho portato un esempio. Ho solo detto di non poterlo 
mettere qui in lista per motivi di decisioni associative riguardo a come si 
usa questa lista. Internet però non finisce qui in questa lista, c'è molto 
altro fuori di qui sai.

> libero. E DEVI DIRLO, SE è così, quando insegni ad altri e ti rivolgi
> ad altri su una lista di software libero (da statuto, di cui sei
> presiedente), altrimenti propaghi una falsità, menti sapendo ben di
> mentire. 

Credo che tu stia delirando senza saperlo.

> senza andare troppo lontano, con me in lista, questo non è un rischio,
> è una certezza. 

L'unica certezza con te in lista è che tutti i giorni ho qualcosa per cui 
sorridere.

> Per questo dico che prima o poi la smetterai. Perché
> so che non la smetto io e sono in pieno diritto nel farlo, su una
> lista di software libero. 

Il tuo diritto è identico al mio, ovviamente.

> E, a livello personale, quello che piace
> tanto a te, sappi che con me non funziona attaccare come un torello, a
> me non fa nessun effetto, un po' di compassione (nel senso di patire
> con, in questo caso, con te), neppure un briciolo di rabbia.

Sì sì vero, la concitazione delle tue parole rispecchia proprio questo...

> L'unica
> cosa che mi fa effetto è dimostrarmi che mi sbaglio in quel che dico e
> scrivo e finora posso dirti che in questo thread non è successo.

Ti sei sbagliata su molte cose e te l'ho dimostrato. Purtroppo anche questo 
non è serivo, ma come dicevo, almeno sarà servito a chi ci legge per trarre 
qualche informazione utile.

> Se il C non fosse portabile non esisterebbe il software libero nè il
> kernel linux.

Il kernel linux, tutto il sistema GNU e tanti altri software scritti in C sono 
portabili, ma non sono portabili nel senso di Java. Sono portabili a costo di 
una notevole fatica nello sviluppo del codice e a costo di ricompilare il 
codice per ogni piattaforma. Java permette di non fare questa fatica.
Aspetto sempre il player audio portabile scritto in Perl.

> Se invece vuoi un applicativo, prendi emacs. Ovviamente, ce ne sono
> moltissimi altri. QUALSIASI linguaggio che sia compilato o
> interpretato permette di sviluppare applicazioni portabili da un
> sistema all'altro. Compreso il fortran 77 (lo avevo fatto io, ma non è
> questo che conta, lo può fare chiunque lo sappia fare).

Che sia possibile ci sta, come dicevo tutto è possibile a partire da Brainfuck 
in poi. Il punto è quanta fatica devi fare per ottenere la portabilità in quei 
linguaggi. Con Java ottenerla è molto più semplice, basta non andarsi a 
cercare i problemi mentre sviluppi ed ottieni un compilato portabile. Con C, 
come minimo, devi ricompilare, ma spesso devi anche riscrivere parti di 
codice, una per ogni specifica architettura su cui vuoi farlo funzionare, e 
farle compilare condizionatamente. Con Perl (e tutti gli altri interpretati) 
scrivi una sola volta, ma ti accontenti di quel che c'è e non hai i vantaggi 
della compilazione (esempio controllo statico dei tipi e se anche ce l'hai non 
serve ad un emerito in quanto negli interpretati viene comunque eseguito a 
runtime).

> Tutti i
> linguaggi moderni (assembler e linguaggi macchina a parte) sono
> compilati o interpretati o vengono con il loro corredino di macchina
> virtuale, come java e derivati. Se il compilatore ha un back end per
> architteture diverse, allora ogni applicazione sviluppata in quel
> linguaggio e compilata con quel compilatore gira su tutte quelle
> architetture.

Certo, ma devi ricompilare. Hai idea del casino che sia ricompilare per N 
architetture (N*2 se distingui fra 32 e 64 bit) ogni volta che fai una nuova 
release? E se la compilazione per una particolare architettura fallisce e le 
altre no? E se una libreria per una particolare architettura non esiste nella 
versione presente e necessaria per un altra architettura? E se capita uno dei 
mille altri casi particolari?

> Sentito parlare di cross-compilazione? 

No mai. Io pensavo che gli sivluppatori C avessero a casa un computer di ogni 
tipo esistente o che chiedessero a qualche amico di compilare per loro. :)

Fino al 2000 sono stato io stesso uno sviluppatore C e C++.

> Prendi debian. Ma
> forse tu non sai su quante architetture diverse gira debian. Ma prendi
> anche solo una distribuzione qualsiasi. Mica uno si installa i
> sorgenti e ricompila. Come mai può usare i binari? Grazie,
> sostanzialmente, a gnu libc. 

No, grazie al fatto che qualcuno li ha già ricompilati per lui. Il discorso 
però riguarda gli sviluppatori, non gli utenti. Non c'è nessuno che ricompili 
il codice per gli sviluppatori, devono farselo.

> Forse adesso è il caso per te di smettere di scrivere in buona o
> cattiva fede falsità così palesi. Nel primo caso rivelano ignoranza,
> nel secondo che probabilmente la bile ti fa smettere di ragionare.
> Una debolezza da curare. 

Wow, non pensavo che fossi anche medico. Comunque è sempre meglio sentire il 
secondo parere prima di operare... fortuna che non mi offendo facilmente, 
altri ti ci avrebbero mandato da un po'. Non ti sfiora neppure l'ipotesi di 
non sapere tutto?

> In ogni caso, l'informatica non la riscrivi
> tu a modo tuo perché a te piace java. I compilatori e la loro funzione
> non li cancelli tu, E neppure decidi tu, a seconda della tua
> convenienza, cosa sia il progetto GNU o il software libero o la
> portata della teoria di Turing.  

Lo so, lo so, queste sono tutte cose che competono a te, non mi sognerei mai 
di toglierti tale prerogativa.

> Per quanto strilli e per quanto ti danni, a chi ti legge resta sempre
> la possibilità di verificare di persona, se lo vuol fare. 

Possibilità che fortunatamente resta anche per quel che scrivi tu.

> E' solo
> basandosi sulla pigrizia e sull'ignoranza che si può continuare a
> mentire alla gente. Ma non sempre e non tutti restano pigri ed
> ignoranti, qualsiasi sia l'argomento che finisce per interessarli.
> Questo dovrebbe indurre tutti alla prudenza (e alla calma). 

Sì, la calma. Ne stai dando una prova tangibile.

> > Java è portabile, ma in più è compilato e
> > il binario compilato è pure lui portabile.
> > Java inoltre offre qualsiasi
> > funzionalità si possa immaginare. Allo stesso modo di Java sono portabili
> > anche altri linguaggi (Clojure, Groovy, Scala, ...), ma guarda il caso
> > sono tutti linguaggi che alla fine compilano eseguibili per la Java
> > Virtual Machine.
> 
> Anche TUTTI, ma proprio TUTTI i linguaggi per cui c''è un compilatore,
> libero o proprietario che sia, per una virtual java machine, così come
> per una virtual o real machine.

No, se il compilatore è per una real machine (linguaggi C, Fortran77, etc...), 
la portabilità del compilato non c'è (altrimenti a che serve inventarsi una 
virtual machine?). Se è per una virtual machine non Java allora sì, nella 
misura in cui quella virtual machine esiste per tutte le architetture e nella 
misura in cui la libreria standard del linguaggio sia davvero standard, ovvero 
offra le stesse funzioni su tutte le architetture. Ad oggi io conosco solo 
Java e derivati con queste caratteristiche.

> Dai, smetti di aggrovigliarti su un
> errore di fondo. Non arriverai ad aver ragione. 

Questa non è solo calma, questa è flemma inglese direi. Comunque nel mio torto 
marcio aspetto sempre il player audio portabile fatto in Perl.

> Piuttosto fai come
> faccio io, 

Sì sono tentato, un attimo che ci penso...

> quando mi fanno capire dove sbaglio: sono riconoscente
> perché posso imparare qualcosa di nuovo.

Questa è bella, mi dispiace che tu non sia famosa abbastanza, altrimenti la 
metterei su Wikiquote!

> Spesso correggere un'idea
> errata ha conseguenze profonde e benefiche, passato il bruciore
> dell'amor proprio ferito. 

Ti brucia quindi?

> Anche quel bruciore è un ottimo segno e fa
> bene. 

Ottimo, allora non devi preoccuparti.

> Aiuta a sbagliare meno per sentirlo meno, cioè spinge ad
> imparare. Questo fa sempre bene, a sè e agli altri.

Allora sono tranquillo di non averti ferita prondamente.

> Tornando ora alle sciocchezze, come vedi, ho cominciato prima (11 <
> 16), 

Io facevo esercizio già da 8 però...

> Sei maledettamente in errore, qui. Quella di Turing non è una teoria
> qualsiasi che si è inventato qualcuno un mattino. E' la teoria che
> definisce in modo completo cosa sia calcolabile e cosa no, perciò
> l'intera scienza dell'informazione. Se mai la studierai e ne capirai
> la portata, ne trarrai un enorme vantaggio per capire quello che fai
> tutti i giorni

E chi lo nega? (l'ho già studiata a suo tempo, per questo ne parlo)

> (e la smetterai con questa storia di java come
> linguaggio particolare, ma questo è niente in confronto a quante altre
> cose ti saranno ovvie).

Java è particolare come è particolare qualsiasi altro linguaggio. Java ha 
dalla sua la portabilità del codice compilato a fatica quasi zero, il 
controllo stretto dei tipi, una libreria infinita (tutto software libero), una 
diffusione di tutto rispetto e le caratteristiche di sicurezza intrinseche, 
ereditate dal fatto che esegue in una macchina virtuale. Altri linguaggi hanno 
altri vantaggi. Java ha dei difetti, tra cui la mancanza di closures e lambda 
calcolo (verrà forse aggiunto nella versione 8), una sintassi prolissa, una 
curva di apprendimento non delle più semplici, un certo peso in termini di 
risorse necessarie (equivalente ad una certa lentezza in confronto ad altri) 
ed il fatto di essere compilato, perché non è solo un vantaggio ma per altri 
aspetti è uno svantaggio.

L'errore lo commetti tu nel dire che tutti i linguaggi sono equivalenti. È 
vero solo in teoria, ma in pratica poi il linguaggio che ti permette di 
sviluppare un software con meno fatica di un altro è praticamente migliore. E 
non esiste un migliore in assoluto, esiste il migliore per un determinato 
software, ovvero per un determinato insieme di funzioni da implementare. Se 
per un determinato software la portabilità è una caratteristica 
irrinunciabile, la sicurezza pure e le prestazioni non sono così importanti,  
Java è un'ottima scelta. Per altri software sono più importanti altre 
caratteristiche e in quel caso la scelta migliore sarà un'altra. Nulla vieta 
di sviluppare qualsiasi cosa in qualsiasi linguaggio, ma ci sono cose più 
adatte a certi obiettivi e cose meno.

Immaginando che tu sia d'accordo su quanto scritto qui sopra (almeno su 
questo), l'unica informazione sbagliata che sto cercando di correggere da 
giorni è quella che tu hai dato riguardo alla non portabilità di Java. Non sto 
dicendo che è portabile per dire che è in assoluto meglio di altri. Sto 
dicendo che la portabilità è una delle caratteristiche chiave di Java che 
pochi altri linguaggi hanno (solo quelli derivati da Java). Ciò non toglie che 
Java abbia dei difetti e che ci siano altri linguaggi altrettanto validi se 
non di più.

Io non sviluppo solo in Java, so che non è sempre la scelta migliore. Sviluppo 
prevalentemente in Java perché mi piace, ma ho sviluppato anche in C, C++, 
PHP, Perl, Python e addirittura in Bash e Basic (non Visual Basic di MS, 
quello l'ho anche fatto ma solo a livello di patching di sotware 
preesistenti). Per questo motivo conosco i punti deboli di ognuno e se dico 
che la portabilità è un punto debole di tutti questi tranne Java, non intendo 
dire che non sia possibile scrivere codice portabile con questi, intendo dire 
che quello che risolve meglio il problema della portabilità è Java. E Turing 
può ficcarsi la sua macchina dove dico io! :D (che vuol dire, in modo meno 
scurrile, che la teoria computazionale va bene, ma in pratica quando fai un 
programma c'è un motivo preciso per cui non usi Brainfuck anche se sarebbe 
possibile).

> fronzoli, e hanno tutto l'essenziale: questo ne fa lo strumento adatto
> per capire.

Certo, sono d'accordo, ma è un discorso completamente diverso dal confrontare 
linguaggi realmente utilizzati sulla base dei loro pregi e difetti.

> Per ogni cosa c'è lo strumento giusto, non c'è un solo strumento. Se
> ti limitassi a dire che java è comodo per certe applicazioni nessuno,
> non certo io, si prenderebbe la briga di perder tempo a discutere se
> sia vero o meno. Non fai che ripetere ovvietà, quando dici che java è
> comodo per cose per cui fortran non lo è. Non è un'osservazione acuta,
> non è qualcosa che interessi discutere.

Ohhh finalmente ci siamo capiti. Non voglio dire che è quel che ho sempre 
detto, perché non essendo bravo ad esprimermi è ben possibile che non lo abbia 
detto, però è di certo quel che ho sempre inteso dire. Java è comodo per 
quelle applicazioni dove la portabilità è un requisito importante e quel che 
ha fatto l'agenzia delle entrate è una porcheria che però non si può imputare 
a Java solo perché l'ha fatta in Java. L'agenzia avrebbe probabilmente fatto 
una porcheria con qualsiasi altro linguaggio.







Maggiori informazioni sulla lista Soci