Newsgroup: it.comp.lang.c++
Titolo: Si puo' fare? (un po' lungo)

routines scritte in un altro linguaggio?
Si`, e` perfettamente possibile, e l'"altro linguaggio" in questione
deve essere il linguaggio C.  Gli standard ("di fatto", ma, grazie ad
una decisione preliminare di un giudice americano, attualmente e
sino a nuovo ordine anche "de jure"!) di Java prevedono anche la
Java Native Interface, JNI; scrivendo il proprio codice, in C, secondo
queste specifiche, esso dovrebbe poter essere ricompilato, e connesso
al resto del proprio programma Java, su tutte le piattaforme.
Sino a poco tempo fa, l'implementazione Microsoft di Java non
permetteva l'uso di JNI; il giudice suddetto, tuttavia, ha deciso (in
via preliminare) che Microsoft e` invece tenuta a supportare JNI --
le nuove versioni delle macchine virtuali Microsoft, scaricabili
gratuitamente dal sito Microsoft, permettono gia` oggi l'uso di JNI
(non ho provato personalmente, ma questo e` quel che ho visto
annunciare).
Nel 99% dei casi, il vincolo che il codice JNI debba essere scritto in
C non dovrebbe essere particolarmente limitante: sara` necessario,
e sufficiente, dichiarare extern "C" le funzioni C++ che devono essere
chiamate da Java ("metodi nativi"), e viceversa quelle del runtime JVM
che devono essere chiamate da C++.  L'uso di C++ invece di C puo`
comunque offrire molti vantaggi (template, inline, dichiarazioni solo al
momento dell'uso, exception, ecc ecc) anche se la JNI impedisce (almeno
per il codice sull'interfaccia con Java) una strutturazione ad oggetti.
Per la portabilita` al 100% del proprio codice JNI, comunque, potrebbe
essere necessario vincolarsi ad usare il C; alcune piattaforme, infatti,
potrebbero supportare correttamente alcune funzionalita` del C++ (in
particolare: chiamata dei costruttori di oggetti statici, inizializzazione del
sistema di gestione delle eccezioni, inizializzazioni delle parti di libreria
standard relative ad I/O, gestione di memoria, localizzazione, ecc), solo
se il _programma principale_ e` in C++ (non conosco alcuna piattaforma
su cui questo vincolo si applichi _oggi_, ma in un recente passato esso
non era raro), e questo e` impossibile garantirlo pienamente quando, in
realta`, il "programma principale" e` la JVM...!
Sarebbe dunque saggio testare la situazione sulle piattaforme di proprio
principale interesse, prima di investire sostanzialmente su codice JNI
in C++.  Al limite, si puo` usare il C++ dove esso e` supportato in questa
configurazione, e, per un eventuale paio di piattaforme dove il supporto
invece mancasse, ricorrere a un compilatore, analogo al compilatore
Toba gia` nominato Java -> C, che traduca il C++ in C (la Comeau
Computing vende -- US$50 -- un'ottima implementazione basata su
questo schema, 
www.comeaucomputing.com
).
Alex

 Independent FAQ" di Ross McKay.
Esistono anche le librerie Qt di TrollTech, liberamente usabili
sotto Linux per uso personale, anche se con qualche restrizione nella
distribuzione (occhio alla licenza) e commerciali (e molto costose:
circa 2.000.000 la versione base!) sotto Windows, interamente in C++.
Con esse sotto Linux e` stato creato KDE, un ambiente desktop per
la gestione dell'interfaccia grafica.
Un'ottima alternativa open-source e` il GTK (The Gimp Toolkit),
scritto in C e basato su tecnologia CORBA.
Oltre ad avere prestazioni migliori rispetto alle Qt sotto Linux
(secondo il mio modesto parere) ed essere open-source, il GTK
ha il grosso vantaggio di essere utilizzabile con svariati linguaggi:
C, C++, Perl, ... ed altri a venire , dato che i creatori (molto
sapientemente) sostengono che non tutti i linguaggi di programmazione
sono adatti a risolvere tutti i problemi.
In ambiente Linux su GTK e` stato costruito il progetto GNOME,
che ha lo scopo di fornire un insieme di applicazioni per XWindow
con interfaccia e controlli grafici coerenti, senza aver nulla
da invidiare alla GUI di Windows.
La bella notizia e` che esiste un porting del GTK anche per Win32,
con il quale e` stato creato The Gimp95 (porting del famoso programma di
disegno di GNU per Linux).Putroppo non sono riuscito ancora
a trovare un link a The Gimp95 ne` al porting del GTK.
Se qualcuno trova qualcosa...
Riguardo ad altri GUI C++ framework free, i piu` importanti (IMHO) sono:
- Open Amulet 
  Ancora in fase di sviluppo e forse ancora con qualche problema di
dimensioni
  del codice compilato e stabilita`sotto Windows.
  Proprio la settimana scorsa dalla mailing-list ho appreso che un
programmatore
  ha iniziato a mettere OpenAmulet in una DLL per Win32.
  Vedremo come procede.
- wxWindow
  Il numero di controlli che fornisce e` molto sostanzioso, con poco da
  invidiare alla ricca VCL.
  Putroppo sotto Win32 genera codice molto poco compatto.
  Provato con EGCS-Mingw32, minima applicazione: finestra con stampato
  Hello, World!, senza informazioni di debug e dopo lo stripping circa
1MB
  di eseguibile!
  Sotto Linux le cose vanno meglio, dato che esistono le shared library.
  Con wxWindow e` stato creato l'IDE per Linux WipeOut.
- V
  (Da pochi giorni e` uscita la nuova versione: 1.21)
  Dopo averlo usato e studiato per qualche mese lo ho abbandonato.
  Puo` andar bene solo per chi incomincia a programmare, ma non di piu`.
  Per esempio non e` assolutamente possibile crearsi dei nuovi
controlli,
  o derivare nuovi controlli da quelli gia` esistenti, pena dover
mettere
  le mani in una decina o piu` files della libreria.
  Non parliamo della creazione delle finestre di dialogo. Micidiale!
  Il programmatore non puo` decidere  l'esatta locazione dei vari
controlli
  sulla finestra, fa tutto la libreria. Fino alla versione 1.20 non era
ad
  esempio possibile avere un semplice testo centrato orizzontalmente
  in una finestra di dialogo, se non impazzendo con trucchi e
stratagemmi.
  Anche la sintassi per creare i controlli sulle finestre di dialogo
  e` poco chiara.
  Fino alla versione 1.20 la gestione delle applicazioni MDI sotto
Windows 
  era alquanto scomoda: una brutta via di mezzo tra il comportamento di
XWindow
  che non prevede questo tipo di applicazione, e quello di Windows.
  So cmq che nella nuova versione 1.21 le apps MDI si comportanto in
maniera
  standard sotto Win.
- FLTK
  Secondo me questo e` il migliore tra quelli che ho menzionato.
  Per le applicazioni di grafica e` molto potente.
  Possiede un ottimo supporto per OpenGL e per le librerie jpeg
  , il codice e` molto compatto.
  E` possibile crearsi nuovi componenti grafici (e molti utilizzatori
  si stanno attivando per creare nuovi controlli distribuiti fuori
  dalla versione ufficiale).
  Il look and feel e` nativo e non vengono incapsulti i controlli
  di Windows, ma usate le API di base per creare controlli proprietari.
  In questo modo la propria applicazione avra` lo stesso aspetto
  e comportamento sulle diverse piattaforme.
  Cmq proprio la scorsa settimana un programmatore ha postato sulla
  mailing list una serie di modifiche da apportare alla distribuzione
  ufficiale per poter decidere a run-time l'aspetto dei controlli
grafici.
  Tra gli stili supportati ci sono GTK e Win32.
  Il supporto allo sviluppo grazie alla mailing-list e` molto valido.
  Ogni circa 3 settimane viene pubblicata la nuova versione della
libreria.
  Con qualche leggere modifica (che sono disponibile a passare a chi
  ne abbia di bisogno) sono riuscito a compilare la libreria
  e tutti i programmi di esempio con EGCS-Mingw32 e funziona tutto bene,
  OpenGL compreso.
Tutti i links sulla pagina GUI Toolkits della mia home page.
Buon Natale e Buone Feste a tutta la platea!
_________________________________________
Roberto Gerola
e-mail: 
roge...@tin.it
www: 
http://space.tin.it/computer/rgerola

Se qualcuno trova qualcosa...
Penso che ti interessera`...:
 
http://user.sgic.fi/~tml/gimp/win32/
Buon Natale!-)
Alex

     
http://user.sgic.fi/~tml/gimp/win32/
Grazie mille! 
 
Roberto Gerola

 splendido e innovativo resti nelle sue impostazioni progettuali.
A forza di sentirne parlare (da te) mi venuta la curiosità di andarmelo a
vedere, (e ho scoperto che, come anche tu rilevi, è l'erede di InterViews, che
ebbi modo di vedere e apprezzare ai tempi delle prime release, quando lavoravo
in ambiente Unix). 
L'ho cercato con un tool di ricerca su web, e ho trovato la nuova home page:
http://www.iuk.tu-harburg.de/fresco
 (con la f minuscola).
 
A volte capita che vecchie pagine vengano lasciate in giro abbandonate a sè
stesse, senza mettere nessun riferimento a pagine più recenti, che pure
esistono. In questo caso si trova invece un link al vecchio materiale sulla
nuova home page, messa su, si vede, in modo sbrigativo, tant'è che si fa un po'
fatica a capire dove trovare
alcune informazioni e soprattutto i files.
In definitiva, comunque, il fatto è che Fresco, per fortuna, è ancora vivo e
vegeto, ed è da poco disponibile la versione 98, insieme al reference e a un
tutorial in formato PS o PDF. E c'è anche una mailing list con relativo
archivio.
I files sono scaricabili da:   
ftp://ftp.iuk.tu-harburg.de/pub/Fresco/
Saluti
Paolo