PDA

View Full Version : Consiglio su linguaggio da scegliere


typhoon2
18-10-2004, 22:20
cioa ragazzi anke se nn posto da un eternita spero mi diate una mano
sono alle prime armi e volevo realizzare una applicazione che possa andare bene sia su linux che win che linguaggio mi consigliate di scegliere

VICIUS
18-10-2004, 22:31
Secondo me se scrivi in C riesci a portare tranquillamente il programma dove vuoi.

ciao ;)

typhoon2
18-10-2004, 22:41
usando visual c++.net di microsoft nn dovrebbe avere problemi giusto

VICIUS
19-10-2004, 09:41
Originariamente inviato da typhoon2
usando visual c++.net di microsoft nn dovrebbe avere problemi giusto
Certo che va bene. Pero devi stare attento a non usare librerie proprietarie della mamma ms altrimenti poi quando devi portare su altre piattaforme diventa un incubo.

ciao ;)

anx721
19-10-2004, 13:03
Java

typhoon2
19-10-2004, 15:50
quindi i problemi nascono con le librerie

ri
19-10-2004, 15:58
io voto python
o c++ con solo uso di stl e boost

typhoon2
19-10-2004, 16:13
Originariamente inviato da ri
stl e boost


che sono??

Ziosilvio
19-10-2004, 18:07
Python, oppure Java.

ri
19-10-2004, 19:02
Originariamente inviato da typhoon2
che sono??

