Newsgroup: it.comp.os.dibattiti
Titolo: Java vs .net

Quali sono i vantaggi di .net rispetto a java (perche' se l'hanno fatto
dopo dovra' pur avere dei vantaggi...) ?
E se e' multipiattaforma, va anche in OS non-MS ?
Chi di voi l'ha provato, cosa ne pensa?
(scopritelo su Rieducational Channel)
PS: Questo post e' della serie: oggi ho proprio TANTO da fare... :)
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 PS: Questo post e' della serie: oggi ho proprio TANTO da fare... :)
Per la serie: anch'io ma c'ho anche lo scazzo... ;-P
Alessandro.

 Per la serie: anch'io ma c'ho anche lo scazzo... ;-P
Eh, capita! ;)


 l'unico che avra' il supporto .net probabilmente sara' IE.
Non credo ti sia molto chiaro cosa sia .net.


Intanto su Mozilla 1.4 hanno implementato l'autenticazione NTLM
(presumibilmente per risolvere i problemi che molti utenti avevano con i
proxy MS...)
P.S.
A quanto pare i progetti sono due: c'e' anche 
http://www.go-mono.com
Alessandro.

 E se e' multipiattaforma, va anche in OS non-MS ?
Microsoft stessa ha rilasciato dei porting per FreeBSD e MacOSX. Perň č 
tutt'altra cosa l'essere multipiattaforma
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.1. C, C++ and ASM developers
                               and beta testers are welcome!

PS: Questo post e' della serie: oggi ho proprio TANTO da fare... :)
ma la butto la pure io va, che devo aspettare mentre scarico gli
appunti di progettazione del software.
ATTENZIONE:ciò che segue potrebbe essere un'ammasso di idiozie
Dunque: c'è il solito bytecode, solo che è pensato per essere JIT'tato
più che per l'interpretazione.
C'è il supporto per il versioning delle librerie anche se installate
contemporaneamente, e (mi pare ) per la firma digitale, la lingua e
cose così.
C'è un sacco di roba tipo ejb/middleware generico (chiamate remote,
MANIFEST per il deployment dei componenti, roba così)
La cosa più interessante è il supporto multilinguaggio.
 In pratica esiste un Common Type System che è comune a tutti i
linguaggi, e delle strutture che sono simili tra tutti i linguaggi
.net compatibili (che ne so, eccezioni, OO, ereditarietà singola, GC).
Ciò permette di usare i compilati di qualunque linguaggio da qualsiasi
altro e bla bla..
C# è visibilmente java rinominato ;)
Tra l'altro anche lo sviluppo che seguono è lo stesso: le ultime news
parlano dell'introduzione futura di generics e iteratori.
Una differenza che mi pare di aver notato è la possibilità di
specificare nei metodi se si vuole passare un parametro per
riferimento o per valore, ma forse deliro.
Nel complesso .net sembra figo, ma java imho sta un bel pezzo avanti
come supporto commerciale , esitono tonnellate di librerie, ide,
framework, che .net impiegherà un po a recuperare
Tutto ciò riconduce ancora una volta alla Teoria Della Grande
Collisione Dei Linguaggi [tm], in cui tutti avranno lambda, oggetti,
iteratori CLU-like, macro LISP-like a livello di interprete ed un
tocco di continuazioni.
Parrot, imho, è un progetto molto più divertente :)

 E se e' multipiattaforma, va anche in OS non-MS ?
Ci sono in svuluppo porting di .net su unix.
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

 l'overloading degli operatori, la possibilità di utilizzare i puntatori
a me sembra che questi due ci siano: l'overloading esiste e i puntatori ci
sono, solo non con tutta l'aritmetica del C.

 riferimento o per valore, ma forse deliro.
perché, non basta una referenza per fare questo? :-)
ovvio che non puoi fare
int i;
funzione (&i);
ma quelli che hanno fatto java lo hanno voluto fare spinto object oriented
e per passarlo devi passare una referenza all'oggetto che incapsula l'int.

PS: Questo post e' della serie: oggi ho proprio TANTO da fare... :)
Già :) Speriamo comunque che non ne esca un altro flame
-- 
Lawrence "Rhymes" Oluyede
http://loluyede.blogspot.com
UGIdotNET - User Group Italiano .NET  
http://www.ugidotnet.org

l'unico che avra' il supporto .net probabilmente sara' IE.
Non esistono applet in .NET (per fortuna) e quindi non esiste nulla
tipo il Java plugin. Lato server puoi programmare con 
ASP.NET
 o
