Portabilità, miti e leggende

Gli autori dei due software più noti per scaricare la posta in Pop3 da Libero danno il via a una interessante discussione sulla portabilità del codice.



[ZEUS News - www.zeusnews.it - 04-02-2004]

I programmatori di LiberoPOPs hanno scelto di rendere il codice portabile su un gran numero di piattaforme; l'autore di HTML2POP3 ha invece preferito concentrarsi sullo sviluppo per un'unica piattaforma, privilegiando la semplicità. Due visioni contrapposte, ciascuna con le proprie motivazioni. Vorremmo coinvolgere anche i lettori di Zeus News nella discussione, in particolar modo gli sviluppatori. Cosa ne pensate? La parola a Matteo Baccan, ideatore di HTML2POP3.

Nei giorni scorsi leggevo con rammarico la nota rilasciata da LiberoPOPs sulla portabilita' del codice. Com'e' vero che ognuno puo' esprimere una propria opinione, e' anche vero che chiunque puo' dissentire.

Ho letto con attenzione il documento che hanno scritto e devo dire che, per alcuni aspetti lo condivido.

Condivido che, negli anni 60-70, al posto di scrivere tutto un sistema operativo in ASM, si decise per l'utilizzo di un linguaggio di piu' alto livello che potesse dare una maggiore portabilita', e da questo l'utilizzo di C.

Concordo il fatto che questo linguaggio sia, probabilmente, il linguaggio piu' diffuso al mondo come supporto in piattaforme diverse.

Dissento pero' su alcuni passaggi e, a favore di queste mie osservazioni, riporto una vecchia intervista a Bjarne Stroustrup, autore di C++, che ho potuto fare nel lontano dicembre 2000, pubblicata a marzo 2001 su DEV.

C e' sicuramente un linguaggio con un libreria di base povera, dato che le librerie standardizzate si possono veramente contare sulla punta delle dita, mentre C++ diverge da questo fatto, dato che integra un maggior numero di librerie standardizzate di base. Entrambi pero', se guardiamo allo standard, sono inferiori a Java. Per voler fare degli esempi semplici, possiamo parlare di Thread e Socket, due aspetti importanti per lo sviluppo di un prodotto come HTML2POP3 o LiberoPOPs.

Stroustrup stesso lamentava questa carenza, dicendo pero' che, grazie alle librerie di terze parti, queste lacune erano colmate. Criticava inoltre il fatto che, implementazioni come Java o Ada, che hanno questo tipo di supporto, possono non sfruttare al massimo un sistema per il fatto che non supportano i Thread in maniera nativa, ma astratta.

Inoltre affermava che, le librerie per C++, erano sicuramente superiori in numero e funzionalita', rispetto a quelle Java. Questo almeno 3 anni fa. Quindi, per non trasformare questo discorso in pura accademia, vediamo di fissare dei punti sulla carta e capire a quale conclusione arrivare.

C e C++ sono sicuramente linguaggi piu' diffusi di Java, ma necessitano di ricompilazione obbligatoria sulle piattaforme dove devono essere utilizzati.

C e C++ soffrono di problemi di buffer overflow, problemi sconosciuti a Java, soprattutto per la mancanza di puntatori, per tale ragione si ricorre all'utilizzo di libreria di terze parti per evitare di incorrere in questi problemi.

Java ha una libreria di base sicuramente piu' ricca di C e C++, che suppliscono a queste carenze con librerie di terze parti.

Alla luce di questo, si puo' tranquillamente parlare di linguaggi, tutto sommato, paritetici, se parliamo di funzionalita' date, sia dalle librerie standard che dalle librerie di terze parti.

Inoltre e' importante pensare che Java, in realta', si basa su un kernel C, e quindi, quando usiamo Java, stiamo usando un motore C che fa girare del bytecode Java, anche se, grazie ai nuovi compilatori JIT, quello che viene eseguito e' molto piu' vicino a del codice nativo che a un mero interpretato.