le stl sono le Standard Template Library, ovvero le librerie standard del c++ (che sono portabili)
le boost sono una estensione alle stl fatte da terze parti (portabili anch'esse)

/\/\@®¢Ø
19-10-2004, 20:37
Originariamente inviato da ri
le boost sono una estensione alle stl fatte da terze parti (portabili anch'esse)
Portabili nel senso che sotto qualsiasi piattaforma e' impossibile capire il codice che le usa ? :D (se non si capisce, non mi piacciono, molto efficienti ma di difficile comprensione)

Concordo invece sul fatto che per iniziare python sia molto buono, soprattutto come linguaggio cross-platform.
Se piace scrivere interfacce grafiche ci sono diverse alternative possibili funzionanti sia sotto unix che sotto windows, oltre alla possibilita' di lavorare in una JVM (con Jython) o in un CLR ( IronPython, anche se questo e' ancora immaturo )

ri
19-10-2004, 21:11
neanche a me le boost piacciono troppo, sono lievemente "contorte" :asd:
non che le stl siano semplici comunque... però se impari a padroneggiare ste due robe puoi fare tutto quello che ti pare (e lo capirai solo tu :asd: )

typhoon2
20-10-2004, 09:41
che potenzialità ha il pyt???
risppetto al c++ è migliore o solo + semlice da imparare??????

Ziosilvio
20-10-2004, 11:04
Python e' decisamente piu' semplice del C++, almeno a livello sintattico.
Come versatilita' siamo a livelli simili, visto che ha librerie e moduli per compiti di ogni tipo.
Come praticita'... Python e' interpretato, C++ e' compilato: fa' un po' tu.
Quello in cui C++ straccia Python, e' la velocita' di esecuzione; ma puoi sempre integrare codice C/C++ con codice Python.
Puoi trovare altre info sul sito ufficiale di Python (http://www.python.org/), di cui esiste una "versione" italiana (http://www.python.it/).

/\/\@®¢Ø
21-10-2004, 12:35
Originariamente inviato da ri
neanche a me le boost piacciono troppo, sono lievemente "contorte" :asd:
non che le stl siano semplici comunque... però se impari a padroneggiare ste due robe puoi fare tutto quello che ti pare (e lo capirai solo tu :asd: )
Il problema principale e' che
1- I templates del C++ sono poco piu' che macro, cosicche' se fai un errore ti viene segnalato nel posto sbagliato.
2' Quando si comincia ad avere piu' di 2-3 parametri template la leggibilitta' va a "gentil donzelle" :D. La tipizzazione esplicita tra l'altro fa si' che tre quarti del codice siano typedef o dichiarazioni di tipo (basta guardare gli esempi per i grafi per (non?) capirlo :D :muro: )

RaouL_BennetH
21-10-2004, 12:57
Originariamente inviato da /\/\@®¢Ø
Il problema principale e' che
1- I templates del C++ sono poco piu' che macro, cosicche' se fai un errore ti viene segnalato nel posto sbagliato.
2' Quando si comincia ad avere piu' di 2-3 parametri template la leggibilitta' va a "gentil donzelle" :D. La tipizzazione esplicita tra l'altro fa si' che tre quarti del codice siano typedef o dichiarazioni di tipo (basta guardare gli esempi per i grafi per (non?) capirlo :D :muro: )

C'è un 3d in news, dove se dici questo probabilmente ti fucilano :D

http://forum.hwupgrade.it/showthread.php?s=&threadid=790297&perpage=20&pagenumber=5

/\/\@®¢Ø
21-10-2004, 14:05
Originariamente inviato da RaouL_BennetH
C'è un 3d in news, dove se dici questo probabilmente ti fucilano :D

http://forum.hwupgrade.it/showthread.php?s=&threadid=790297&perpage=20&pagenumber=5
Scherzi ? Poi mi tocca pure prendere le frustate perche' C mi piace ancora meno :D

71103
21-10-2004, 14:09
La mia opinione: il linguaggio C++ attualmente è per molte piattaforme il più potente che esista: in C++ si può fare semplicemente TUTTO; è la scelta da optare se vuoi potenza e velocità. Se invece vuoi una soluzione cross-platform e sei disposto a pagare il prezzo della pesantezza (che non dovrebbe essere troppo elevato in un'epoca in cui la maggior parte dei processori rompono il giga e mezzo di clock) puoi optare per il Java o se vuoi qualcosa di più recente il .NET, tenendo presente che non so esattamente a che punto siano i lavori per Mono (la piattaforma dotnet opensource).

Ciao

/\/\@®¢Ø
21-10-2004, 14:31
Originariamente inviato da Ziosilvio
Python e' decisamente piu' semplice del C++, almeno a livello sintattico.
Come versatilita' siamo a livelli simili, visto che ha librerie e moduli per compiti di ogni tipo.
Come praticita'... Python e' interpretato, C++ e' compilato: fa' un po' tu.
Quello in cui C++ straccia Python, e' la velocita' di esecuzione; ma puoi sempre integrare codice C/C++ con codice Python.
Puoi trovare altre info sul sito ufficiale di Python (http://www.python.org/), di cui esiste una "versione" italiana (http://www.python.it/).
Per certi versi Python e piu' flessibile, a causa della sua natura dinamica. E' possibile ad esempio andare a vedere come sono fatti gli oggetti, o il run-time stesso (un po' come Java e C#).
Al lavoro ho fatto una cosetta carina che in C++ sarebbe difficilmente implementabile. Avendo bisogno di scrivere su di un file di log le azioni che il programma esegue, ho voluto aggiungere un'indentazione che fosse dipendente dalla profondità della chiamata, cosi' da poter distinguere facilmente i blocchi di operazioni completati.
Ad esempio qualcosa del tipo

<ora> Inizio conversione file
<ora> Conversione file1
<ora> Conversione file2
<ora> Conversione file3
...
<ora> Fine conversione file

In python e' veramente facile perche' sono 6 linee di codice (tra l'altro scritte male perche' non sono un guru del linguaggio, anzi):

import inspect,time

def log( text ):
msg = time.asctime() + (' '*len(inspect.stack())) + text + '\r\n'
f = file(log_file,'a+')
f.write( msg )
f.close()

def g(nome):
log("Conversione " + nome )
blablabla

def f(file_list)
log("Inizio Conversione file")
for n in file_list:
g(n)
log("Fine conversione file")



Come avrei potuto fare una cosa simile in C++ (indentazione o un [n] ad indicare la profondita, come quando si chiama il make ricorsivamente)? Ci sono un paio di trucchetti che lo rendono possibile, ma decisamente piu' scomodo da fare/usare.
(Tanto che non l'avrei neanche fatto per una cosa cosi' stupida)

/\/\@®¢Ø
21-10-2004, 14:34
Originariamente inviato da RaouL_BennetH
C'è un 3d in news, dove se dici questo probabilmente ti fucilano :D

http://forum.hwupgrade.it/showthread.php?s=&threadid=790297&perpage=20&pagenumber=5
Attenzione pero' che li si parla di sviluppo kernel, che merita delle considerazioni a parte

71103
21-10-2004, 14:51
Originariamente inviato da /\/\@®¢Ø
[...]
Ad esempio qualcosa del tipo

<ora> Inizio conversione file
<ora> Conversione file1
<ora> Conversione file2
<ora> Conversione file3
...
<ora> Fine conversione file

In python e' veramente facile perche' sono 6 linee di codice (tra l'altro scritte male perche' non sono un guru del linguaggio, anzi):

import inspect,time

def log( text ):
msg = time.asctime() + (' '*len(inspect.stack())) + text + '\r\n'
f = file(log_file,'a+')
f.write( msg )
f.close()

def g(nome):
log("Conversione " + nome )
blablabla

def f(file_list)
log("Inizio Conversione file")
for n in file_list:
g(n)
log("Fine conversione file")



Come avrei potuto fare una cosa simile in C++ (indentazione o un [n] ad indicare la profondita, come quando si chiama il make ricorsivamente)? Ci sono un paio di trucchetti che lo rendono possibile, ma decisamente piu' scomodo da fare/usare.
(Tanto che non l'avrei neanche fatto per una cosa cosi' stupida)

Ho visto che hai esaminato lo stack per sapere il livello di ricorsività; in C++ sarebbe bastato utilizzare come contatore una variabile statica: soluzione più leggera.

typhoon2
21-10-2004, 16:09
quindi tirendo le somme

c++ potente ma linguaggio contorto

python facile da usare e imparare, ma all'esecuzione richiede un interpretazione da parte della makkina +- come il java


il .net è uno sviluppo di indirizato vero il web da parte dei linguaggi??

71103
21-10-2004, 17:13
Originariamente inviato da typhoon2
quindi tirendo le somme

c++ potente ma linguaggio contorto

io non lo definirei contorto: il c++ è così e basta; anche se è difficile da capire x gli altri, finché il programma lo devo fare solo io, chissene importa (a parte che a me nn sembra poi tanto difficile...)? cmq diciamo di si

python facile da usare e imparare, ma all'esecuzione richiede un interpretazione da parte della makkina +- come il java
si

il .net è uno sviluppo di indirizato vero il web da parte dei linguaggi??
in che senso?

/\/\@®¢Ø
21-10-2004, 17:19
Originariamente inviato da 71103
Ho visto che hai esaminato lo stack per sapere il livello di ricorsività; in C++ sarebbe bastato utilizzare come contatore una variabile statica: soluzione più leggera.
Il problema e' che devi stare li a cambiarti il contatore a mano. Puoi aiutarti camuffando un oggetto da funzione e sfruttando costruttore/distruttore, ma restano sempre degli aspetti su cui stare attenti.
Ammetto che la mia soluzione e' alquanto naive, ma nel mio caso le performance non sono fondamentali, non sul log perlomeno (devo elaborarmi una 50ina di GB di dati)

RaouL_BennetH
21-10-2004, 17:37
Originariamente inviato da /\/\@®¢Ø
Scherzi ? Poi mi tocca pure prendere le frustate perche' C mi piace ancora meno :D

ma lol! :D

typhoon2
22-10-2004, 10:29
Originariamente inviato da 71103

in che senso?
cosa sta ad indicare quella sigla ".net"

71103
22-10-2004, 13:04
Originariamente inviato da /\/\@®¢Ø
Il problema e' che devi stare li a cambiarti il contatore a mano. Puoi aiutarti camuffando un oggetto da funzione e sfruttando costruttore/distruttore, ma restano sempre degli aspetti su cui stare attenti.
Ammetto che la mia soluzione e' alquanto naive, ma nel mio caso le performance non sono fondamentali, non sul log perlomeno (devo elaborarmi una 50ina di GB di dati)

la tua "soluzione naive" farebbe nauseare repne scasb :D :)
e cmq non avrebbe tutti i torti, suvvia: esaminare lo stack non è cosa da nulla, e a occhio e croce anche non conoscendo il python direi che quella routine è abbastanza pesantuccia...:rolleyes:

che problema c'è poi a "cambiarti il contatore a mano"? si tratta solo di incrementare/decrementare una variabile, così:

void routine_ricorsiva(parametri...) {
static contatore = 0;
if (condizioni varie) {
contatore++;
routine_ricorsiva(parametri);
contatore--;
}
}

71103
22-10-2004, 13:11
Originariamente inviato da typhoon2
cosa sta ad indicare quella sigla ".net"

è un nome: la tecnologia .NET (leggasi dot-net) è la nuova creatura di mamma M$; tanto per farti capire, si tratta di qualcosa di simile al Java.

I programmi dot-net, tipicamente scritti in C#, una volta compilati non sono in linguaggio macchina, ma in un linguaggio comprensibile solo ad una virtual machine che si chiama framework .NET; dal momento che questa virtual machine può essere installata su varie piattaforme, non solo Windows, il .NET è una soluzione cross-platform (ovvero, portabile, come il Java).

/\/\@®¢Ø
22-10-2004, 13:58
Originariamente inviato da 71103
la tua "soluzione naive" farebbe nauseare repne scasb :D :)

Che "nausei" pure :D :p

e cmq non avrebbe tutti i torti, suvvia: esaminare lo stack non è cosa da nulla, e a occhio e croce anche non conoscendo il python direi che quella routine è abbastanza pesantuccia...:rolleyes:

Non lo nego, d'altra parte ho premesso che per l'uso che ne faccio, e' leggera quanto basta, molto pratica da usare e scritta in due secondi.


che problema c'è poi a "cambiarti il contatore a mano"? si tratta solo di incrementare/decrementare una variabile, così:

void routine_ricorsiva(parametri...) {
static contatore = 0;
if (condizioni varie) {
contatore++;
routine_ricorsiva(parametri);
contatore--;
}
}
Tempo impiegato, errori possibili, leggibilita' del codice. In questo caso mi sembravano piu' importanti di una efficienza a tutti i costi.

ri
22-10-2004, 14:04
Originariamente inviato da 71103
è un nome: la tecnologia .NET (leggasi dot-net) è la nuova creatura di mamma M$; tanto per farti capire, si tratta di qualcosa di simile al Java.

I programmi dot-net, tipicamente scritti in C#, una volta compilati non sono in linguaggio macchina, ma in un linguaggio comprensibile solo ad una virtual machine che si chiama framework .NET; dal momento che questa virtual machine può essere installata su varie piattaforme, non solo Windows, il .NET è una soluzione cross-platform (ovvero, portabile, come il Java).

forse è meglio se leggi meglio (http://www.microsoft.com/net/basics/whatis.asp)... ;)

71103
22-10-2004, 14:35
quello è un altro discorso, sempre legato al .NET, io nel post precedente ho descritto solo alcune cose fondamentali riguardanti il framework .NET

in questo topic l'aspetto che interessa di più di questa tecnologia è la portabilità.

71103
22-10-2004, 14:37
Originariamente inviato da /\/\@®¢Ø
Tempo impiegato, errori possibili, leggibilita' del codice. In questo caso mi sembravano piu' importanti di una efficienza a tutti i costi.
vabbò, contento tu. :rolleyes:

ri
22-10-2004, 16:04
il .NET non è portabile
per lo meno, non era l'intenzione di mamma microsoft
poi che abbiano sviluppato Mono è un altro paio di maniche, ma bisogna ancora vedere come la Microsoft deciderà di comportarsi nei loro confronti (a meno di accordi di collaborazione o simili dei quali sono all'oscuro, e nel caso ritiro quanto detto)

71103
22-10-2004, 17:35
indipendentemente da mono, il .NET è intrinsecamente portabile, perché il framework può essere sviluppato per qualsiasi piattaforma, e infatti quando lo scarichi dal sito di MS non lo trovi solo per i386, ma anche per altri tipi di computers che nn ricordo quali sono; poi ti posso concedere che microsoft ha sviluppato il suo framework solo per windows, e non per altri sistemi operativi (o almeno questo è quello che sapevo io).

end.is.forever
23-10-2004, 02:25
Non sono d'accordo sul fatto che C++ sia più difficile da interpretare da chi lo legge, dipende solo da quale linguaggio è abituato a leggere chi lo legge.

Per il "contorto" ancora di meno dato che chi introduce la "contorsione" di un programma è colui che lo scrive; ho visto molti programmi scritti in modo contorto anche in linguaggi eleganti.

Se ti interessa la vera portabilità ti consiglio un qualsiasi linguaggio non managed, in particolar modo C o C++, e di utilizzare una libreria portabile (wxWidgets è la mia preferita, la trovi qui (http://www.wxwindows.org/)).

In alternativa Java (il linguaggio della portabilità), ma lascerei perdere .NET, soprattutto dato che ti serve farlo girare su unix.

Ciao.

Matrixbob
23-10-2004, 02:31
Originariamente inviato da typhoon2
cioa ragazzi anke se nn posto da un eternita spero mi diate una mano
sono alle prime armi e volevo realizzare una applicazione che possa andare bene sia su linux che win che linguaggio mi consigliate di scegliere
Col C devi ricompilare il sorgente a seconda del SO in cui verrà mandato in esecuzione il programma.
Se lo fai in Java, il programma diventa il + portabile possibile, basta che ci sia una VM Java installata ed il bytecode Java uscito dalla prima compilazione viene interpretato da qualunque VM su qualunque SO.
Adesso vanno di moda anche qui linguaggi interpretati come PHP e Perl ... se non devi fare cose strane potrebbero andare bene ...

NB
il C è un linguaggio imperativo.
il Java è un linguaggio ad oggetti.

/\/\@®¢Ø
23-10-2004, 17:56
Originariamente inviato da end.is.forever
Non sono d'accordo sul fatto che C++ sia più difficile da interpretare da chi lo legge, dipende solo da quale linguaggio è abituato a leggere chi lo legge.

Dipende certamente da come viene usato.
In particolare un uso esasperato dei template del C++ (e le boost di cui si parlava prima ne e' un esempio) e' il modo piu' semplice per rendere impossibile trovare un errore in un programma.
Non c'e' modo di mettere delle condizioni esplicite sui parametri e quindi quando non le soddisfi non hai una indicazione chiara dell'errore, ma un riferimento a qualche linea di codice che tu neanche dovresti sapere che esiste (information hiding... :D).
A me e' capitato proprio con le boost , dove compilai un esempio introduttivo delle librerie sui grafi. Il codice pero' era errato ( un [n] al posto di (n) o viceversa) e mi trovai con oltre 100 linee di errore( quando ne sarebbe bastata una).

anx721
23-10-2004, 18:14
Il C++ ha degli elementi sintattici notoriamente piu complicati di altri linguaggi, e spesso neanche cosi utili; c'è che ha definito la sintassi del C++ 'barocca' con oltre 50 keywords, 17 livelli di precedenza, varie ambiguità sintattiche. Di ciò ne risente anche il compilatore, che spesso aiuta poco a capire gli errori, e le volte che si limita a dare un poco utile "Syntactic error" sono veramente tante, per nn parlare poi se l'errore coinvolge qualke template, perke il resoconto sarà una sfilza lunghissima di errori incomprensibili (parlo del gcc, ma nn penso che per altri compilatori le cose vadano meglio); chi usa molto java nn può fare a meno di notare la differenza di efficacia dell'error recovery adottato dal suo compilatore rispetto un compilaotore c++. A questo si aggiunge poi la gestione diretta della memoria che è tra le principali fonti di bugs.

Il C++ offre le massime prestazioni, ma nn si puo dire che non sia un linguaggio piu difficile da imparare, maneggiare, debuggare rispetto ad altri.

71103
24-10-2004, 11:37
Io sono del parere che il C++ non è tanto difficile, ma in effetti gli altri linguaggi in genere sono più facili; detto in altre parole: per me la programmazione è tutta semplice :D :p

end.is.forever
24-10-2004, 11:42
Originariamente inviato da Matrixbob
il C è un linguaggio imperativo.
il Java è un linguaggio ad oggetti.

Non è esatto, sia C sia Java sono entrambi imperativi (il linguaggio di Java è appunto il C).

C è procedurale
Java è object-based
(C++ è object-oriented).

Matrixbob
24-10-2004, 13:26
Originariamente inviato da end.is.forever
Non è esatto, sia C sia Java sono entrambi imperativi (il linguaggio di Java è appunto il C).

C è procedurale
Java è object-based
(C++ è object-oriented).
Se così affermi, allra spiega per che e cosa significa.

typhoon2
24-10-2004, 13:29
introducendo un discorso "didatico" che libri mi consigliate???
c++ e java (di questi due linguaggi io possiedo la versione contenuta in Visual studio.net 2003 di mamma microsoft, ma sono senza manuali)

anx721
24-10-2004, 14:11
Per java scaricati l'sdk dal sito della sun e lascia stare quella di microsoft...; come libri per entrambi "Thinking in java" e "Thinking in c++" di bruce eckel.

end.is.forever
24-10-2004, 18:07
Originariamente inviato da Matrixbob
Se così affermi, allra spiega per che e cosa significa.

Un linguaggio imperativo è composto da frasi che descrivono, a seconda della composizione, in modo univoco una sequenza di istruzioni macchina da eseguire.

Tutti i linguaggi di programmazione ricadono in questa categoria tranne alcuni casi di linguaggi dichiarativi (SQL, Prolog...) i quali non descrivono in modo univoco quali istruzioni a eseguire, ma dichiarano soltanto ciò che desiderano ottenere, senza specificare in quale modo l'attuatore lo dovrà svolgere.

In particolare C è un linguaggio imperativo e strutturato.
Java imperativo e object-based, ovvero completamente architettato ad oggetti.
Invece C++ è imperativo ed object-oriented, dato che permette di essere utilizzato come linguaggio procedurale, oppure, tramite una astrazione di classe costruita sul C, come linguaggio ad oggetti.

E' da ricordare che C++ fornisce un'ulteriore astrazione, quella delle metaclassi o template, create a tempo di compilazione, ricalcate poi dai generici creati runtime di Java e .NET.

/\/\@®¢Ø
24-10-2004, 19:38
Originariamente inviato da end.is.forever
Tutti i linguaggi di programmazione ricadono in questa categoria tranne alcuni casi di linguaggi dichiarativi (SQL, Prolog...) i quali non descrivono in modo univoco quali istruzioni a eseguire, ma dichiarano soltanto ciò che desiderano ottenere, senza specificare in quale modo l'attuatore lo dovrà svolgere.

Aggiungerei pure i linguaggi funzionali (lisp,scheme,haskell...). Anche se quasi sempre hanno una qualche componente imperativa, sono decisamente differenti.


E' da ricordare che C++ fornisce un'ulteriore astrazione, quella delle metaclassi o template, create a tempo di compilazione, ricalcate poi dai generici creati runtime di Java e .NET.
Forse sono io che uso nomi differenti, ma una metaclasse non e' un po' differente da un template ? :confused:

[m_i_l_o][electronics]
24-10-2004, 20:19
secondo me se programmi in C non dovresti avere alcun problema

Banus
24-10-2004, 21:25
C/C++ e librerie cross platform in genere lavorano bene. Ora sto vedendo le wxWidget e sono decisamente meglio delle librerie di mammina MS, oltre che cross platform (volendo compila per palmari..).
Considera che C++ è forse il linguaggio più complicato esistente (a parte ADA :D) perchè concede tantissime libertà. Comunque nessuno ti obbliga ad usare tutti i trucchetti possibili del linguaggio :p

Ziosilvio
29-10-2004, 14:23
Originariamente inviato da typhoon2
introducendo un discorso "didatico" che libri mi consigliate???
I libri di Eckel che ti ha suggerito anx721 vanno gia' bene.
Se vuoi proprio "i libri del linguaggio", sono editi tutti e due da Pearson Education Italia, e sono scritti rispettivamente da Stroustrup (C++) e Gosling et al. (Java).

Swisström
29-10-2004, 16:24
Originariamente inviato da Banus
Considera che C++ è forse il linguaggio più complicato esistente (a parte ADA :D) perchè concede tantissime libertà. Comunque nessuno ti obbliga ad usare tutti i trucchetti possibili del linguaggio :p


e assembler dove lo metti ?
:eek:

Banus
29-10-2004, 17:33
Dimentichi tutte le seghe mentali su cosa fa/non fa il compilatore, o cosa fa un compilatore che non fa l'altro... e le variaranti dei produttori.
Ad esempio il #pragma_once di MSVS ha un significato oscuro che devo ancora capire... :p
L'assembler permette di fare cose :oink: ma almeno ha un set di istruzioni limitato e un comportamento prevedibile. Non che sia facile da usare, sia chiaro :D

Matrixbob
29-10-2004, 18:47
... per la scuola mi sono perso queste spiegazioni, adesso mi prendo tempo leggo bene e poi se nn capisco chiedo chiarimenti.
Grazie.