scrivere web service e quindi il client non deve avere installato
proprio un bel niente. L'unico caso via web in cui il client deve
avere installato .NET è se decidi di fare quelli che vengono definiti
"rich client" ma è una tua scelta arbitraria


framework, che .net impiegherà un po a recuperare
Beh diciamo che è un pò indietro a livello enterprise ma si sta
riprendendo bene..


aspetti il C# (e di conseguenza .net) superiore a Java.
Anche io :)


 sono, solo non con tutta l'aritmetica del C.
Scusa, ma dove hai visto l'overloading degli operatori ed i puntatori in
Java?


 l'ambiente ecc ecc č tutto identico
Intendevo da un punto di vista tecnico, non commerciale.


e per passarlo devi passare una referenza all'oggetto che incapsula l'int.
La differenza è che in C# e in .NET anche i tipi primitivi sono
oggetti, tramite una procedura chiamata "boxing" vengono trasformati
in oggetti all'occorrenza.


sono, solo non con tutta l'aritmetica del C.
L'overloading degli operatori in Java non mi risulta proprio e idem
per i puntatori. 


Intendevo da un punto di vista tecnico, non commerciale.
Appunto, per quanto tecnicamente io possa essere daccordo con te (C# è
stato costruito apposta per .NET) teoricamente non c'è differenza tra
i vari linguaggi, tant'è che parecchie persone (anche sviluppatori MS
o gente che ci ruota intorno) conosce si C# ma per lo più usa 
VB.NET
Anche se appena arriveranno i generics dovranno redimersi :P


 in oggetti all'occorrenza.
Non solo, dimenticavo che in C# è possibile creare value type con
storage automatico sullo stack, mentre *tutti* gli oggetti Java sono a
storage dinamico (e garbage collected) su heap.


 storage dinamico (e garbage collected) su heap.
Piu` leggo queste cose, piu` Java mi spaventa.
Piuttosto, avranno avuto una ragione per fare
cio`, qualche idea?
bye,
-- 
   Piergiorgio Sartor

 cio`, qualche idea?
Incapacità?


cio`, qualche idea?
Si dice che Roma non sia stata costruita in un solo giorno, Java per
alcune cose pare di si :)


pessima caratteristica di questo linguaggio.
Wow H.P.L. che tifa per una cosa partorita in seno a MS proprio non me
l'aspettavo :P


 Anche se appena arriveranno i generics dovranno redimersi :P
I generics sarebbero i template? O qualcosa di simile?
Saluti.

 framework, che .net impiegherà un po a recuperare
Peccato che tutte le Ide per Java messe insieme non valgono un decimo
di 
VS.NET
 o di Matrix :-)
Saluti.

 Anche se appena arriveranno i generics dovranno redimersi :
Mi pare di ricordare che a Redmond  dissero che i generics staranno pure su
VB :-)
Saluuti.

 Java?
il sovraccarico degli operatori c'è. E' possibile specificare lo stesso
metodo con un diversi argomenti. Al posto dei puntatori hai le referenze,
che non permettono, ovviamente, di accedere ad indirizzi hardware della
macchina e hanno una aritmentica ridotta rispetto al C. Questo non vuol
dire che non esistano.

 storage dinamico (e garbage collected) su heap.
scusa, e questo che guadagno ti dà?

 l'aspettavo :P
Non riesco a capirne il senso... perché può averne 2 molto differenti.


 ridotta rispetto al C. Questo non vuol dire che non esistano.
Utile qualcosa che c'è ma non puoi utilizzare... 


 scusa, e questo che guadagno ti dà?
Prestazioni *enormemente* superiori?
Codice più semplice?


 i puntatori
Linguaggio ad alto livello, eh? :-)
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://digilander.libero.it/ebassi/
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

Non riesco a capirne il senso... perché può averne 2 molto differenti.
Forse mi sono fatto un'idea sbagliata di te ma non mi sembri un MS
lover


Linguaggio ad alto livello, eh? :-)
I puntatori sono disponibili solo in contesti predefiniti. Il codice
unsafe


VB :-)
Forse e in un futuro più che prossimo. Ora l'unica cosa che i C#ers
hanno in meno ai VBers è un Intellisense migliore in VSNET


I generics sarebbero i template? O qualcosa di simile?
Si,
http://www.gotdotnet.com/team/csharp/learn/Future/VCS%20Language%20Changes.aspx
Teoricamente comunque sono già disponibili in Rotor


 Utile qualcosa che c'è ma non puoi utilizzare... 
Anche qua... Che differenza c'e` se usi una referenza invece del puntatore
vero? Che perdi l'aritmetica ovviamente, pero` grossomodo puoi ripetere la
maggior parte delle cose, anche se a un livello piu` alto.
Non so come funzioni in java ma in python tutti gli assegnamenti indiretti
sono referenze 
a=[5,4] 
b=a 
Non fa altro ch dare a b una referenza su a, se volessi fare una copia
vera e propria dovrei usare copy.
-- 
try: troll.uses(Brain)
except TypeError, data: 
   troll.plonk()
Linux User #310274, Debian Sid Proud User

vera e propria dovrei usare copy.
E' cosi anche in Java tranne per i tipi primitivi, ma si parlava di
passaggio di dati tra metodi... non di copia di oggetti


 Incapacità?
Mah, direi che ce ne vuole per pensare
una cosa tipo quella, per cui credo che
abbiano avuto una qualche ragione.
bye,
-- 
   Piergiorgio Sartor

 abominio da leggere.
ROTFL...
Certo che leggere a = b + c + d è un vero e proprio abominio. 
Invece a.assign(sum(b, sum(c, d))) è leggibilissimo...


 lover
Non sono sicuramente un anti-M$...


abbiano avuto una qualche ragione.
Concordo, non parlerei di incapacità. Persone come Gosling, Helsjberg,
Van Rossum e Stroustrup (rispettivamente Java, Delphi/.NET, Python e
C++) possano essere definiti incapaci. Direi invece che per quanto uno
si sforzi non esiste la perfezione e poi ci sono un sacco di altri
fattori: tempo, periodo, influenza del management, obiettivi, risorse
ecc ecc ecc


 maggior parte delle cose, anche se a un livello piu` alto.