Tutto questo discorso per arrivare a una conclusione o meglio, a una non conclusione. Possiamo scrivere tutti i programmi che vogliamo in tutti i linguaggi che vogliamo, questo non e' importante. I linguaggi moderni sono in grado di avere, nativamente, o grazie a librerie esterne, tutte le funzionalita' che ci servono.

E' vero pero' che alcuni linguaggi siano piu' "facilmente" portabili di altri, questo pero' non significa che siano piu' "portabili" di altri.

C e' piu' portabile di Java, Java e' piu' facilmente portabile di C. Questo lo si deduce anche dal numero di righe di codice personalizzato che occorre scrivere in un programma C per poterlo portare, ad esempio, da Unix a Windows o viceversa, oltre agli errori che vengono dati da una gestione diversa delle librerie standard, dato che sono sviluppate da aziende diverse e non concentrate sotto una sola azienda, problema notato anche da Stroustrup.

Quindi, non focalizziamo i problemi sul linguaggio utilizzato, vanno bene tutti. Mi ricordo quando ho iniziato a pensare a HTML2POP3, la prima implementazione che ho trovato, dei suoi concetti di base, era un pezzo di codice scritto in PERL da un altro programmatore.

Per quanto riguarda la moda, questo e' un altro discorso. Ho lavorato per anni in ASM, Clipper, C e C++, passando giornalmente da un linguaggio all'altro. Poi ho studiato Delphi, Java e C#. Ognuno di questi linguaggi ha pregi e difetti, ma con ognuno di questi si sarebbe potuto scrivere un prodotto come HTML2POP3, bastava pazienza e applicazione.

Lavorando in ASM si poteva provare a usare un metacompilatore, o per assurdo si poteva scrivere un codice e poi eseguirlo in emulazione su altre piattaforme, partendo da un prodotto come bochs, ed adattandolo, anche se entrambe le soluzioni sarebbero state un bagno di sangue.

Con Clipper si sarebbe usato Harbour, la sua versione cross-platform, C-based. Con C e C++ si sarebbero usati i compilatori nativi Unix o le versioni portabili Windows, OS/2 etc, come Cygwin. Con Delphi occorreva usare FreePascal, supportato per Amiga, QNX, SunOS, Win32, Linux, FreeBSD e altri. Java viene fotunatamente supportato da casa Sun su piattaforme diverse. C# poteva girare in ambiente Windows, con .NET SDK, e in Linux/Unix grazie a Mono. Quindi, non importa quale compilatore usare, ma quali sono gli obiettivi del progetto.

Personalmente non volevo spendere notti su notti su questo programma. Due giorni per la prima implementazione e un po' di lavoro per l'ottimizzazione sono stati abbastanza per ottenere un prodotto utilizzabile su un numero decente di piattaforme, non tutte, lo riconosco, ma almeno senza aver speso un solo secondo a pensare a file di make, switch di compilazione, parametri gestiti in maniera non standard da un compilatore piuttosto che un altro, codice condizionale e cosi via.

Sono contento del risultato raggiunto, soprattutto in relazione allo sforzo fatto. Potessi ripartire potrei anche riscrivere tutto in un altro linguaggio, in C++, ad esempio, ma per pura sfida personale, anche se pensandoci tutto questo non avrebbe minimamente senso.

Se questo articolo ti è piaciuto e vuoi rimanere sempre informato con Zeus News ti consigliamo di iscriverti alla Newsletter gratuita. Inoltre puoi consigliare l'articolo utilizzando uno dei pulsanti qui sotto, inserire un commento (anche anonimo) o segnalare un refuso.
© RIPRODUZIONE RISERVATA

Commenti all'articolo (4)

Fabrizio
Un oasi.. Leggi tutto
17-2-2004 11:14

Romano
Tutti buoni ma forse no Leggi tutto
10-2-2004 11:18

Giovanni
Mah.... Leggi tutto
6-2-2004 11:16

fatto bene Leggi tutto
6-2-2004 09:37