In C# hai un accesso a basso livello, che in alcune situazioni può
essere utile.


 abbiano avuto una qualche ragione.
Bah, io rimango perplesso di fronte a certe scelte. Esattamente come
davanti a molte scelte fatte per il Visual Basic.


 davanti a molte scelte fatte per il Visual Basic.
Anch'io sono perplesso.
Pero`, a volte, si capisce che una certa scelta
(sbagliata) e` stata fatta per "pigrizia".
In questo caso direi che si sono proprio rotti la
testa per questa soluzione. Io immagino che abbiano
avuto dei "requisiti" da rispettare, che hanno
portato a questo risultato.
Sarei proprio curioso di sapere quali fossero questi
requisiti o problemi.
bye,
-- 
   Piergiorgio Sartor

 tipo il Java plugin.
Ah, grazie, non lo sapevo. In effetti e' proprio per questo che ho fatto 
'sto post.

 Chi ha preso le bastonate?
Mi riferivo alla storia del codice generato dal Visual J++ che poi in 
realta' non era pienamente compatibile col Java di Sun e quindi dopo la 
bacchettata dell'antitrust (se non mi ricordo male) MS ha smesso di 
puntare su java, togliendo anche la jvm da IE.
  > Non credo ti sia molto chiaro cosa sia .net.
In effetti ho postato proprio per saperne di piu'... ciao!

essere utile.
In parecchie situazioni direi, almeno nel mondo Windows: ad esempio:
interfacciarsi con sistema operativo ed usare le API tramite P/Invoke
e usare COM


 passaggio di dati tra metodi... non di copia di oggetti
Cambia poco... invece di passare il dato vero passo una referenza e per
creare il dato vero posso fare una copia. Tutto qua.


 In effetti ho postato proprio per saperne di piu'... ciao!
Java dispone della possibilità di essere interpretato all'interno dei 
browser tramite una vm e poter eseguire quindi degli applet. Sebbene questa 
sia la prima ragione per cui un utente conosce java, in realtà non è fra le 
caratteristiche di punta del linguaggio. I linguaggi alternativi entrano in 
competizione con java nelle tecnologie server side ed è lì che si sta 
svolgendo la battaglia. 

 requisiti o problemi.
Sinceramente io le vedo più come scelte "volute", che non scelte
"obbligate", ma potrei decisamente sbagliarmi.


 e usare COM
Sì, anche se la libreria del framework è sufficientemente fornita da non
obbligarti al ricorso all'API.


 creare il dato vero posso fare una copia. Tutto qua.
Già, ma sempre e solo ad alto livello...


 interfacciarsi con sistema operativo ed usare le API [...]
E tanti saluti alla portabilita'...
Alessandro.

 "obbligate", ma potrei decisamente sbagliarmi.
Faccio un esempio completamente a caso.
Puo` essere che la gestione degli oggetti in
memoria dinamica, anziche` automatica, sia
intrinsecamente piu` sicuro in termini di
buffer overflow.
Cioe` ai progettisti e` stato chiesto di
implementare il linguaggio in modo che sia
il piu` "robusto" possibile (quindi senza
puntatori) e magari quella e` stata una
scelta progettuale atta allo scopo.
Ovviamente e` solo un esempio, magari le
ragioni sono altre o non ve ne sono proprio.
bye,
-- 
   Piergiorgio Sartor

 ragioni sono altre o non ve ne sono proprio.
Quello che mi fa pensare sono alcuni documenti tecnici che valorizzano
alcune scelte con motivazioni errate o "incomplete" (ma questo non
succede solo con Java).


 svolgendo la battaglia. 
Ok. Ciao!

 probabile il contrario.
Ero solo un esempio, tanto per dire.
bye,
-- 
   Piergiorgio Sartor


Se adesso c'e' o non c'e' non lo so piu'.
Pero', in tempi recenti, non l'avevano tolta dal Service Pack di XP?
Alessandro.

 essere utile.
che in java puoi avere con jni. E' macchinoso, ma non è per questo che è
stato fatto java.

 Codice più semplice?
mah... non penso camnbi molto. Anzi penso ai buffer overflow....

svolgendo la battaglia. 
Più che caratteristica non di punta io direi che è proprio morta come
caratteristica


obbligarti al ricorso all'API.
Già ma proprio l'altro giorno sono incorso in una delle cose più
banali. Ad esempio: hai presente la dialog per aprire _solo_ le
cartelle? ecco... beh in .NET 1.0 non c'è... c'è nella 1.1 però... nel
caso in cui la usi non è compatibile all'indietro


E tanti saluti alla portabilita'...
Si parlava di basso livello


 caratteristica
Non volevo essere così drastico... ma il concetto è quello.

 stato fatto java.
Non mi pare che con jni tu possa usare puntatori e la loro aritmetica
come in C (cosa che puoi fare in C#).
Ti passo che possa essere pericoloso, ma in C# la scrittura di codice
unsafe è una precisa scelta del programmatore, non è possibile scriverlo
"per caso".
Se mi passi una doppia citazione "mista":
simplicity is the trade-name of the incompleteness...


 mah... non penso camnbi molto. Anzi penso ai buffer overflow....
Non cambia molto? C'è un'enorme differenza fra allocare un oggetto nello
stack o nello heap. Ho fatto una semplicissima prova in C++ e
l'allocazione degli oggetti nello heap richiede un tempo 34 volte
superiore all'allocazione sullo stack. Non mi pare poco...
Poi non vedo cosa c'entrino i buffer overflow.


 caso in cui la usi non è compatibile all'indietro
Una mancanza abbastanza grave...


 riferimento o per valore, ma forse deliro.
una grossa differenza con Java sono i metadati arbitrari che si possono 
assegnare ad ogni classe e metodo
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.1. C, C++ and ASM developers
                               and beta testers are welcome!

stato fatto java.
Appunto è macchinoso, cosa che con .NET non è


assegnare ad ogni classe e metodo
dicesi attributi (solo per precisare)


Una mancanza abbastanza grave...
Comunque grazie ad un VBer .NET che ha avuto lo stesso problema, ho
risolto lo stesso. C'è un workaround per avere quella funzionalità
senza dover impiastrarsi le mani con Win32... Mi sono fatto passare il
sorgente in vb.NET, l'ho compilato e inglobato nell'applicazione...
...ah che bello .NET :)


 Si parlava di basso livello
Cioe' useresti .net per scrivere un driver?
Alessandro.

 Teoricamente comunque sono già disponibili in Rotor
a proposito, perchè nessuno ha ancora parlato di Rotor? che ha dei port 
ufficiali per FreeBSD e MacOS X?


 storage automatico sullo stack,