La liberta' di parola e' un diritto inviolabile, ma nei forum di Zeus News vige un regolamento che impone delle restrizioni e che l'utente e' tenuto a rispettare. I moderatori si riservano il diritto di cancellare o modificare i commenti inseriti dagli utenti, senza dover fornire giustificazione alcuna. Gli utenti non registrati al forum inoltre sono sottoposti a moderazione preventiva. La responsabilita' dei commenti ricade esclusivamente sui rispettivi autori. I principali consigli: rimani sempre in argomento; evita commenti offensivi, volgari, violenti o che inneggiano all'illegalita'; non inserire dati personali, link inutili o spam in generale.
E' VIETATA la riproduzione dei testi e delle immagini senza l'espressa autorizzazione scritta di Zeus News. Tutti i marchi e i marchi registrati citati sono di proprietà delle rispettive società. Informativa sulla privacy. I tuoi suggerimenti sono di vitale importanza per Zeus News. Contatta la redazione e contribuisci anche tu a migliorare il sito: pubblicheremo sui forum le lettere piu' interessanti.
Sondaggio
Fidanzati sospettosi o inguaribili diffidenti, qual è la vostra arma preferita tra quelle che Facebook mette a disposizione di voi gelosoni per controllare il vostro partner?
I cuoricini in bacheca: un segno per far sentire sempre e dovunque la propria presenza, nonché un espediente per marcare il territorio del partner.
L'applicazione "Chi ti segue di più?": bisogna convincere il partner a usare questa applicazione (apparentemente innocua) per scovare eventuali vittime da annotare sulla propria black list.
Facebook Places: permette di taggare compulsivamente il partner e rendere noto al mondo intero il fatto che lei e il suo lui si trovano sempre insieme.
L'auto tag nelle foto: indispensabile strumento per essere certi di ricevere notifiche qualora un'altra persona osasse commentare o piazzare "Mi piace" alle foto del/della partner.
I commenti minatori: il simpatico approccio ossessivo-compulsivo verso chi tagga il partner o ne invade la bacheca. Di solito consiste in un discreto: "Che bello il MIO amore!"
Il profilo Facebook in comune: un unico profilo scoraggia anche il più audace dei rivali dal tentare un approccio.
La password nota al partner: Della serie: "Amore, se non mi nascondi niente allora posso avere la tua password?". Nessun messaggio di posta, commento o notifica è al sicuro.
Il tasto "Rimuovi dagli amici": una volta in possesso della password del partner, qualsiasi rivale dalla foto profilo provocante o la cui identità è sconosciuta verrà subito rimosso dagli amici.
La trappola: spacciandosi per il partner (password nota), si inizia a contattare i presunti rivali e testare le loro intenzioni con domande e allusioni per far cadere in trappola anche i più astuti.
Il Mi piace minatorio: post, foto, tag, nuove amicizie sono regolarmente marchiati da un Mi piace del partner. Dietro una parvenza di apprezzamento, dimostrano quanto in realtà NON piaccia l'elemento.

Mostra i risultati (438 voti)
Luglio 2026
La funzione che cancella lo smartphone ti mette nei guai con la legge
Diritto alla riparazione, garanzie più lunghe e nuovi obblighi per i produttori
Identità digitale facoltativa, l'UE ammette l'iniziativa. Ora tocca ai cittadini raccogliere firme
Modelli IA fuori controllo evadono dalla sandbox e sferrano un attacco hacker da soli
L'app ministeriale per confrontare i prezzi dei carburanti
Il font che gli umani leggono ma manda in crisi le IA generative
PayPal crolla e diventa preda
Basta una dieresi per mandare in crisi l'app IO
Furgone segue il navigatore e arriva a un rifugio di montagna
Microsoft: preparatevi a un diluvio di patch
Torlink, il motore torrent da terminale che unifica ricerca e download
La stampante completamente open source è quasi pronta
Windows 11 identifica ogni PC con un codice unico: così è stato arrestato un diciannovenne
Certificati, finalmente la PA accede direttamente all'Anagrafe Nazionale
Il bug in Windows 11 che divora fino a 70 GB di spazio
Tutti gli Arretrati
Accadde oggi - 28 luglio


web metrics