ma niente storage statico - e questa non m'è piaciuta molto


 Piuttosto, avranno avuto una ragione per fare cio`, qualche idea?
mia supposizione: lo stack non è indirizzabile nè strettamente contiguo


 E tanti saluti alla portabilita'...
suvvia, anche Java ha i metodi nativi. O preferisci che sia la macchina 
virtuale ad implementare l'I/O, il windowing, ecc.?


 in realta' non era pienamente compatibile col Java di Sun
non era il compilatore, era l'ambiente di sviluppo


 nulla tipo il Java plugin.
mah e ri-mah. Chè poi non ci vorrebbe molto a farlo (anzi, ho già visto 
programmi unmanaged contenenti componenti managed - vedi il pannello di 
controllo del .NET Framework di Microsoft)


 ma niente storage statico - e questa non m'è piaciuta molto
?? Non mi pare affatto che manchi lo storage statico.


programmatore fare danni
<flamebait>
allora che me la dai a fare la garbage collection automaticaa? ;)
</flamebait>

 ?? Non mi pare affatto che manchi lo storage statico.
No, non dovrei rispondere a quest'ora...
Lo storage statico manca, certo che manca...


di 
VS.NET
 o di Matrix :-)
IntelliJ spakka ;P
PS
no, non sono uno che usa le K abitualmente ..

assegnare ad ogni classe e metodo
posso chiedere delucidazioni?
Posso aggiungere attributi ad una classe esistente?
io che amo ruby per questo.. 

come in C (cosa che puoi fare in C#).
in effetti la jni *sono* C.. perdi in portabilità e guadagni in
efficienza, come sempre.

 efficienza, come sempre.
Allora ho sempre frainteso. Pensavo che JNI fosse l'interfaccia che
permetteva a codice Java di utilizzare codice C/C++, e non il codice
C/C++ stesso...


Ciao.

 Cioe' useresti .net per scrivere un driver?
no di certo, ma per scrivere .NET stesso sě. Il punto č quello


 Posso aggiungere attributi ad una classe esistente?
metadati, non codice. Chessò, la descrizione, o la tag XML da usare per 
la serializzazione come testo. Cose così. Quello che dici tu è un'altra 
cosa che non so come si chiami ("dynamic late binding" ti sconfinfera?)


 Pero', in tempi recenti, non l'avevano tolta dal Service Pack di XP?
Tolta, e sfornato per l'occasione il Sp1a.
Saluti.

controllo del .NET Framework di Microsoft)
ok capito che intendi...ma concorderai con me che non è propriamente
la stessa cosa... intendo dire che non asservono allo stesso scopo..


allora che me la dai a fare la garbage collection automaticaa? ;)
Io parlavo delle feature in generale. Comunque se parli dei puntatori.
Sono disponibili sono in ambiti ristretti delimitati da opportune
keyword e non puoi certamente far tutto quello che puoi fare con C++


Cioe' useresti .net per scrivere un driver?
No di certo ma come cavolo c'arrivi al sistema operativo se no?


ufficiali per FreeBSD e MacOS X?
Yeah, e tra l'altro con Rotor riesco già a "giocare" con i generics


 Poi non vedo cosa c'entrino i buffer overflow.
Perche`, storicamente, in generale, per vari
motivi, i buffer overflow tendono ad accadere
sullo stack e non nello heap.
bye,
-- 
   Piergiorgio Sartor


Attraverso la VM per quanto possibile.
Se e' troppo facile interfacciarsi direttamente al SO si rischia che 
qualcuno lo faccia anche quando non e' strettamente necessario, con
conseguenze facilemnte immaginabili per la portabilita'.
Alessandro.

 conseguenze facilemnte immaginabili per la portabilita'.
Capito che intendi. Non è propriamente cosi. La CLR controlla tutto,
ecco perchè i puntatori sono disponibili solo in certi contesti.
--------------------------------
Inviato via 
http://usenet.libero.it

 stack. Non mi pare poco...
In C++ si`. Ma l'allocazione heap in .NET e` velocissima, in quanto usa un
meccanismo completamente diverso (sequenziale, non devi fare alcuno scan
lineare per trovare un blocco libero).
Vedi libro di Jeffrey richter (Applied .NET framework programming) per
discussione dettagliata dei meccanismi di allocazione e di garbage
collection in .NET.
-- 
Best Regards,
Maurizio Colucci
Please remove the uppercase letters "S,P,A,M":
seSgPuAsM...@tin.it

 lineare per trovare un blocco libero).
Spiegami la differenza tra "sequenziale" e
"scan lineare".
bye,
-- 
   Piergiorgio Sartor