View Full Version : Programmare in C
nuvolare
12-02-2009, 08:59
Salve a tutti, sto iniziando a programmare come da oggetto, cercavo la sezione adatta, ma non l'ho trovata, quindi mi scuso in caso c'è ne sia una e prego i moderatori in tal caso di postare la discussione nella giusta sezione.
Quindi vi chiedo esiste un modo per far separare i numeri pari d quelli dispari?
Grazie
Salve a tutti, sto iniziando a programmare come da oggetto, cercavo la sezione adatta, ma non l'ho trovata, quindi mi scuso in caso c'è ne sia una e prego i moderatori in tal caso di postare la discussione nella giusta sezione.
Quindi vi chiedo esiste un modo per far separare i numeri pari d quelli dispari?
Grazie
if (x%2 ==0) pari
else dispari
nuvolare
12-02-2009, 09:20
if (x%2 ==0) pari
else dispari
Mi fa piacere poterti dire che pensavo fosse qualcosa del genere, ma siccome sono agli inizzi non riuscivo a trovare l'inghippo giusto!!! :D
Grazie 1000
nuvolare
12-02-2009, 09:46
if (x%2 ==0) pari
else dispari
Scusami stavo implementando il codice ed ho creato due tipi
if (numero%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
e con questo mi dice sempre che è pari
l'altro
x = numero;
if (numero/2==0)
printf("Il numero è pari\n");
else
{
printf("Il numero è dispari\n");
}
}
Mi dice sempre dispari
Ti sposto nella sezione Programmazione :)
~FullSyst3m~
12-02-2009, 12:48
Scusami stavo implementando il codice ed ho creato due tipi
if (numero%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
e con questo mi dice sempre che è pari
l'altro
x = numero;
if (numero/2==0)
printf("Il numero è pari\n");
else
{
printf("Il numero è dispari\n");
}
}
Mi dice sempre dispari
Non conosco C, ma può essere un problema di come è strutturato il codice.
Credo che numero debba essere float; se è int nella divisione leva la parte dopo la virgola... e quindi numero%2== 0 vale sempre.
Prova con
if ( ((float)numero)%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
nuvolare
12-02-2009, 13:46
Credo che numero debba essere float; se è int nella divisione leva la parte dopo la virgola... e quindi numero%2== 0 vale sempre.
Prova con
if ( ((float)numero)%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
Ho pensato potesse essere una cosa del genere, ed ho dichiarato il codice all`inizio, come, float numero; , ma non e` cambiato nulla.
Quindi che differenza ce` tra dichiararlo all`interno del codice, come hai fatto tu ed all`inizio come ho fatto io?
Grazie
assolutamente nessuna :D
Ho scritto così perchè non sapevo se il tuo "numero" potesse essere cambiato in float.
Prova a scrivere 2.0f allora, invece che 2...
e sei sicuro che il valore di numero arriva esatto a quel punto dell'esecuzione?
No, numero non deve essere convertito a float.
Questo è il codice giusto.
if (numero%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
% è l'operatore di resto fra interi...il resto fra divisioni float non esiste ;)
if (numero/2==0)
Questa istruzione ti ritorna 0 solo se inserisci il numero 1...per tutti gli altri ti ritorna il risultato della divisione per 2, quendi è ovvio che scriva dispari.
nuvolare
12-02-2009, 16:09
No, numero non deve essere convertito a float.
Questo è il codice giusto.
if (numero%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
% è l'operatore di resto fra interi...il resto fra divisioni float non esiste ;)
if (numero/2==0)
Questa istruzione ti ritorna 0 solo se inserisci il numero 1...per tutti gli altri ti ritorna il risultato della divisione per 2, quendi è ovvio che scriva dispari.
Il mio codice è questo ed a me da sempre pari
#include <stdio.h>
int main()
{
int x;
int numero ;
printf("\n");
printf("***Calcola i numeri pari ed i numeri dispari***\n");
printf("\n");
printf("introdurre numero -> ");
scanf("%d", &x);
x = numero;
if (numero%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
}
scanf("%d", &x);
x = numero;
if (numero%2==0)
nuvolare
12-02-2009, 16:15
scanf("%d", &x);
x = numero;
if (numero%2==0)
Ma non è uguale al mio?
Ma non è uguale al mio?
Ho segnato in rosso l'errore ;)
nuvolare
12-02-2009, 16:25
Ho segnato in rosso l'errore ;)
Quindi devo togliere l'errore e farlo
#include <stdio.h>
int main()
{
int x;
int numero ;
printf("\n");
printf("***Calcola i numeri pari ed i numeri dispari***\n");
printf("\n");
printf("introdurre numero -> ");
scanf("%d", &x);
if (numero%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
}
Ma sempre pari mi da! :muro:
Quindi devo togliere l'errore e farlo
#include <stdio.h>
int main()
{
int x;
int numero ;
printf("\n");
printf("***Calcola i numeri pari ed i numeri dispari***\n");
printf("\n");
printf("introdurre numero -> ");
scanf("%d", &x);
if (numero%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
}
Ma sempre pari mi da! :muro:
innanzitutto il controllo non lo devi fare su numero che non è inizializzato ma su x (toglilo numero che non serve).. poi come detto prima devi usare come tipo un float anzichè un int
poi come detto prima devi usare come tipo un float anzichè un int
Ma assolutamente NO, l'ho già scritto sopra.
Non esiste il resto nella divisione fra numeri float. L'operatore % si chiama: resto della divisione intera. Vuole due interi come operandi.
Ovviamente poteva utilizzare direttamente x per fare il modulo (altro nome dell'operatore %), ma il problema nel suo codice è l'assegnazione. Non l'avevo segnata in rosso perché la dovesse togliere, l'avevo segnata in rosso perché pensasse a quello che aveva scritto e del perché non è corretto.
Legge x, assegna numero a x e poi fa il modulo su numero...c'è qualcosa che non torna...
Ma assolutamente NO, l'ho già scritto sopra.
Non esiste il resto nella divisione fra numeri float. L'operatore % si chiama: resto della divisione intera. Vuole due interi come operandi.
Ovviamente poteva utilizzare direttamente x per fare il modulo (altro nome dell'operatore %), ma il problema nel suo codice è l'assegnazione. Non l'avevo segnata in rosso perché la dovesse togliere, l'avevo segnata in rosso perché pensasse a quello che aveva scritto e del perché non è corretto.
Legge x, assegna numero a x e poi fa il modulo su numero...c'è qualcosa che non torna...
si giusto...(non avevo letto il post sopra)
nuvolare
12-02-2009, 17:04
Ma assolutamente NO, l'ho già scritto sopra.
Non esiste il resto nella divisione fra numeri float. L'operatore % si chiama: resto della divisione intera. Vuole due interi come operandi.
Ovviamente poteva utilizzare direttamente x per fare il modulo (altro nome dell'operatore %), ma il problema nel suo codice è l'assegnazione. Non l'avevo segnata in rosso perché la dovesse togliere, l'avevo segnata in rosso perché pensasse a quello che aveva scritto e del perché non è corretto.
Legge x, assegna numero a x e poi fa il modulo su numero...c'è qualcosa che non torna...
Ok, ho capito...
Siccome lo hai segnato in rosso ho pensato che il tuo intento fosse quello di dirmi che quello era l'errore e quindi l'ho tolto, invece tu mi avevi segnato l'errore per farmi riflettere, che in effetti è la soluzione migliore.
Quindi Grazie, 1000
ormai giusto per far vedere il codice incollo qua sotto quello corretto
#include <stdio.h>
int main()
{
int x;
int numero ;
printf("\n");
printf("***Calcola i numeri pari ed i numeri dispari***\n");
printf("\n");
printf("introdurre numero -> ");
scanf("%d", &x);
if (x %2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
}
Ma non mi hai detto ancora quale errore avevi fatto :D
nuvolare
12-02-2009, 17:12
Ma non mi hai detto ancora quale errore avevi fatto :D
mah! boh! :D
Io ho modificato il codice da così
scanf("%d", &x);
x = numero;
if (numero%2==0)
A così
scanf("%d", &x);
if (x %2==0)
Ed ha iniziato a funzionare regolarmente...!!!
Ora devo fare sommare i numeri pari con i pari ed i dispari dai dispari
faccio esperimenti!!!
Rifletti...hai assegnato numero a x ? Ma a te non serviva mettere x in numero ? :D
nuvolare
12-02-2009, 17:24
Rifletti...hai assegnato numero a x ? Ma a te non serviva mettere x in numero ? :D
Hai ragione!
Io però ho pensato che il passaggio che avevo fatto non aveva senso e quindi l'ho modificato il quel modo, probabilmente senza però chiedermi il motivo, sicuramente l'ho aggiustato in automatico perché avevo capito di aver fatto un cosa stupida!!!
Grazie grazie
Mi sento come i bambini curiosi che iniziano a camminare :D
Diciamo che non aveva proprio senso la variabile "numero" :D
if (numero%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
% è l'operatore di resto fra interi...il resto fra divisioni float non esiste ;)
Cavolo è vero :asd:
Chiedo venia per la disinformazione :stordita:
nuvolare
14-02-2009, 18:18
Ciao, sto sempre provando argomenti vari, adesso sto facendo le array.
Allora ho creato una situazione in cui devo immettere dei dati, con printf() e scan(). Questi dati si ripetono per 8 volte, cioè sono 8 dati diversi. Per spiegarmi meglio è un aereo che parte da A va a B poi C e poi torna ad A.
Quindi chiedo l'orario di partenza, tempo di volo, durata sosta al 1° aeroporto, durata tratta da A a B, ecc.
Se lo faccio standard lui fa 3 tratte, e fin qua nessun problema. Adesso però vorrei complicarlo, cioè vorrei che lui all'inizio mi chiedesse, quante tratte fa l'aereo? ed io 5 o 6 o 7,ecc
Ho creato per questo Gli Array, credo che si faccia con queste dicendo :
printf("Inserisci numero di tratte da valutare -> ");
scanf("%d", &numeroTratte);
int tratte[numeroTratte];
int i;
for(i=0; i<numeroTratte; i++);
{
scanf("%d", &tratte[i]);
Lui poi si mi chiede le tratte, ma non li differenzia, e quindi credo di non aver capito come impostare le array.
Quindi vi chiedo dopo il codice inserito sopra, devo creare dei blocchi di codice?
#include <stdio.h>
int main()
{
int dep;
int Tvolo;
int sosta1;
int Tvolo2;
int sosta2;
int TvoloRientro;
int orarioArrivo1;
int orarioArrivo2;
int orarioArrivo3;
int numeroTratte;
printf("Inserisci numero di tratte da valutare -> ");
scanf("%d", &numeroTratte);
int tratte[numeroTratte];
int i;
for(i=0; i<numeroTratte; i++);
{
scanf("%d", &tratte[i]);
}
for(i=0; i<numeroTratte; i++)
printf("Inserisci orario di partenza -> ");
scanf("%d", &dep);
printf("Inserisci tempo volo -> ");
scanf("%d", &Tvolo);
printf("Inserisci tempo sosta 1° aeroporto -> ");
scanf("%d", &sosta1);
printf("Inserisci tempo volo 2 tratta -> ");
scanf("%d", &Tvolo2);
printf("Inserisci sosta 2 aeroporto -> ");
scanf("%d", &sosta2);
printf("Inserisci tempo volo rientro -> ");
scanf("%d", &TvoloRientro);
orarioArrivo1=dep+Tvolo;
orarioArrivo2=orarioArrivo1+sosta1+Tvolo2;
orarioArrivo3=orarioArrivo2+sosta2+TvoloRientro;
printf("\n");
printf("Orario Arrivo 1° aeroporto %d\n" , orarioArrivo1);
printf("Orario Arrivo 2° aeroporto %d\n" , orarioArrivo2);
printf("Orario Arrivo 3° aeroporto %d\n" , orarioArrivo3);
return 0;
}
a parte che nel secondo for mancano le {}, così dovrebbe stamparti solo "Inserisci orario di partenza ->" numerotratte volte.
comunque il tuo problema non è molto chiaro. che deve fare quel codice? perché due for identici sperati che fanno cose diverse? cos'è quello scanf nel primo ciclo for?
perché non usi una malloc per allocare memoria all'array tratte[]?
nuvolare
15-02-2009, 08:43
Io praticamente vorrei che questo codice mi chiedesse quante tratte vorrei fare, e poi in base a questo chiedermi:
- Inserisci Orario di Partenza...
- Inserisci Tempo Volo 1° Tratta...
- Inserisci Tempo sosta 1° Aeroporto...
- Inserisci Tempo volo 2° tratta...
Questo ovviamente in base al numero di tratte che decido io all'inizio.
Con il codice qui sotto, lui mi chiede :
Inserisci numero di tratte da valutare -> 5 //Ok
Inserisci orario di partenza -> 4 //Ok
Inserisci tempo volo 6° tratta -> 3 //No,
Perché non mi parte da 1 ma inizia a conteggiare del n° di tratte da me inserite +1?
La i non è inizializzata a 0?
N.B.
Inserisco tutto il codice così com'è, giusto per capirci qualcosa in più, ma quello che i interessa è essenzialmente capire perché non parte da 0 il conteggio, ma dal numero che inserisco io.
Poi provo a ragionarci da solo, grazie
#include <stdio.h>
int main()
{
int dep;
int Tvolo;
int sosta1;
int Tvolo2;
int sosta2;
int TvoloRientro;
int orarioArrivo1;
int orarioArrivo2;
int orarioArrivo3;
int numeroTratte;
int i=0;
printf("Inserisci numero di tratte da valutare -> ");
scanf("%d", &numeroTratte);
int tratte[numeroTratte]; //array contenenti tratte
{
for(i=0; i<numeroTratte; i++);
printf("Inserisci orario di partenza -> ");
scanf("%d", &dep);
printf("Inserisci tempo volo %d° tratta -> ", i+1);
scanf("%d", &tratte[i]);
}
for(i=0; i<numeroTratte; i++);
printf("Inserisci tempo volo rientro -> ");
scanf("%d", &TvoloRientro);
return 0;
}
wingman87
15-02-2009, 10:37
Se stai seguendo un libro o un corso o una guida ti conviene aspettare perché devi vedere ancora l'allocazione dinamica.
nuvolare
15-02-2009, 10:42
Se stai seguendo un libro o un corso o una guida ti conviene aspettare perché devi vedere ancora l'allocazione dinamica.
Si, sto seguendo un libro e sto cercando di prendere ed applicare le cose che ho visto, così da apprendere i modi di applicazione, perché nel libro c'è un esempio, per ogni situazione quindi cerco di ampliare, comunque grazie
||ElChE||88
15-02-2009, 13:49
Se stai seguendo un libro o un corso o una guida ti conviene aspettare perché devi vedere ancora l'allocazione dinamica.
L'array dichiarato da lui va bene (dal C99) e in questo caso è equivalente all'allocazione dinamica.
nuvolare
15-02-2009, 17:12
L'array dichiarato da lui va bene (dal C99) e in questo caso è equivalente all'allocazione dinamica.
Ok, grazie io in tanto ero andato avanti a questo....
#include <stdio.h>
int main()
{
int dep;
int numeroTratte;
int TotTratte;
printf("Inserisci numero di tratte da valutare: ");
scanf("%d", &numeroTratte);
int tratte[numeroTratte]; //array contenenti valori/tratte
printf("Inserisci orario di partenza -> ");
scanf("%d", &dep);
int i;
for(i=0; i<numeroTratte; i++)
{
printf("Inserisci tempo volo %d° tratta: ", i+1);
scanf("%d", &tratte[i]);
}
TotTratte=tratte+dep;
printf("totTratte %d\n",TotTratte);
return 0;
}
ma c'è un modo per impostare il parametro, ora, direttamente oppure bisogna far riconoscere al compilatore che se il numero è maggiore di 60 fa scattare l'ora?
Grazie
nuvolare
16-02-2009, 10:24
Come faccio a prendere dei dati all'interno di un'array e poi sommarlo con un numero? Io presumo con un puntatore, ma se l'array è così formata?
{
printf("Inserisci tempo volo %d° tratta: ", i+1);
scanf("%d", &tratte[i]);
printf("Inserisci tempo sosta %d° scalo: ", i+1);
scanf("%d", &tratte[i]);
}
orarioArrivo1=dep+&tratte[0]; //somma
printf("Orario arrivo 1° aeroporto %.d\n",orarioArrivo1);
orarioArrivo1=dep+tratte[0];
nuvolare
16-02-2009, 11:20
orarioArrivo1=dep+tratte[0];
Grazie, ma non funziona mi somma solo il l'orario di partenza più il tempo di sosta al 1° scalo.
Ti inserisco tutto il codice così lo visualizzi meglio
#include <stdio.h>
int main()
{
int numeroTratte;
int dep;
int orarioArrivo1;
printf("Inserisci numero di tratte da valutare: ");
scanf("%d", &numeroTratte);
int tratte[numeroTratte]; //array contenenti tratte
printf("Inserisci orario di partenza -> ");
scanf("%d", &dep);
int i;
for(i=0; i<numeroTratte; i++)
{
printf("Inserisci tempo volo %d° tratta: ", i+1);
scanf("%d", &tratte[i]);
printf("Inserisci tempo sosta %d° scalo: ", i+1);
scanf("%d", &tratte[i]);
}
orarioArrivo1=dep+tratte[0];
printf("Orario arrivo 1° aeroporto %.d\n",orarioArrivo1);
return 0;
}
Grazie
Sovrascrivi due volte lo stesso elemento del vettore...ti servono due vettori. In ogni caso quello che ti ho corretto era un errore.
nuvolare
17-02-2009, 19:51
Sovrascrivi due volte lo stesso elemento del vettore...ti servono due vettori. In ogni caso quello che ti ho corretto era un errore.
ok, ho fatto in questo modo
#include <stdio.h>
int main()
{
int numeroTratte;
int dep;
int orarioArrivo1;
int sommatratte = 0;
printf("Inserisci numero di tratte da valutare: ");
scanf("%d", &numeroTratte);
int tratte[numeroTratte]; //array contenenti tratte
printf("Inserisci orario di partenza -> ");
scanf("%d", &dep);
int i;
for(i=0; i<numeroTratte; i++)
{
printf("Inserisci tempo volo %d° tratta: ", i+1);
scanf("%d", &tratte[i]);
printf("Inserisci tempo sosta %d° scalo: ", i+1);
scanf("%d", &tratte[i]);
tratte[i] = tempoVolo + tempoScalo;
}
int sommatratte = 0;
int j;
for (j = 0; j < numeroTratte; J++)
{
orarioArrivo1=dep+tratte[0];
printf("Orario arrivo 1° aeroporto %.d\n",orarioArrivo1);
return 0;
}
Ma se adesso io volessi ottenere il risultato dell'arrivo solo al 1° aeroporto, come dovrei fare, visto che tempo volo non è un'Array e non posso prendere elemento per elemento contenuto nel suo interno?Io pensato che creando un altro ciclo doveva funzionare, tipo
}
int Arrivo1 = 0;
int z;
for (z = 0; z < numeroTratte; z++)
{
Arrivo1 = dep + &tempoVolo;
}
printf("Orario arrivo 1° Aeroporto %d", Arrivo1);
Invece non è così...
Quindi?
Grazie
Non ha senso quello che hai scritto:
printf("Inserisci tempo volo %d° tratta: ", i+1);
scanf("%d", &tratte[i]);
printf("Inserisci tempo sosta %d° scalo: ", i+1);
scanf("%d", &tratte[i]);
Sovrascrivi due volte nella stessa iterazione del ciclo lo stesso elemento del vettore.
nuvolare
17-02-2009, 20:27
Scusami scusami, ho sbagliato codice ecco quello giusto
#include <stdio.h>
int main()
{
int numeroTratte;
int dep;
int orarioArrivo;
int tempoVolo;
int tempoScalo;
int ArrivoAd;
printf("Inserisci numero di tratte da valutare: ");
scanf("%d", &numeroTratte);
int tratte[numeroTratte]; //array contenenti tratte
printf("Inserisci orario di partenza -> ");
scanf("%d", &dep);
int i;
for(i=0; i<numeroTratte; i++)
{
printf("Inserisci tempo volo %d° tratta: ", i+1);
scanf("%d", &tempoVolo);
printf("Inserisci tempo sosta %d° scalo: ", i+1);
scanf("%d", &tempoScalo);
tratte[i] = tempoVolo + tempoScalo;
}
int sommaTratte = 0;
int j;
for (j = 0; j < numeroTratte; j++)
{
sommaTratte += tratte[j];
}
orarioArrivo = dep + sommaTratte;
printf("Orario arrivo aeroporto destinazione %d\n",orarioArrivo);
return 0;
}
nuvolare
24-02-2009, 21:19
Ciao, scusate ma '0' oppure '9' che vogliono dire che non ho ben capito, perché li confondo sempre con " " e quindi non so se sono la stessa cosa e non capisco se '\n' e uguale a "\n"
Grazie
Il contenuto fra paici singoli rappresenta un singolo carattere (char), fra doppi apici rappresenta una stringa.
wingman87
24-02-2009, 21:26
Tra apici puoi mettere solo un carattere (anche speciale) ed è codificato come un char, invece tra le virgolette ("") puoi mettere quanti caratteri vuoi e sono codificati come un array di char.
nuvolare
24-02-2009, 21:34
perfetto, quindi una situazione del genere :
if (c>='A' && c<='Z')
if (c>='0' && c<='9')
starebbe a significare :
se (c è maggiore o uguale ad A o c minore o uguale a Z)
se (c è maggiore o uguale a 0 o c minore o uguale a 9)
Giusto?
E nell'ultima lo 0 ed il 9 vengono considerati dei singoli numeri oppure singoli caratteri?
Grazie per le vostre pronte risposte
wingman87
24-02-2009, 21:39
invece di A,Z,0,9 vengono considerate le loro codifiche ascii. Puoi trovare una tavola ascii cercando tra le immagini con google. A volte le mettono anche nei libri
nuvolare
24-02-2009, 21:46
ok, ho trovato la tabella, al momento però mi viene difficile capirne il significato, o quanto meno l'utilizzo, ma quanto meno ho capito la differenza tra gli apici e le virgolette!!!
Grazie 1000
Ground_Zero
24-02-2009, 21:55
se non ricordo male '0' non considera il numero zero ma lo interpreta come carettere che avrà una certa codifica infatti se tu scrivi:
'4'+'5' come risultato non ti darà 9 ma 155 inceve se scrivi
('4'-'0')+('5'-'0') ti darà come risultato 9.
non so come implementarlo in c ma è giusto.
agente mm8
25-02-2009, 13:24
Beh, sì, usare 'a' o "a" è la stessa cosa.
Anche se in alcuni linguaggi, ad esempio java, 'a' è usato per le variabili char, "a" per le stringe.
Beh, sì, usare 'a' o "a" è la stessa cosa.
Assolutamente non è la stessa cosa, almeno in C.
nuvolare
25-02-2009, 17:45
Siccome poi vorrei proseguire, quando dovrei cambiare per passare a C++ oppure a Objc? e poi creando programmi in C++ funzionano sia in Windows che in mac?
agente mm8
25-02-2009, 19:55
Beh, comunque dipende dai linguaggi, ad esempio in php è la stessa cosa, mentre non lo è in C e Java
wingman87
25-02-2009, 20:03
Siccome poi vorrei proseguire, quando dovrei cambiare per passare a C++ oppure a Objc? e poi creando programmi in C++ funzionano sia in Windows che in mac?
Non so se ho capito bene, se il tuo intento è quello di imparare il c++ e del c non te ne importa molto passa pure subito al c++, non è assolutamente necessario conoscere l'uno per programmare nell'altro, anzi molti dicono (io non conosco il c++ quindi non mi pronuncio) che sia dannoso passare al c++ freschi freschi di c. Sul fatto che funzioni su mac non lo so, ma se esiste un compilatore allora direi proprio di sì, naturalmente dovrai compilare con due compilatori diversi la versione per win e quella per mac, ma questo forse lo sapevi già.
nuvolare
25-02-2009, 20:10
Non so se ho capito bene, se il tuo intento è quello di imparare il c++ e del c non te ne importa molto passa pure subito al c++, non è assolutamente necessario conoscere l'uno per programmare nell'altro, anzi molti dicono (io non conosco il c++ quindi non mi pronuncio) che sia dannoso passare al c++ freschi freschi di c. Sul fatto che funzioni su mac non lo so, ma se esiste un compilatore allora direi proprio di sì, naturalmente dovrai compilare con due compilatori diversi la versione per win e quella per mac, ma questo forse lo sapevi già.
Si, io al momento sto imparando il C perché tutti dicono sia la base di tutto, ecco perché sto facendo questo, ma se non serve allora...
Ma la programmazione ad oggetti significa che si costruiscono delle interfacce?cosa che con il C non è possibile fare?
cdimauro
25-02-2009, 20:40
Si, io al momento sto imparando il C perché tutti dicono sia la base di tutto, ecco perché sto facendo questo, ma se non serve allora...
Chi ti ha detto questa cosa è un emerito ignorante che non sa nemmeno cosa significhi "programmare".
Ma la programmazione ad oggetti significa che si costruiscono delle interfacce?
No. Si tratta di prospettiva diversa della modellazione del software.
cosa che con il C non è possibile fare?
Si possono fare anche in C.
Chiarito questo, passiamo alla domanda di rito: vuoi semplicemente imparare a programmare?
nuvolare
25-02-2009, 21:09
Chiarito questo, passiamo alla domanda di rito: vuoi semplicemente imparare a programmare?
Allora, che intendi per imparare semplicemente a programmare?
Ti spiego, io ho pensato di imparare a programmare perché utilizzavo tantissimo Excel e mi è diventato un pò limitativo, quindi ho deciso che non volevo fare programmi con un programma, ma vorrei crearmi qualcosa di mio, e quindi sono entrato in questo mondo.
Domandando qua è la, alcuni dicono una cosa ed altri un'altra, ho scaricato quasi 2gb di manuali di vario genere ed ancora non ho la cosa ben definita.
Premetto che io utilizzo Mac quindi vorrei, imparare a fare qualcosa che poi potrei utilizzare anche in Windows, ma quello credo che sia una questione di linguaggi.
Non vorrei però imparare una cosa e poi scoprire che non mi serve a nulla...
Che faccio?
cdimauro
25-02-2009, 22:52
OK, allora sei nelle condizioni giuste. Leggi la mia firma per maggiori informazioni. ;)
||ElChE||88
25-02-2009, 22:59
Mac e Windows?
Python, Ruby o Java...
nuvolare
25-02-2009, 23:06
OK, allora sei nelle condizioni giuste. Leggi la mia firma per maggiori informazioni. ;)
Scusami, ma ormai che ci siamo che mi consigli di fare??
Continuo con il C, oppure devo andare a qualcosa che mi permette di creare un'interfaccia o non so cosa...
Insomma come ti ho detto sopra vorrei riuscire a crearmi dei programmi, con cosa devo continuare per non imparare qualcosa che poi non mi servirà a nulla??
wingman87
25-02-2009, 23:45
Essendo su mac in base alla mia esperienza posso consigliarti solo java, io l'ho trovato un linguaggio semplice da imparare e con un'ottima documentazione. Per imparare puoi iniziare con i tutorial della sun o con alcuni libri gratuiti che si trovano online. Inoltre dopo non molto tempo dovresti essere in grado di scrivere anche programmi con interfaccia grafica, che penso sia ciò a cui ambisci. Esistono anche IDE che permettono di creare l'interfaccia grafica in modo interattivo come Netbeans o Eclipse con i dovuti plugin (anche se ho sentito dire più volte che è meglio Netbeans sotto questo aspetto). Ah, e un'altra caratteristica di java, ma mi sembra anche di python, è che gira su una virtual machine: in pratica non devi rilasciare più versioni dello stesso programma per piattaforme diverse ma usi sempre la stessa.
Se fossi stato su windows ti avrei consigliato C# o VB.Net per via della questione dell'interfaccia grafica, ripeto per mia esperienza. Siccome python non lo conosco non lo consiglio ma neanche lo sconsiglio (ma poi chi sono io? :asd:)
nuvolare
26-02-2009, 00:31
Essendo su mac in base alla mia esperienza posso consigliarti solo java, io l'ho trovato un linguaggio semplice da imparare e con un'ottima documentazione...
Ma perché java è un linguaggio di scrittura che va anche per mac?
Non lo sapevo...
Mamma mia mi è venuta una tale confusione che adesso non so più se continuare o buttarmi subito su java o python, che faccio??
wingman87
26-02-2009, 01:36
Ma perché java è un linguaggio di scrittura che va anche per mac?
Non lo sapevo...
Il motivo l'ho scritto anche nel messaggio sopra, perché gira sulla famosa JVM, quindi è indipendente dalla piattaforma. Anche python penso giri su una VM ma cdimauro saprà certamente essere più esaustivo di me sull'argomento.
cdimauro
26-02-2009, 07:18
Scusami, ma ormai che ci siamo che mi consigli di fare??
Continuo con il C, oppure devo andare a qualcosa che mi permette di creare un'interfaccia o non so cosa...
Insomma come ti ho detto sopra vorrei riuscire a crearmi dei programmi, con cosa devo continuare per non imparare qualcosa che poi non mi servirà a nulla??
Passa a Python: è il linguaggio di gran lunga più semplice per imparare a programmare, e lo trovi praticamente ovunque, persino sul Nintendo DS.
Nella mia firma trovi il link a un libro in italiano per imparare a programmare partendo da zero.
Ah, ovviamente puoi realizzare anche interfacce grafiche con Python.
Ah, ovviamente puoi realizzare anche interfacce grafiche con Python.
Però non hai ambienti Rad validi.
Con Java e Netbeans, hai sia un ottimo ambiente di sviluppo che un ottimo designer di interfacce.
cdimauro
26-02-2009, 08:27
Verissimo. Ma non sono nemmeno da buttare. QTDesigner funziona (o è stato portato) anche con Python, mi pare. ;)
Io non trascurerei l'ambiente .NET anche su MacOS X, e come linguaggio suggerisco C#.
Il framework Mono e il RAD Monodevelop esistono anche su MacOS X ( http://www.go-mono.com/mono-downloads/download.html ) e permettono di scrivere applicazioni in C# o VB.NET (e anche Boo, se non ricordo male).
La cosa bella è che una volta generata l'applicazione è possibile eseguirla così com'è sia su Linux sia su Windows.
Dai...programmare con Mono su Linux è una bestemmia. Magari può tornare utile saltuariamente, ma sicuramente se uno vuole la portabilità non sceglie C#.
banryu79
26-02-2009, 11:21
Ciao nuvolare,
se vuoi ricevere dagli utenti di questo forum consigli ben mirati su che linguaggio e su che tecnologie studiare, dovresti provare a spiegarci dettagliatamente che tipo di applicazioni ti aspetti di sviluppare, e su che piattaforma (Mac mi pare di aver capito).
Più sarai specifico e preciso nel comunicare gli obiettivi che ti poni più pertinenti saranno i consigli che riceverai.
~FullSyst3m~
26-02-2009, 12:52
Verissimo. Ma non sono nemmeno da buttare. QTDesigner funziona (o è stato portato) anche con Python, mi pare. ;)
Si, è stato portato. Ma ad esempio c'è anche wxGlade o wx FormBuilder che sono intuitivi.
Certo però si ritorna al solito discorso...non costituiscono un ambiente Rad, wxPython e PyQT non sono direttamente integrate nel linguaggio, documentazione esterna e via dicendo.
~FullSyst3m~
26-02-2009, 13:37
Certo però si ritorna al solito discorso...non costituiscono un ambiente Rad, wxPython e PyQT non sono direttamente integrate nel linguaggio, documentazione esterna e via dicendo.
Si certo.
cdimauro
26-02-2009, 13:42
Certo però si ritorna al solito discorso...non costituiscono un ambiente Rad, wxPython e PyQT non sono direttamente integrate nel linguaggio, documentazione esterna e via dicendo.
Nemmeno Java è un ambiente RAD: NetBeans è uno strumento a sé stante e non incluso direttamente col linguaggio.
P.S. Python integra nativamente Tk per sviluppare interfacce grafiche senza installare altro. Tipo Java, quindi. ;)
nuvolare
26-02-2009, 13:45
Ciao nuvolare,
se vuoi ricevere dagli utenti di questo forum consigli ben mirati su che linguaggio e su che tecnologie studiare, dovresti provare a spiegarci dettagliatamente che tipo di applicazioni ti aspetti di sviluppare, e su che piattaforma (Mac mi pare di aver capito).
Più sarai specifico e preciso nel comunicare gli obiettivi che ti poni più pertinenti saranno i consigli che riceverai.
Si, qualche post prima ho detto per quale motivo ho iniziato.
Io essenzialmente vorrei creare programmi, di vario genere, tipo contabilità, merce di magazzino, insomma, programmi di uso comune e programmi che già ho sviluppato in Excel e che vorrei trasformarli in qualcosa di mio.
Come detto appunto qualche post precedente, e come sta succedendo adesso, mi pare di accorgermi che ci sono molti pareri contrastanti, ed infatti mi sono scaricato quasi 2gb di manuali di vario genere ed ancora non ho la cosa ben definita.
Il mio sistema operativo di riferimento è Mac con il 10.4.11 o superiori, ma il lavoro che faccio vorrei poterlo utilizzare anche su Windows, perché ha casa ho anche quello. Insomma, non vorrei imparare un linguaggio che sia fine a se stesso, ma che possa anche utilizzarlo e scambiarlo con altri utenti...
cdimauro
26-02-2009, 13:50
Hai parecchia libertà di scelta: Python, Ruby, Java, ecc.
Personalmente continuo a consigliarti Python, che è il più semplice.
nuvolare
26-02-2009, 13:55
Hai parecchia libertà di scelta: Python, Ruby, Java, ecc.
Personalmente continuo a consigliarti Python, che è il più semplice.
Ormai che ci siamo vi chiedo:
Ma che differenza c'è fra il C il C++ il Python , Ruby Java...?
Detto in parole povere... :D
E poi, prima si costruiscono i programmi con i linguaggi e poi si costruzione le interfacce grafiche da applicare al linguaggio?
cdimauro
26-02-2009, 14:01
Ormai che ci siamo vi chiedo:
Ma che differenza c'è fra il C il C++ il Python , Ruby Java...?
Detto in parole povere... :D
In una sola parole: ENORME. Ogni linguaggio ha proprie peculiarità / "filosofia".
E poi, prima si costruiscono i programmi con i linguaggi e poi si costruzione le interfacce grafiche da applicare al linguaggio?
Prima impara a programmare, e poi occupati delle interfacce grafiche. Fidati. ;)
nuvolare
26-02-2009, 14:13
In una sola parole: ENORME. Ogni linguaggio ha proprie peculiarità / "filosofia".
Prima impara a programmare, e poi occupati delle interfacce grafiche. Fidati. ;)
Ok, allora mollo il libro di C e parto con la tua Firma??
io mi fido eh!!! :D
cdimauro
26-02-2009, 14:25
Fidati. Altri l'hanno fatto e hanno imparato a programmare in poco tempo. ;)
~FullSyst3m~
26-02-2009, 14:29
Fidati. Altri l'hanno fatto e hanno imparato a programmare in poco tempo. ;)
Qualcuno mi ha chiamato? :D
nuvolare
26-02-2009, 14:49
Qualcuno mi ha chiamato? :D
Allora spero di essere un'altro a poter rispondere come te!!! :D
Comincio subito....
Ma io fin ora per eseguire il programma che sviluppavo usavo Xcode, adesso con cosa lo devo eseguire?
~FullSyst3m~
26-02-2009, 14:51
Allora spero di essere un'altro a poter rispondere come te!!! :D
Comincio subito....
Bravo ;)
Se cdimauro fosse esistito ai tempi di Gesù adesso avremo un mondo cristiano. Come fa l'evangelista lui nessuno nel mondo :asd:
AnonimoVeneziano
26-02-2009, 15:03
Passa a Python: è il linguaggio di gran lunga più semplice per imparare a programmare, e lo trovi praticamente ovunque, persino sul Nintendo DS.
Nella mia firma trovi il link a un libro in italiano per imparare a programmare partendo da zero.
Ah, ovviamente puoi realizzare anche interfacce grafiche con Python.
Si vabbè, questa però è una informazione imprecisa a scopo pubblicitario :D Nonostante sia vero che c'è un interprete python per l'NDS che usa una versione modificata dell'intrerprete stackless è talmente limitata da essere praticamente inutile :p ... ed è così da una vita ormai
~FullSyst3m~
26-02-2009, 15:08
Si vabbè, questa però è una informazione imprecisa a scopo pubblicitario :D Nonostante sia vero che c'è un interprete python per l'NDS che usa una versione modificata dell'intrerprete stackless è talmente limitata da essere praticamente inutile :p ... ed è così da una vita ormai
Allora cambiamo console: la PSP. Python lì è usato tantissimo e ci sono molte applicazioni scritte in questo linguaggio. Contento cosi? :D
banryu79
26-02-2009, 15:13
Io essenzialmente vorrei creare programmi, di vario genere, tipo contabilità, merce di magazzino, insomma, programmi di uso comune e programmi che già ho sviluppato in Excel e che vorrei trasformarli in qualcosa di mio.
Così mi viene da pensare che Excel fa tutto quello di cui hai bisogno solo che comincia a starti stretto il fatto di poterti interfacciare con lui solo mediante le funzionalità che l'interfaccia grafica di Excel ti espone...
Se non fosse per la considerazione che quoto poco più sotto ti consiglierei tranquillamente di buttarti su VBA (meglio VB.NET?) per via della forte interazione con gli applicativi di casa Microsoft, solo che:
Il mio sistema operativo di riferimento è Mac con il 10.4.11 o superiori, ma il lavoro che faccio vorrei poterlo utilizzare anche su Windows, perché ha casa ho anche quello. Insomma, non vorrei imparare un linguaggio che sia fine a se stesso, ma che possa anche utilizzarlo e scambiarlo con altri utenti...
Ecco appunto: se si trattasse solo di Excel che gira in ambiente Windows, ribadirei VBA (VB.NET), ma avendo come ambiente il Mac non saprei, non mi sono mai trovato ad averci a che fare.
[per chi ne sa: nello specifico VBA "gira" grazie ad un motore di scripting embeddato nelle applicazioni Office? Quindi potrebbe andare bene anche se l'applicativo Office in questione gira su Mac?]
Come vedi io sto cercando di indirizzarti verso una soluzione "a metà strada" tra il semplice utilizzo di Excel come utente via interfaccia grafica e il molto diverso scriversi un'applicazione apposita che gestisce dei dati per produrre un output ben preciso con lo scopo di sostiuirla ad Excel; quello che ti propongo è impara a interfacciarti ad Excel in modo più potente: tramite VBA.
Perchè ti consiglio questo?
Perchè penso che così potrai raggiungere il tuo scopo usando lo strumento più rapido per ottenerlo; l'altra strada (per carità, sicuramente più affascinante ma anche infinitamente più vasta, e di conseguneza temporalmente più lunga) è molto più complessa:
1) devi imparare un linguaggio di programmazione;
2) devi sicuramente imparare ad usare una parte del framework a corredo di quel linguaggio per svolgere molti compiti di routine, oltre a quelli più specifici che servono a te in particolare;
3) devi studiare e conoscere i diversi ambiti tecnologici con cui dovrai avere a che fare (file input/output, database, libreria interfaccia grafica, ecc...)
E' una strada affascinante ma lunga e impegnativa che vale la pena percorrere (in riferimento al tuo caso) se:
1) non hai urgenza di ottenere quello che hai chiesto (applicazione che soddisfa i tuoi requisiti, funzionante);
2) puoi permetterti di investire in maniera costante [ogni giorno] del tempo da dedicare alla programmazione, specie per i primi mesi [/per il primo anno].
Se valuti che nonostante tutto ne vale la pena (avrai i tuoi motivi in fondo :D) allora ti consiglio di partire col piede giusto: scegliti un linguaggio moderno di facile apprendimento e utilizzo, con una buona documentazione, un buon manuale con cui iniziare lo studio del linguaggio e goditelo: io ti consiglierei uno fra questi:
- Python
- Ruby
- Java
- C#
Personalmente conosco bene solo Java, quindi di Java posso dirti che io personalmente ho molto apprezzato l'ottima documentazione della libreria, e i tutorial presenti nel sito della Sun Microsystem.
Ciao :)
cdimauro
26-02-2009, 15:13
Allora spero di essere un'altro a poter rispondere come te!!! :D
Comincio subito....
Ottima scelta. :)
Ma io fin ora per eseguire il programma che sviluppavo usavo Xcode, adesso con cosa lo devo eseguire?
Komodo Edit: http://www.activestate.com/komodo_edit/
Si vabbè, questa però è una informazione imprecisa a scopo pubblicitario :D Nonostante sia vero che c'è un interprete python per l'NDS che usa una versione modificata dell'intrerprete stackless è talmente limitata da essere praticamente inutile :p ... ed è così da una vita ormai
Qualcosa la si riesce a fare lo stesso. :fagiano:
Fortunatamente Python non ha i requisiti di memoria di Java (che, se non erro, non c'è per il NDS). :cool:
Comunque, sì: è propaganda. :fiufiu:
Allora cambiamo console: la PSP. Python lì è usato tantissimo e ci sono molte applicazioni scritte in questo linguaggio. Contento cosi? :D
Ho sviluppato qualcosa pure io per la PSP con Python (Stackless Python per PSP, per la precisione). :)
~FullSyst3m~
26-02-2009, 15:30
Ottima scelta. :)
Komodo Edit: http://www.activestate.com/komodo_edit/
Qualcosa la si riesce a fare lo stesso. :fagiano:
Fortunatamente Python non ha i requisiti di memoria di Java (che, se non erro, non c'è per il NDS). :cool:
Comunque, sì: è propaganda. :fiufiu:
Ho sviluppato qualcosa pure io per la PSP con Python (Stackless Python per PSP, per la precisione). :)
L'hai fatto tu Stackless Python? Non lo sapevo. Non smetti mai di stupirmi :D
nuvolare
26-02-2009, 15:42
Perchè ti consiglio questo?
Perchè penso che così potrai raggiungere il tuo scopo usando lo strumento più rapido per ottenerlo; l'altra strada (per carità, sicuramente più affascinante ma anche infinitamente più vasta, e di conseguneza temporalmente più lunga) è molto più complessa:
1) devi imparare un linguaggio di programmazione;
2) devi sicuramente imparare ad usare una parte del framework a corredo di quel linguaggio per svolgere molti compiti di routine, oltre a quelli più specifici che servono a te in particolare;
3) devi studiare e conoscere i diversi ambiti tecnologici con cui dovrai avere a che fare (file input/output, database, libreria interfaccia grafica, ecc...)
Si, però è proprio quello che non voglio. Io vorrei crearmi dei programmi miei, ho provato è visto VBA che ritengo molto bello, ma non è ciò che cerco.
Io sono disposto a perderci del tempo, ma l'importante è poter sviluppare qualcosa, ciò che non voglio è perdere tempo per imparare un linguaggio, e poi alla fine scoprire che non mi serve a nulla, perché dovevo utilizzare un altro. Ecco perché chiedo a qualcuno che ha esperienza su mac, cosa sta utilizzando lui e cosa riesce a sviluppare.
Io ho seguito fin ora il C, ed a questo punto non ho capito con questo sistema operativo cosa si può fare, e perché un altro sistema è meglio di un altro? in questo caso perché il Phyton e non il C, sono pareri personali oppure c'è un fondamento?
Vincenzo1968
26-02-2009, 15:46
Io ti consiglio Java. Python è lentuccio:
Contest 10 (http://www.hwupgrade.it/forum/showthread.php?t=1883750)
http://www.hwupgrade.it/forum/showpost.php?p=25548955&postcount=77
:huh:
cdimauro
26-02-2009, 15:54
Si, però è proprio quello che non voglio. Io vorrei crearmi dei programmi miei, ho provato è visto VBA che ritengo molto bello, ma non è ciò che cerco.
Io sono disposto a perderci del tempo, ma l'importante è poter sviluppare qualcosa, ciò che non voglio è perdere tempo per imparare un linguaggio, e poi alla fine scoprire che non mi serve a nulla, perché dovevo utilizzare un altro. Ecco perché chiedo a qualcuno che ha esperienza su mac, cosa sta utilizzando lui e cosa riesce a sviluppare.
Io ho seguito fin ora il C, ed a questo punto non ho capito con questo sistema operativo cosa si può fare, e perché un altro sistema è meglio di un altro? in questo caso perché il Phyton e non il C, sono pareri personali oppure c'è un fondamento?
Perché il C è MOLTO più ostico di Python, e impieghi anche dieci volte più tempo per tirare fuori un'applicazione. Con MOLTI più mal di testa.
P.S. Lascia perdere i discorsi sulla velocità di esecuzione. Un motto che ogni buon programmatore dovrebbe seguire è il seguente:
"premature optimization is the root of all evil"
;)
banryu79
26-02-2009, 16:05
Si, però è proprio quello che non voglio. Io vorrei crearmi dei programmi miei, ho provato è visto VBA che ritengo molto bello, ma non è ciò che cerco.
Io sono disposto a perderci del tempo, ma l'importante è poter sviluppare qualcosa, ciò che non voglio è perdere tempo per imparare un linguaggio, e poi alla fine scoprire che non mi serve a nulla, perché dovevo utilizzare un altro. Ecco perché chiedo a qualcuno che ha esperienza su mac, cosa sta utilizzando lui e cosa riesce a sviluppare.
Bene allora il mio consiglio è come in calce al post di sopra:
Scegliti un linguaggio moderno di facile apprendimento e utilizzo, con una buona documentazione, un buon manuale con cui iniziare lo studio del linguaggio e goditelo: io ti consiglierei uno fra questi:
- Python
- Ruby
- Java
Ho tolto C# perchè dichiari specificamente che opererai con ambiente Mac prima di tutto il resto (i linguaggi .NET hanno come target preferito macchine che montano sitemi Windows, esisterebbe anche un progetto che ne permette l'esecuzione in altri sistemi, ma in questo caso, per facilitarti le cose sarebbe meglio che tu puntassi a un linguaggio già più supportato sul Mac).
Io non ti consiglio Java in preferenza agli altri due come più adatto (perchè non avendo una seria conoscenza degli altri due non posso fare paragoni con cognizione di causa); però sicuramente posso dirti che va bene per quello che vuoi fare perchè conoscendolo sulla mia pella posso dire che ha un'ottima documentazione che accompagna il framework a corredo (il Java Developement Kit, o JDK), il quale a sua volta è molto esaustivo.
banryu79
26-02-2009, 16:12
@Nuvolare:
permettimi di linkarti un articolo di AppuntiDigitali che argomenta perchè, per imparare a programmare [= partire da ZERO] è meglio scegliere un linguaggio moderno di alta astrazione.
Questo per toglierti i dubbi rispetto alla tua scelta di partire con C.
LINK (http://www.appuntidigitali.it/2506/quale-linguaggio-per-imparare-a-programmare/)
Vincenzo1968
26-02-2009, 16:12
Occhio,
la frase è
"premature optimization is the root of all evil"
e non semplicemente
"optimization is the root of all evil"
Tant'è vero che, nei tre volumi dell'autore della frase, una pagina si e l'altra pure, si parla di efficienza(quei tre libri costituiscono un monumento all'efficienza dei programmi ;)):
The Art of Computer Programming (http://www-cs-faculty.stanford.edu/~knuth/taocp.html)
;)
cdimauro
26-02-2009, 16:20
Prematuro è anche valutare se un'applicazione ha bisogno di essere ottimizzata o meno.
Perché se non c'è nemmeno l'applicazione e, quindi, non è stata eseguita nemmeno una volta, non si può sapere se dev'essere ottimizzata. ;)
P.S. Di efficienza se ne può parlare SE serve, appunto.
Nemmeno Java è un ambiente RAD: NetBeans è uno strumento a sé stante e non incluso direttamente col linguaggio.
P.S. Python integra nativamente Tk per sviluppare interfacce grafiche senza installare altro. Tipo Java, quindi. ;)
Se Tk è sufficiente perché sono stati create i vari PyQT, wxPython e PyGTK ? Non credo che Swing e Tk siano minimamente paragonabili.
Riguardo a NetBeans non è propriamente così, NetBeans è un prodotto di Sun, tra l'altro si può scaricare tutto completo insieme al Java SDK.
Si vabbè, questa però è una informazione imprecisa a scopo pubblicitario :D Nonostante sia vero che c'è un interprete python per l'NDS che usa una versione modificata dell'intrerprete stackless è talmente limitata da essere praticamente inutile :p ... ed è così da una vita ormai
Tra l'altro...vogliamo elencare le piattaforma su cui può girare codice Java ? :D
Praticamente su ogni cellulare presente prodotto su questa terra negli ultimi 6-7 anni, PDA, console, set top box...praticamente su ogni piattaforma.
Io non discuto che Java ad una persona possa piacere più o meno di Python, sono gusti, ma è oggettivo che la piattaforma Java attualmente sia più completa di quella di Python. Dire il contrario secondo me è fare disinformazione.
Perche in c, usiamo cin>> var e in c++ usiamo scanf ("%x", &n)??
Quello che non mi torna è perche non memorizziamo il valore inserito direttamente nella variabile?? Perche assegnarlo ad un indirizzo di memoria?
Vincenzo1968
26-02-2009, 16:31
Io continuo a consigliarti Java perché costituisce un buon compromesso tra la velocità del C e la lentezza di Python.
Se dovessi avere bisogno di maggiore velocità, puoi interfacciare Java col C(o col C++). La sintassi Java è C-Like e, dunque, conoscendo questo linguaggio, puoi passare facilmente al C/C++.
Se non sbaglio anche Python può interfacciarsi con codice C. Ma la sintassi è completamente diversa.
;)
nuvolare
26-02-2009, 16:39
Tranquilli ragazzi tranquilli!!!
Mi sembra di aver scatenato un putiferio...
Adesso capisco perché ancora dopo 2 mesi, non ho ben capito quale linguaggio usare!!!! :D
Insomma ci sono pareri diversi a quanto pare, uno parla di efficienza, l'altro di velocità, l'altro ancora di sistemi di applicazione, ecc.
Io da questo discussione ho capitò però che in C per stampare una stringa dovevo scrivere varie cose, non vorrei essere troppo frettoloso, ma Python mi sembra più immediato :
>>> print 4
ed è fatto.
Ho letto l'articolo inviato dall'amico banryu79 che dice:
Scegli Python se ti incuriosiscono i linguaggi dinamici con le loro promesse di liberarti dal giogo della forte tipizzazione dei dati.
Che vuol dire, linguaggi dinamici con la promessa di liberarti dalla tipizzazione dei dati?
Un'altra cosa, Java funziona su Mac vero?
banryu79
26-02-2009, 16:44
Io continuo a consigliarti Java perché costituisce un buon compromesso tra la velocità del C e la lentezza di Python.
Ciao Vincenzo, guarda: se proprio dovessi scegliere tra questi due soli linguaggi quale consigliare a questo utente (perchè non bisogna mai perdere di vista la situazione contingente specifica dell'utente che chiede una mano, e ormai credo abbia fornito un quadro esauriente della situazione) l'eventuale preferenza non la esprimerei con in mente, prima di tutto il resto (che comprende la situazione dell'utente, appunto) la velocità di esecuzione [ovvero la minore astrazione intrinseca del linguaggio di programmazione rispetto al linguaggio macchina].
Piuttosto prenderei in considerazione gli aspetti che anche Cionci ha messo in evidenza, per quanto riguarda il framework:
...che la piattaforma Java attualmente sia più completa di...
da considerare di pari passo con la velocità, facilità di apprendimento e uso
del linguaggio di per se, e qui non è detto che Java (in quanto linguaggio) la spunti su Ruby o Python.
Con questo intervento non voglio flammare, solo ricordare a tutti che la prima e più importante considerazione da fare per dare un consiglio sensato a questo utente è partire dalle sue circostanze e neccessità.
Io spero di esserci riuscito al di là della mia personale ignoranza e preferenza.
banryu79
26-02-2009, 16:49
Un'altra cosa, Java funziona su Mac vero?
Detta proprio a mo' di storia dell'orso:
Java compila un "codice eseguibile" che si chiama bytecode: chi lo esegue è una "scatola nera" che si chiama Java Virtual Machine; per un dato sistema operativo, per esempio Windows, esite una implementazione specifica della Virtual Machine (quindi ad esempio Mac ha la sua).
Tu come programmatore scrivi sorgente Java, che viene compilato in bytecode, il quale a sua volta, al momento dell'esecuzione effettiva viene compilato/interpretato/tradotto/ottimizzato dalla specifica JVM installata nel sistema operativo.
Quindi sì, Java funziona su Mac
Vincenzo1968
26-02-2009, 16:57
Ciao Vincenzo, guarda: se proprio dovessi scegliere tra questi due soli linguaggi quale consigliare a questo utente (perchè non bisogna mai perdere di vista la situazione contingente specifica dell'utente che chiede una mano, e ormai credo abbia fornito un quadro esauriente della situazione) l'eventuale preferenza non la esprimerei con in mente, prima di tutto il resto (che comprende la situazione dell'utente, appunto) la velocità di esecuzione [ovvero la minore astrazione intrinseca del linguaggio di programmazione rispetto al linguaggio macchina].
Piuttosto prenderei in considerazione gli aspetti che anche Cionci ha messo in evidenza, per quanto riguarda il framework:
da considerare di pari passo con la velocità, facilità di apprendimento e uso
del linguaggio di per se, e qui non è detto che Java (in quanto linguaggio) la spunti su Ruby o Python.
Con questo intervento non voglio flammare, solo ricordare a tutti che la prima e più importante considerazione da fare per dare un consiglio sensato a questo utente è partire dalle sue circostanze e neccessità.
Io spero di esserci riuscito al di là della mia personale ignoranza e preferenza.
Ciao Banryu,
non voglio flammare nemmeno io. Java, oltre a costituire un buon compromesso per l'efficienza, è diffuso praticamente su ogni piattaforma(meglio di python, come ha messo in evidenza Cionci). E questo, mi pare, sia uno dei requisiti che Nuvolare chiede con insistenza.
;)
~FullSyst3m~
26-02-2009, 17:06
Ciao Banryu,
non voglio flammare nemmeno io. Java, oltre a costituire un buon compromesso per l'efficienza, è diffuso praticamente su ogni piattaforma(meglio di python, come ha messo in evidenza Cionci). E questo, mi pare, sia uno dei requisiti che Nuvolare chiede con insistenza.
;)
Nuvolare però non ha detto che ha bisogno di un linguaggio per i cellulari, per i pda ecc. Quindi Python è in lista per la scelta visto che va sia su Win, che su linux che su Mac.
nuvolare
26-02-2009, 17:11
Nuvolare però non ha detto che ha bisogno di un linguaggio per i cellulari, per i pda ecc. Quindi Python è in lista per la scelta visto che va sia su Win, che su linux che su Mac.
A si! questo non mi serve proprio...
Io voglio qualcosa che lavora sia su mac che su Windows
Ma la buona notizia e che a quanto pare la situazione si sia ristretta tra Python e Java.
Ed adesso che differenza c'è fra i due?
Cioè sono pressoché simili, oppure sono due linguaggi che adottano codici diversi?
Perché nel caso in cui ne imparo uno l'atro sarebbe di facile implementazione, se mi servirà, se sono uguali
banryu79
26-02-2009, 17:25
A si! questo non mi serve proprio...
Io voglio qualcosa che lavora sia su mac che su Windows
Ma la buona notizia e che a quanto pare la situazione si sia ristretta tra Python e Java.
Questo è un buon risultato: ti stai orientando.
Ora le differenze tra i due linguaggi, la loro maturità, le due filosofie, le librerie di supporto, la documentazione, ci sono eccome.
L'ideale sarebbe che tu partissi con quello che, ipotizzando di averli provati a fondo entrambi e quindi con il senno di poi, giudicheresti personalmente di tuo maggiore gusto, di ritrovartici di più, di essere più produttivo.
Il fatto è che non si può :)
Quindi dovresti scegliere, secondo me, quello che a 360° si dimostra il migliore per la realizzazione specifica della tua applicazione/gestionale, in ambiente Mac.
Se non fosse facilmente determinabile in maniera oggettiva (auguri) dai consigli degli utenti del Forum quale dovrebbe essere, potresti sempre scegliere in base al piano B: parto con quello reputato di più semplice/rapido apprendimento.
Metto il "reputato" in grassetto perchè poi, per te singolo individuo non è detto che quello reputato più semplice si riveli tale anche per te.
Ciao :)
~FullSyst3m~
26-02-2009, 17:41
Questo è un buon risultato: ti stai orientando.
Ora le differenze tra i due linguaggi, la loro maturità, le due filosofie, le librerie di supporto, la documentazione, ci sono eccome.
L'ideale sarebbe che tu partissi con quello che, ipotizzando di averli provati a fondo entrambi e quindi con il senno di poi, giudicheresti personalmente di tuo maggiore gusto, di ritrovartici di più, di essere più produttivo.
Il fatto è che non si può :)
Quindi dovresti scegliere, secondo me, quello che a 360° si dimostra il migliore per la realizzazione specifica della tua applicazione/gestionale, in ambiente Mac.
Se non fosse facilmente determinabile in maniera oggettiva (auguri) dai consigli degli utenti del Forum quale dovrebbe essere, potresti sempre scegliere in base al piano B: parto con quello reputato di più semplice/rapido apprendimento.
Metto il "reputato" in grassetto perchè poi, per te singolo individuo non è detto che quello reputato più semplice si riveli tale anche per te.
Ciao :)
Infatti, ciò che è semplice per uno è complicato per un altro e viceversa.
Io personalmente, visto che ho iniziato con Python, ti consiglio questo. Se inizi a studiare con impegno il libro che ha in firma cdimauro in pochissimo tempo lo finisci e acquisisci sia le basi della programmazione che del linguaggio. Poi vedi come ti sembra e in caso passi a Java.
Io ad esempio adesso sto studiando Java.
nuvolare
26-02-2009, 17:42
L'ideale sarebbe che tu partissi con quello che, ipotizzando di averli provati a fondo entrambi e quindi con il senno di poi, giudicheresti personalmente di tuo maggiore gusto, di ritrovartici di più, di essere più produttivo.
Il fatto è che non si può :)
Quindi dovresti scegliere, secondo me, quello che a 360° si dimostra il migliore per la realizzazione specifica della tua applicazione/gestionale, in ambiente Mac.
Credo che tu mi stia dicendo di scegliere a caso vero??
Allora chi di voi utilizza Java oppure Python in ambiente Mac?
Perché adesso il problema e che nel momento in cui mi troverò ad utilizzare Komodo per Python oppure non so cosa per Java, non so come funziona...
Siccome ho già scaricato Komodo, mi servirebbe sapere come funziona...
~FullSyst3m~
26-02-2009, 17:56
Credo che tu mi stia dicendo di scegliere a caso vero??
Allora chi di voi utilizza Java oppure Python in ambiente Mac?
Perché adesso il problema e che nel momento in cui mi troverò ad utilizzare Komodo per Python oppure non so cosa per Java, non so come funziona...
Siccome ho già scaricato Komodo, mi servirebbe sapere come funziona...
Dire a caso è brutto, banryu vuole farti capire che il linguaggio lo devi scegliere in base alle tue esigenze. Personalmente credo che per iniziare, visto che non hai mai programmato, Python sia più adatto.
Riguardo Komodo il modo migliore per imparare è quello di smanettare. Inizia a studiare il linguaggio e poi quando devi scrivere il codice apri l'editor e inizia a smanettare ;)
Poi personalmente, almeno per iniziare, ti consiglio come editor per Python (se inizi con Python) PyScripter o SPE.
nuvolare
26-02-2009, 19:56
Dire a caso è brutto, banryu vuole farti capire che il linguaggio lo devi scegliere in base alle tue esigenze. Personalmente credo che per iniziare, visto che non hai mai programmato, Python sia più adatto.
Riguardo Komodo il modo migliore per imparare è quello di smanettare. Inizia a studiare il linguaggio e poi quando devi scrivere il codice apri l'editor e inizia a smanettare ;)
Poi personalmente, almeno per iniziare, ti consiglio come editor per Python (se inizi con Python) PyScripter o SPE.
Ok, ma ti ricordo sempre che uso Mac quindi questi che mi hai detto funzionano su mac? Ho già scaricato Komodo perché mi è stato consigliato cdimauro, quindi credo che sia ultra testato.
Ma un buon Libro? senza nulla togliere hai manuali ovviamente...
Per Java ti consiglio Netbeans, che gira anche su Mac:
http://www.netbeans.org/downloads/start.html?platform=macosx&lang=en&option=javase&version=6.5
~FullSyst3m~
26-02-2009, 20:31
Ok, ma ti ricordo sempre che uso Mac quindi questi che mi hai detto funzionano su mac? Ho già scaricato Komodo perché mi è stato consigliato cdimauro, quindi credo che sia ultra testato.
Ma un buon Libro? senza nulla togliere hai manuali ovviamente...
SPE c'è anche per MAC.
Per il libro qua http://www.python.it/doc/Howtothink/HowToThink_ITA.pdf.gz
^TiGeRShArK^
26-02-2009, 21:55
Credo che tu mi stia dicendo di scegliere a caso vero??
Allora chi di voi utilizza Java oppure Python in ambiente Mac?
Perché adesso il problema e che nel momento in cui mi troverò ad utilizzare Komodo per Python oppure non so cosa per Java, non so come funziona...
Siccome ho già scaricato Komodo, mi servirebbe sapere come funziona...
Come IDE quelli per java sono molto + completi di quelli per python.
Su mac puoi usare tranquillamente Eclipse o Netbeans.
Netbeans è il + indicato per l'etrema facilità nella gestione di interfacce grafiche, eclipse invece eccelle nella scrittura di codice vera e proprio, cosa che ancora non saresti in grado di apprezzare.
Su tiger in effetti non mi ricordo che versione di java c'è, su leopard c'è la 6.
con java, ruby e python puoi interfacciarti tranquillamente con COCOA, ma java-cocoa è stato deprecato da leopard in poi se non erro.
Cmq con i bridge per ruby e per python ti incasini la creazione dell'interfaccia grafica.
Se vuoi creare l'interfaccia grafica con xcode dovresti usare l'objective C.
Su tiger hai solo l'objective c 1.0 se non erro, casomai in futuro volessi imparare anche questo linguaggio allora ti conviene installare leopard, o snow leopard o il sistema operativo di quel periodo e usare objective c 2.0 con xcode.
IDE per python non ne ho mai usati..a parte per pochissimo tempo spe o pyclipse. di solito uso il semplice IDLE.
su mac la versione 2.6 non funzionava, la versione 3.0 ancora non ho provato ad installarla.
Per ruby come IDE il mio preferito è netbeans.
...praticamente sono giusto un paio di riflessioni che potrebbero servirti :p
~FullSyst3m~
26-02-2009, 22:02
Come IDE quelli per java sono molto + completi di quelli per python.
Su mac puoi usare tranquillamente Eclipse o Netbeans.
Netbeans è il + indicato per l'etrema facilità nella gestione di interfacce grafiche, eclipse invece eccelle nella scrittura di codice vera e proprio, cosa che ancora non saresti in grado di apprezzare.
Su tiger in effetti non mi ricordo che versione di java c'è, su leopard c'è la 6.
con java, ruby e python puoi interfacciarti tranquillamente con COCOA, ma java-cocoa è stato deprecato da leopard in poi se non erro.
Cmq con i bridge per ruby e per python ti incasini la creazione dell'interfaccia grafica.
Se vuoi creare l'interfaccia grafica con xcode dovresti usare l'objective C.
Su tiger hai solo l'objective c 1.0 se non erro, casomai in futuro volessi imparare anche questo linguaggio allora ti conviene installare leopard, o snow leopard o il sistema operativo di quel periodo e usare objective c 2.0 con xcode.
IDE per python non ne ho mai usati..a parte per pochissimo tempo spe o pyclipse. di solito uso il semplice IDLE.
su mac la versione 2.6 non funzionava, la versione 3.0 ancora non ho provato ad installarla.
Per ruby come IDE il mio preferito è netbeans.
...praticamente sono giusto un paio di riflessioni che potrebbero servirti :p
Faresti confondere un robot :asd:
nuvolare
26-02-2009, 22:05
Come IDE quelli per java sono molto + completi di quelli per python.
Su mac puoi usare tranquillamente Eclipse o Netbeans.
Netbeans è il + indicato per l'etrema facilità nella gestione di interfacce grafiche, eclipse invece eccelle nella scrittura di codice vera e proprio, cosa che ancora non saresti in grado di apprezzare.
Su tiger in effetti non mi ricordo che versione di java c'è, su leopard c'è la 6.
con java, ruby e python puoi interfacciarti tranquillamente con COCOA, ma java-cocoa è stato deprecato da leopard in poi se non erro.
Cmq con i bridge per ruby e per python ti incasini la creazione dell'interfaccia grafica.
Se vuoi creare l'interfaccia grafica con xcode dovresti usare l'objective C.
Su tiger hai solo l'objective c 1.0 se non erro, casomai in futuro volessi imparare anche questo linguaggio allora ti conviene installare leopard, o snow leopard o il sistema operativo di quel periodo e usare objective c 2.0 con xcode.
IDE per python non ne ho mai usati..a parte per pochissimo tempo spe o pyclipse. di solito uso il semplice IDLE.
su mac la versione 2.6 non funzionava, la versione 3.0 ancora non ho provato ad installarla.
Per ruby come IDE il mio preferito è netbeans.
...praticamente sono giusto un paio di riflessioni che potrebbero servirti :p
Diciamo che non ho molto ben capito cosa c'è scritto, l'unica cosa che posso risponderti e che il passo successivo a C doveva essere Objc, ma adesso non so...
Sto cercando di capire come funziona komodo e sto scaricando Spe in attesa di capire se iniziare con Python o con Java
~FullSyst3m~
26-02-2009, 22:09
Diciamo che non ho molto ben capito cosa c'è scritto, l'unica cosa che posso risponderti e che il passo successivo a C doveva essere Objc, ma adesso non so...
Sto cercando di capire come funziona komodo e sto scaricando Spe in attesa di capire se iniziare con Python o con Java
Se non provi non credo tu possa capire e se non studi il linguaggio non puoi apprezzare come si deve gli editor. Io ti consiglio di dare una lettura al libro su Python, i primi capitoli, per farti un'idea di come è il linguaggio, e magari fare la stessa cosa con Python, e poi decidi il da farsi.
Se si vogliono sviluppare applicazioni native su OS X si deve passare per COCOA che è scirtto in Objective-C. Fino a leopard era possibile parlare con questo framework direttamente da Java, Python e Ruby. Con Leopard questo collegamento è stato cancellato per Java. Se userai Java quindi dovrai per forza scrivere applicazioni tramite SWT o Swing ed in questo caso ti consiglio anche io Netbeans per cominciare.
Per quanto riguarda Python e Ruby la situazione è migliorata molto con Leopard e XCode 3 visto che ora è possibile usare l'IDE di Apple per creare interfacce grafiche e scrivere codice direttamente in quei due linguaggi. La documentazione però non è delle migliori specialmente quella su rubycocoa. Quella per Python è migliore e si trovano anche libri in giro peccato solo che il linguaggio non mi piaccia :P
Come IDE in questo caso ti consiglio di provare ad usare XCode per un po' se hai la possibilità di usare il 3.1
~FullSyst3m~
26-02-2009, 22:27
Se si vogliono sviluppare applicazioni native su OS X si deve passare per COCOA che è scirtto in Objective-C. Fino a leopard era possibile parlare con questo framework direttamente da Java, Python e Ruby. Con Leopard questo collegamento è stato cancellato per Java. Se userai Java quindi dovrai per forza scrivere applicazioni tramite SWT o Swing ed in questo caso ti consiglio anche io Netbeans per cominciare.
Per quanto riguarda Python e Ruby la situazione è migliorata molto con Leopard e XCode 3 visto che ora è possibile usare l'IDE di Apple per creare interfacce grafiche e scrivere codice direttamente in quei due linguaggi. La documentazione però non è delle migliori specialmente quella su rubycocoa. Quella per Python è migliore e si trovano anche libri in giro peccato solo che il linguaggio non mi piaccia :P
Come IDE in questo caso ti consiglio di provare ad usare XCode per un po' se hai la possibilità di usare il 3.1
Ciao VICIUS, si sentiva la tua macanza ;)
Comunque stando a quello che hai detto tu a maggior ragione consiglio di iniziare con Python.
nuvolare
26-02-2009, 22:33
Come IDE in questo caso ti consiglio di provare ad usare XCode per un po' se hai la possibilità di usare il 3.1
Io Xcode lo uso ancora, ma ho il 10.4.11 quindi non Xcode 3.1. ma il 2.4 Quindi con questo Xcode funziona python oppure mi serve un 'altro IDE?
Perché nel libro di Python, almeno nelle prime pagine, parla di $ python per ambiente Linux. Io ho provato ad incollare il codice delle prime pagine su Xcode 2.4, ma non funziona.
Ciao VICIUS, si sentiva la tua macanza ;)
Comunque stando a quello che hai detto tu a maggior ragione consiglio di iniziare con Python.
Di sicuro imparerà il linguaggio più velocemente ma quando comincerà a scrivere programmi avrà grossi problemi a trovare documentazione decente per quel linguaggio. Su Java invece è tutta un'altra cosa.
Io Xcode lo uso ancora, ma ho il 10.4.11 quindi non Xcode 3.1. ma il 2.4 Quindi con questo Xcode funziona python oppure mi serve un 'altro IDE?
Perché nel libro di Python, almeno nelle prime pagine, parla di $ python per ambiente Linux. Io ho provato ad incollare il codice delle prime pagine su Xcode 2.4, ma non funziona.
Ah hai Tiger quindi la storia è un'altra. Purtroppo su quello funziona molto male quindi ti conviene passare direttamente a Komodo come ti ha suggerito cesare. Ti risparmi moltissimi mal di testa. Ora non ricordo di preciso ma sempre su Tiger ci dovrebbe essere Python 2.2 che è piuttosto vecchio e PyObjc è "antico". Un motivo in più per provare Java e lasciare in pace il biscione per ora.
AnonimoVeneziano
26-02-2009, 22:39
Di sicuro imparerà il linguaggio più velocemente ma quando comincerà a scrivere programmi avrà grossi problemi a trovare documentazione decente per quel linguaggio. Su Java invece è tutta un'altra cosa.
tipo per fare cosa?
tipo per fare cosa?
Anche il solo sapere che metodi ha una certa classe è una impresa. L'ultima volta che ci ho provato ho guardato nella documentazione per Objc e ho provato ad intuire come era messa su python. La documentazione di Sun invece ti dice anche a che ora ha fatto colazione quel giorno il programmatore che ha scritto quella classe.
~FullSyst3m~
26-02-2009, 22:45
Di sicuro imparerà il linguaggio più velocemente ma quando comincerà a scrivere programmi avrà grossi problemi a trovare documentazione decente per quel linguaggio. Su Java invece è tutta un'altra cosa.
Problemi a trovare documentazione decente per Python? Ti sbagli di grosso VICIUS. Python ha un'ottima documentazione a corredo. Sia sul linguaggio stesso che sui moduli.
Problemi a trovare documentazione decente per Python? Ti sbagli di grosso VICIUS. Python ha un'ottima documentazione a corredo. Sia sul linguaggio stesso che sui moduli.
Mi sono espresso male. Sul linguaggio non avrà problemi a trovare informazioni ma come comincerà a toccare pyobjc e il mondo dell'interfaccia grafica cominceranno i dolori. Almeno questa è la mia esperienza su osx.
AnonimoVeneziano
26-02-2009, 22:53
Anche il solo sapere che metodi ha una certa classe è una impresa. L'ultima volta che ci ho provato ho guardato nella documentazione per Objc e ho provato ad intuire come era messa su python. La documentazione di Sun invece ti dice anche a che ora ha fatto colazione quel giorno il programmatore che ha scritto quella classe.
Ma ti riferisci specificatamente a MacOSX o in generale?
EDIT: Ho letto il mex sopra :P
~FullSyst3m~
26-02-2009, 23:36
Mi sono espresso male. Sul linguaggio non avrà problemi a trovare informazioni ma come comincerà a toccare pyobjc e il mondo dell'interfaccia grafica cominceranno i dolori. Almeno questa è la mia esperienza su osx.
Ci sono tanti modi di programmare interfacce grafiche in Python. Le wx, le PyQT, le PyGTK ecc e sono tutte ben documentate. Su OSX però lo sai meglio tu di me.
Anche il solo sapere che metodi ha una certa classe è una impresa. L'ultima volta che ci ho provato ho guardato nella documentazione per Objc e ho provato ad intuire come era messa su python. La documentazione di Sun invece ti dice anche a che ora ha fatto colazione quel giorno il programmatore che ha scritto quella classe.
Avevo sentito dire che la documentazione della Sun era precisa, ma non pensavo fino a questo punto.
Quello che mi chiedo è: le documentazioni degli altri linguaggi non sono scritte pure dai programmatori? Quelle della Sun cosa hanno di speciale?
P.S: visto che siamo in argomento e che devo studiare Java, documentazione della Sun che parte da zero c'è ne?
Ah hai Tiger quindi la storia è un'altra. Purtroppo su quello funziona molto male quindi ti conviene passare direttamente a Komodo come ti ha suggerito cesare. Ti risparmi moltissimi mal di testa. Ora non ricordo di preciso ma sempre su Tiger ci dovrebbe essere Python 2.2 che è piuttosto vecchio e PyObjc è "antico". Un motivo in più per provare Java e lasciare in pace il biscione per ora.
Tra l'altro lui cercava un linguaggio per sviluppare applicazioni sia su OS X che su Windows, quindi Objective C ed i wrapper cocoa sono da sconsigliare.
Una riflessione sul tipo di applicazione che vuole sviluppare: mi sembra di capire che intenda sviluppare gestionali, confermi ?
In tal caso un GUI designer è di fondamentale importanza. Imho i GUI designer veramente validi e portabili si contano sulle dita di mezza mano: QTdesigner e quello di Netbeans. QTDesigner è adatto all'uso con C++, Python (PyQT) e altri linguaggi che hanno il wrapper per QT...c'è un però, non costituisce un ambiente Rad se non per C++ (integrato nel nuovo IDE della Nokia: QTCreator). Quindi di fatto i tempi di sviluppo aumentano notevolmente con Python proprio per la mancanza di un ambiente di sviluppo RAD.
Sicuramente si può usare Python per creare un gestionale, ma che sia meglio di usare Java e Netbeans imho è una forzatura. I tempi di sviluppo di un gestionale secondo me sarebbero notevolmente più alti con Python.
Se volessi sviluppare gestionali su Windows ti avrei consigliato Delphi o Visual Basic .Net, ma visto che questi due su MacOS non ci girano allora per me l'unico candidato che rimane è Java.
Ci sono tanti modi di programmare interfacce grafiche in Python. Le wx, le PyQT, le PyGTK ecc e sono tutte ben documentate. Su OSX però lo sai meglio tu di me.
Certo, però non hai un ambiente di sviluppo integrato di alta qualità con funzionalità RAD...cosa che invece c'è per Java. I tempi di sviluppo si allungano notevolmente.
La documentazione di PyQT, PyGTK etc etc però non è coerente ed omogena con quella di Python, mi spiego: per utilizzare PyQT dovrai avere sotto mano la documentazione di Python, quella di PyQT e quella di QT. Almeno due sistemi di documentazione eterogenea (non so PyQT), scritti e mantenuti da team diversi. Le varie documentazioni varieranno ad ogni release di ogni componente ed in maniera incoerente.
Con Java hai TUTTA la documentazione disponibile nello stesso posto, scritta coerentemente e modificata nel complesso solo ad ogni release del linguaggio.
Avevo sentito dire che la documentazione della Sun era precisa, ma non pensavo fino a questo punto.
Quello che mi chiedo è: le documentazioni degli altri linguaggi non sono scritte pure dai programmatori? Quelle della Sun cosa hanno di speciale?
Quello che hanno di speciale, oltre a quello scritto sopra: c'è Sun dietro, con i soldi si fa tutto meglio :D
La documentazione ufficiale è questa: http://java.sun.com/javase/reference/api.jsp
Imho non va studiata, va presa come riferimento mentre si usa il linguaggio (premendo un tasto funzione da Netbeans si accede alla documentazione, così come succede anche in QTCreator).
~FullSyst3m~
27-02-2009, 00:37
Certo, però non hai un ambiente di sviluppo integrato di alta qualità con funzionalità RAD...cosa che invece c'è per Java. I tempi di sviluppo si allungano notevolmente.
La documentazione di PyQT, PyGTK etc etc però non è coerente ed omogena con quella di Python, mi spiego: per utilizzare PyQT dovrai avere sotto mano la documentazione di Python, quella di PyQT e quella di QT. Almeno due sistemi di documentazione eterogenea (non so PyQT), scritti e mantenuti da team diversi. Le varie documentazioni varieranno ad ogni release di ogni componente ed in maniera incoerente.
Con Java hai TUTTA la documentazione disponibile nello stesso posto, scritta coerentemente e modificata nel complesso solo ad ogni release del linguaggio.
Quello che hanno di speciale, oltre a quello scritto sopra: c'è Sun dietro, con i soldi si fa tutto meglio :D
La documentazione ufficiale è questa: http://java.sun.com/javase/reference/api.jsp
Imho non va studiata, va presa come riferimento mentre si usa il linguaggio (premendo un tasto funzione da Netbeans si accede alla documentazione, così come succede anche in QTCreator).
Allora per studiare continuerò sul De Sio o sul Java Mattone dopo mattone.
Onestamente ho avuto alcune rogne con Python + Mac OS X :cry:
Per esempio, py2app che altro non è py2exe per Mac OS X è stato un INFERNO CERCARE di farlo funzionare. Primo installi la versione sul sito ufficiale, poi ti rendi conto che devi installare pyapp da repo subversion perchè la versione "stabile" è troppo vecchia e non funziona neanche per miracolo. La home ufficiale non fa alcun riferimento ad un repo svn, lo trovi su un sito "semi-ufficiale" l'indirizzo :stordita:. Ovviamente su Mac OS X 10.4 non se ne parla di avere già installato il client subversion e non esiste neanche una versione ufficiale per Mac OS X (almeno liberamente scaricabile) quindi nuovamente su Google a cercare qualcuno che ha pacchetizzato subversion su Mac OS X.
Scarichi py2app dal repo, installi e da errore...cerchi su Google e su una pagina non ufficiale :mc: trovi l'indirizzo del repo subversion dove scaricare un modulo aggiornato che in Python 2.3 incluso su Mac OS X 10.4 è troppo vecchio...come se non fosse finita py2app ha casini con PyQT4...altra ricerca su Google :help: . Quando finalmente viene creato il .app, io ho un PowerBook con PowerPC e Mac OS X 10.4 e lo passo ad uno che ha Mac OS X 10.5 su Intel: inutile dire che non parte. Dopo tutto questo tempo, di nuovo a cercare su Google dove dicono che probabilmente ho alcuni moduli Python in versione non universal...conisiglio? Ricompilare Python :mbe:
E' passato parecchio tempo ma facendo una rapida ricerca py2app mi pare fermo da tempo :_)
Io adoro Python, ormai uso solo Python + QT4 (sia su Windows che Linux) e le QT4 con la versione 4.5 hanno praticamente riscritto il porting Mac OS X per supportare Cocoa ed i 64bit. Con Python+QT scrivi veramente applicazioni grafiche con piacere. La documentazione delle PyQT va interpretata è vero (è un misto di esempi C++/Python) :D ma una volta capite alcune cose è una delle migliori documentazioni che abbia mai letto ;)
Detto questo, a te la scelta :ciapet:
Allora quando dico che ci sono troppi miscugli di pacchetti ufficiali e di terze (e quarte :D) parti in Python un minimo di ragione ce l'ho...strano, mi sembrava di essere alieno :asd:
wingman87
27-02-2009, 03:28
Allora per studiare continuerò sul De Sio o sul Java Mattone dopo mattone.
Ho letto il De Sio e mi sono trovato bene, anche se avevo trovato qualche piccolo errore, ora non ricordo quali, ma d'altra parte lo dice anche nella prefazione che il libro non è della stessa fattura della versione commerciale. AD ogni modo se ti può interessare ci sono anche i tutorial ufficiali della Sun che sono fatti molto bene:
http://java.sun.com/docs/books/tutorial/index.html
Sono in inglese però
nuvolare
27-02-2009, 05:54
Onestamente ho avuto alcune rogne con Python + Mac OS X :cry:
Per esempio....
ma una volta capite alcune cose è una delle migliori documentazioni che abbia mai letto ;)
Ma quindi se dovessi tu fare la scelta a posto mio, che faresti? visto che anche tu lavori con Mac OS X. Io non vorrei dover passare a Windows per programmare, al massimo posso passare al 10.5
Siccome sento molti pareri discordanti, ma pochi che sanno di Mac ogni volta faccio un passo in avanti ed uno indietro.
Io come ho detto prima sto facendo il C, ma se c'é qualcosa di meno ostico passerei pure, ma non sull'incerto visto che ho mac.
Visto che stai facendo C, ti dovresti ritrovare bene anche con parte della sintassi di Java, costrutti di flusso, espressioni booleane, operatori aritmetici, sono praticamente identici.
Imho Java è il linguaggio meno problematico su quasi tutte le piattaforme che supporta.
cdimauro
27-02-2009, 07:30
Se Tk è sufficiente perché sono stati create i vari PyQT, wxPython e PyGTK ? Non credo che Swing e Tk siano minimamente paragonabili.
Semplice: perché c'è di meglio. :D
Riguardo a NetBeans non è propriamente così, NetBeans è un prodotto di Sun, tra l'altro si può scaricare tutto completo insieme al Java SDK.
Ma non fa parte di Java. Io se scarico Python, ad esempio, di default ho già IDLE come IDE. ;)
Tra l'altro...vogliamo elencare le piattaforma su cui può girare codice Java ? :D
Praticamente su ogni cellulare presente prodotto su questa terra negli ultimi 6-7 anni, PDA, console, set top box...praticamente su ogni piattaforma.
Io non discuto che Java ad una persona possa piacere più o meno di Python, sono gusti, ma è oggettivo che la piattaforma Java attualmente sia più completa di quella di Python. Dire il contrario secondo me è fare disinformazione.
http://www.jython.org/ Il contrario (Java che gira su VM Python) non c'è. :cool:
Inoltre Sun supporta ufficialmente soltanto 4 piattaforme (Windows, Solaris, Linux e OS X), mentre Python ufficialmente una ventina o più. ;)
Io continuo a consigliarti Java perché costituisce un buon compromesso tra la velocità del C e la lentezza di Python.
Se dovessi avere bisogno di maggiore velocità, puoi interfacciare Java col C(o col C++). La sintassi Java è C-Like e, dunque, conoscendo questo linguaggio, puoi passare facilmente al C/C++.
Se non sbaglio anche Python può interfacciarsi con codice C. Ma la sintassi è completamente diversa.
;)
Sì, anche Python si può interfacciare con C, ma c'è di meglio che scrivere le estensioni in C: http://www.cython.org/
Così puoi scrivere le parti critiche del tuo codice continuando a utilizzare una sintassi Python-like, ma generando codice C. :cool:
Tranquilli ragazzi tranquilli!!!
Mi sembra di aver scatenato un putiferio...
Adesso capisco perché ancora dopo 2 mesi, non ho ben capito quale linguaggio usare!!!! :D
Insomma ci sono pareri diversi a quanto pare, uno parla di efficienza, l'altro di velocità, l'altro ancora di sistemi di applicazione, ecc.
Io da questo discussione ho capitò però che in C per stampare una stringa dovevo scrivere varie cose, non vorrei essere troppo frettoloso, ma Python mi sembra più immediato :
>>> print 4
ed è fatto.
Ecco, stai cominciando ad apprezzare la carta vincente di Python: la semplicità del linguaggio paragonato a roba come C o Java.
Perché non vedi quanto codice ci vorrebbe per fare la stessa cosa con questi due linguaggi? ;)
A si! questo non mi serve proprio...
Io voglio qualcosa che lavora sia su mac che su Windows
Ma la buona notizia e che a quanto pare la situazione si sia ristretta tra Python e Java.
Ed adesso che differenza c'è fra i due?
Cioè sono pressoché simili, oppure sono due linguaggi che adottano codici diversi?
Perché nel caso in cui ne imparo uno l'atro sarebbe di facile implementazione, se mi servirà, se sono uguali
Sono molto diversi. Python è di gran lunga più semplice rispetto a Java.
Credo che tu mi stia dicendo di scegliere a caso vero??
Allora chi di voi utilizza Java oppure Python in ambiente Mac?
Perché adesso il problema e che nel momento in cui mi troverò ad utilizzare Komodo per Python oppure non so cosa per Java, non so come funziona...
Siccome ho già scaricato Komodo, mi servirebbe sapere come funziona...
Leggiti questo http://www.hwupgrade.it/forum/showthread.php?t=1825689&highlight=Komodo+Edit thread. ;)
Allora quando dico che ci sono troppi miscugli di pacchetti ufficiali e di terze (e quarte :D) parti in Python un minimo di ragione ce l'ho...strano, mi sembrava di essere alieno :asd:
Croce e delizia di chi ha un framework ridotto rispetto a Java. Non c'è tutto, ma... il runtime di Python è molto più snello di quello di Java.
banryu79
27-02-2009, 07:51
Allora per studiare continuerò sul De Sio o sul Java Mattone dopo mattone.
Ci sono anche altre risorse sul sito della Sun oltre alla documentazione delle API del JDK (JDK javadoc).
Per esempio alcune sezioni nel sito dei tutorial: http://java.sun.com/docs/books/tutorial/ potranno tornarti utili.
nuvolare
27-02-2009, 08:23
Ecco, stai cominciando ad apprezzare la carta vincente di Python: la semplicità del linguaggio paragonato a roba come C o Java.
Perché non vedi quanto codice ci vorrebbe per fare la stessa cosa con questi due linguaggi? ;)
Io non metto in dubbio la semplicità del linguaggio, perché già leggendo le prime righe del libro ho capito la differenza dal C. Ma il mio problema principale e che io lavoro su mac 10.4 Intel e molti dicono che il problema sarà nel momento che inizierò a creare interfacce. E' vero?
cdimauro
27-02-2009, 08:41
E' vero, con Java ti verrà più semplice.
Comunque leggi questo (http://www.hwupgrade.it/forum/showpost.php?p=26474107&postcount=128), in particolare verso la fine. ;)
banryu79
27-02-2009, 10:07
Avevo sentito dire che la documentazione della Sun era precisa, ma non pensavo fino a questo punto.
Quello che mi chiedo è: le documentazioni degli altri linguaggi non sono scritte pure dai programmatori? Quelle della Sun cosa hanno di speciale?
P.S: visto che siamo in argomento e che devo studiare Java, documentazione della Sun che parte da zero c'è ne?
Scusa Full, prima ti ho linkato una pagina che ti aveva già segnalato un altro utente.
Quello che ti volevo linkare io era il "The really Big Index (http://java.sun.com/docs/books/tutorial/reallybigindex.html)", che è una lista di tutto il materiale/tutorial contenuto nel sito "Sun Java Tutorial".
E' una risorsa davvero utile, forse è questo che cercavi.
Perché non vedi quanto codice ci vorrebbe per fare la stessa cosa con questi due linguaggi? ;)
Da quando in qua questo è un vantaggio ? Su PHP per stampare ci vuole lo stesso numero di caratteri eppure non per questo mi sogno di dire che php è migliore.
Sono molto diversi. Python è di gran lunga più semplice rispetto a Java.
Tua opinione...per me sono paragonabili :O
cdimauro
27-02-2009, 11:03
In tal caso, come ho già detto diverse volte e nessuno "stranamente" s'è mai prestato, prendiamo degli esempi di problemi, tiriamo fuori i sorgenti coi vari linguaggi, e confrontiamoli. :O
~FullSyst3m~
27-02-2009, 11:32
Ho letto il De Sio e mi sono trovato bene, anche se avevo trovato qualche piccolo errore, ora non ricordo quali, ma d'altra parte lo dice anche nella prefazione che il libro non è della stessa fattura della versione commerciale. AD ogni modo se ti può interessare ci sono anche i tutorial ufficiali della Sun che sono fatti molto bene:
http://java.sun.com/docs/books/tutorial/index.html
Sono in inglese però
Il mattone dopo mattone è assurdo, ho letto solo le prime pagine di introduzione e ci sono un sacco di errori grammaticali e parole mancanti. Cerco documentazione in italiano perchè ho poco tempo per dedicarmi a quella inglese e poi perdo ancora più a tempo a capire frasi tipo "La programmazione è diversa dalla procedurale". Ma che azz....:muro:
Ora vedo il De Sio se è meglio.
Quella ufficiale parte dalle basi del linguaggio?
In tal caso, come ho già detto diverse volte e nessuno "stranamente" s'è mai prestato, prendiamo degli esempi di problemi, tiriamo fuori i sorgenti coi vari linguaggi, e confrontiamoli. :O
Stampare 4? Dubito che si possa fare meglio di Ruby. Ben 4 caratteri in meno di python. :p
iMac-di-Mirco:~ mirco$ irb
irb(main):001:0> p 4
4
=> 4
irb(main):002:0>
Personalmente trovo il codice qui sopra semplicemente orrendo. Trovo che misurare la lunghezza per stabilire quale linguaggio sia migliore sia veramente stupido. In mano alla persona sbagliata anche linguaggi come Python e Ruby possono essere usati per scrivere porcate. Alla fine quello che conta veramente è chi pigia i tasti.
Personalmente trovo il codice qui sopra semplicemente orrendo. Trovo che misurare la lunghezza per stabilire quale linguaggio sia migliore sia veramente stupido. In mano alla persona sbagliata anche linguaggi come Python e Ruby possono essere usati per scrivere porcate. Alla fine quello che conta veramente è chi pigia i tasti.
Concordo su tutto.
Tra l'altro non so se avete visto che esiste Netbeans per Python :D
http://download.netbeans.org/netbeans/6.5/python/ea/
cdimauro
27-02-2009, 12:07
Stampare 4? Dubito che si possa fare meglio di Ruby. Ben 4 caratteri in meno di python. :p
iMac-di-Mirco:~ mirco$ irb
irb(main):001:0> p 4
4
=> 4
irb(main):002:0>
Personalmente trovo il codice qui sopra semplicemente orrendo. Trovo che misurare la lunghezza per stabilire quale linguaggio sia migliore sia veramente stupido. In mano alla persona sbagliata anche linguaggi come Python e Ruby possono essere usati per scrivere porcate. Alla fine quello che conta veramente è chi pigia i tasti.
Mirco, mi riferivo più precisamente alla semplicità del codice:
"Sono molto diversi. Python è di gran lunga più semplice rispetto a Java."
Da qui la "sfida" nel prendere esempi da tradurre nei vari linguaggi, in modo da confrontare le soluzioni.
Poi lo so benissimo che con qualunque linguaggio si possono fare delle porcate (io ne ho scritte non poche, corrette poi a seguito delle osservazioni che mi sono state fatte proprio in questa sezione :D), ma non erano gli "estremi" in discussione, quanto la "norma". ;)
Tra l'altro non so se avete visto che esiste Netbeans per Python :D
http://download.netbeans.org/netbeans/6.5/python/ea/
Hum. Appena posso gli butto un occhio. Grazie. :)
"Sono molto diversi. Python è di gran lunga più semplice rispetto a Java."
Da qui la "sfida" nel prendere esempi da tradurre nei vari linguaggi, in modo da confrontare le soluzioni.
Definisci "semplice" :D
~FullSyst3m~
27-02-2009, 12:24
Scusa Full, prima ti ho linkato una pagina che ti aveva già segnalato un altro utente.
Quello che ti volevo linkare io era il "The really Big Index (http://java.sun.com/docs/books/tutorial/reallybigindex.html)", che è una lista di tutto il materiale/tutorial contenuto nel sito "Sun Java Tutorial".
E' una risorsa davvero utile, forse è questo che cercavi.
Molto utile, l'aggiungo nei preferiti. Però per iniziare a dare uno sguardo credo che il De Sio sia ottimo.
P.S: è un casino NetBeans, io abituato agli editor di Python :D
Definisci "semplice"
Non vorrei sbagliarmi, ma credo che intendesse dire semplicità e chiarezza di codice. Ad esempio tra questo
#include <iostream.h>
void main()
{
cout << "Hello, World!" << endl;
}
e questo
print "Hello, World!"
quale è più semplice e chiaro?
Aumentando la complessità del programma poi in Python ci vuole molto meno tempo e linee di codice per fare la stessa cosa di un programma scritto in C.
Non vorrei sbagliarmi, ma credo che intendesse dire semplicità e chiarezza di codice. Ad esempio tra questo
#include <iostream.h>
void main()
{
cout << "Hello, World!" << endl;
}
e questo
print "Hello, World!"
quale è più semplice e chiaro?
Aumentando la complessità del programma poi in Python ci vuole molto meno tempo e linee di codice per fare la stessa cosa di un programma scritto in C.
Intanto il primo codice ha una struttura, il secondo non la ha. Che senso ha un programma senza una struttura. Il risparmio è solo nello scrivere Hello World, appena bisogna strutturare il codice perdi il vantaggio. Che poi è un vantaggio solo di caratteri...
~FullSyst3m~
27-02-2009, 12:37
Intanto il primo codice ha una struttura, il secondo non la ha. Che senso ha un programma senza una struttura. Il risparmio è solo nello scrivere Hello World, appena bisogna strutturare il codice perdi il vantaggio. Che poi è un vantaggio solo di caratteri...
Come non ha una struttura? La struttura devono essere le parentesi graffe? Python ha una sua struttura, l'indentazione.
Come non ha una struttura? La struttura devono essere le parentesi graffe? Python ha una sua struttura, l'indentazione.
Non è codice strutturato. Appena il programma si complica sei costretto a creare oggetti, funzioni, strutture dati etc etc. Non puoi confrontare un hello world, è troppo banale.
PS: poi perché hai tirato fuori C++ ?
~FullSyst3m~
27-02-2009, 12:44
Non è codice strutturato. Appena il programma si complica sei costretto a creare oggetti, funzioni, strutture dati etc etc. Non puoi confrontare un hello world, è troppo banale.
PS: poi perché hai tirato fuori C++ ?
L'hello world era un esempio. In ogni caso le funzioni, gli oggetti ecc non credo che si debbano creare solo in Python. Cosa c'è di strano?
P.S: perchè è il primo che mi è venuto sottomano.
L'hello world era un esempio. In ogni caso le funzioni, gli oggetti ecc non credo che si debbano creare solo in Python. Cosa c'è di strano?
C'è di strano che tutto quel vantaggio in termini di spazio va in percentuale a diminuire rispetto agli altri linguaggi.
nuvolare
27-02-2009, 12:51
Scusate, ho cercato nei vari post ma ho trovato manuali in inglese, è possibile avere manuali in Italiano o dei libri in Italiano per Java?
Ho deciso che mi leggo entrambi e poi decido.
Perché mi attiva Python per la sua semplicità e mi respinge per la poco praticità su Mac, che da quanto ho leggo e un pò un macello far funzionare successivamente le interfacce grafiche.
Invece per Java mi attira per, la quanto si dice trasportabilità su ampie piattaforme, ma non dalla sua semplicità come Python.
(soluzione tratte dai vari post)
Quindi credo sia meglio leggere e capire.
Faccio bene?
banryu79
27-02-2009, 12:58
@FullSyst3m
Molto utile, l'aggiungo nei preferiti. Però per iniziare a dare uno sguardo credo che il De Sio sia ottimo.
Credo ti troverai meglio appoggiandoti a un manuale carteceo per studiare il linguaggio.
Io studiai sul Thinking in Java di Bruce Eckel.
E poi studiai anche il manuale di De Sio, che ho trovato lineare e chiarissimo.
Il materiale in "The Really Big Index" ha anche una sezione che riguarda strettamente il linguaggio Java, ma ne sconsiglio l'utilizzo come guida per imaparare il linguaggio; credo che la sua presenza lì sia più che altro a corredo di tutti i tutorial presentati, come semplice riferimento rapido per chi sta seguendo un tutorial (quindi per chi sa già il linguaggio e magari gli capita di scordarsi qualche dettaglio, così lo trova senza doversi aprire un manuale).
Quella sezione ti sarà utile se e quando avrai completato l'apprendimento del linguaggio e ci avrai giocato un pochino per fare cose semplicissime.
Non appena ti sentirai pronto per addentrarti in ambiti tecnologici specifici (costruzione di interfacce grafica con AWT e SWING, rendering 2D, serializzazione oggetti in Java, utilizzo degli stream di dati, interfacciarsi ad un database con JDBC, wrappare codice C con JNI, manipolazione immagini, eccetera eccetera) questa risorsa può costituire un valido punto di partenza nell'apprendimento.
cdimauro
27-02-2009, 12:59
Definisci "semplice" :D
Qui (http://www.hwupgrade.it/forum/showpost.php?p=26467370&postcount=97) e qui (http://www.hwupgrade.it/forum/showpost.php?p=26478746&postcount=152). ;)
Intanto il primo codice ha una struttura, il secondo non la ha. Che senso ha un programma senza una struttura. Il risparmio è solo nello scrivere Hello World, appena bisogna strutturare il codice perdi il vantaggio. Che poi è un vantaggio solo di caratteri...
Non è codice strutturato. Appena il programma si complica sei costretto a creare oggetti, funzioni, strutture dati etc etc. Non puoi confrontare un hello world, è troppo banale.
PS: poi perché hai tirato fuori C++ ?
Perché dici che l'applicazione Python non ha una struttura? :confused:
Scusate, ho cercato nei vari post ma ho trovato manuali in inglese, è possibile avere manuali in Italiano o dei libri in Italiano per Java?
Ho deciso che mi leggo entrambi e poi decido.
Perché mi attiva Python per la sua semplicità e mi respinge per la poco praticità su Mac, che da quanto ho leggo e un pò un macello far funzionare successivamente le interfacce grafiche.
Invece per Java mi attira per, la quanto si dice trasportabilità su ampie piattaforme, ma non dalla sua semplicità come Python.
(soluzione tratte dai vari post)
Quindi credo sia meglio leggere e capire.
Faccio bene?
Fai bene. Studiali entrambi e poi deciderai con comodo con quale ti trovi meglio. ;)
~FullSyst3m~
27-02-2009, 13:09
@FullSyst3m
Credo ti troverai meglio appoggiandoti a un manuale carteceo per studiare il linguaggio.
Io studiai sul Thinking in Java di Bruce Eckel.
E poi studiai anche il manuale di De Sio, che ho trovato lineare e chiarissimo.
Il materiale in "The Really Big Index" ha anche una sezione che riguarda strettamente il linguaggio Java, ma ne sconsiglio l'utilizzo come guida per imaparare il linguaggio; credo che la sua presenza lì sia più che altro a corredo di tutti i tutorial presentati, come semplice riferimento rapido per chi sta seguendo un tutorial (quindi per chi sa già il linguaggio e magari gli capita di scordarsi qualche dettaglio, così lo trova senza doversi aprire un manuale).
Quella sezione ti sarà utile se e quando avrai completato l'apprendimento del linguaggio e ci avrai giocato un pochino per fare cose semplicissime.
Non appena ti sentirai pronto per addentrarti in ambiti tecnologici specifici (costruzione di interfacce grafica con AWT e SWING, rendering 2D, serializzazione oggetti in Java, utilizzo degli stream di dati, interfacciarsi ad un database con JDBC, wrappare codice C con JNI, manipolazione immagini, eccetera eccetera) questa risorsa può costituire un valido punto di partenza nell'apprendimento.
Quello di Bruce Eckel so che è buono, ma dato che il De Sio è buono, come dici anche tu, studio su quello per iniziare. Più che altro per portarmi avanti rispetto all'uni. Non mi va di sbattere la testa il prossimo anno con tutte le altre cose che avrò da fare. Quindi inizio da ora.
Perché dici che l'applicazione Python non ha una struttura?
Quello che ho detto io.
Qui (http://www.hwupgrade.it/forum/showpost.php?p=26467370&postcount=97) e qui (http://www.hwupgrade.it/forum/showpost.php?p=26478746&postcount=152). ;)
Ma se dice che ha capito che Python è semplice dai nostri post :mbe:
Riguardo alla struttura, l'ho spiegato: appena il codice salirà di complessità sarà necessario anche in Python "sprecare" linee di codice in intestazioni delle funzioni, import delle librerie etc etc. Quindi quell'esempio vale poco !!!
cdimauro
27-02-2009, 13:18
Ma se dice che ha capito che Python è semplice dai nostri post :mbe:
Beh, io non ho scritto da nessuna parte la famigerata
print 4
:D
Evidentemente ha fatto qualche ricerca da solo, dopo quello che gli abbiamo detto, e ha notato la differenza col C e Java.
Se, quindi, ha affermato che lo trova "più semplice", tanto mi basta, visto che non è possibile dare nessuna definizione oggettiva di "complessità", per cui dobbiamo affidarci al nostro comune (buon) senso. ;)
Riguardo alla struttura, l'ho spiegato: appena il codice salirà di complessità sarà necessario anche in Python "sprecare" linee di codice in intestazioni delle funzioni, import delle librerie etc etc. Quindi quell'esempio vale poco !!!
Ah, ho capito adesso. Ma io per "semplicità" mica mi riferivo al fatto che puoi scrivere immediamente codice senza racchiuderlo in un costrutto tipo quelli che hai elencato. Anche se devi riconoscere che è una comodità. ;)
La semplicità la ritrovi anche nella creazione di funzioni, classi, moduli, ecc. quindi dando una "struttura" al programma. E non c'è proprio confronto, codice alla mano. :cool:
La semplicità la ritrovi anche nella creazione di funzioni, classi, moduli, ecc. quindi dando una "struttura" al programma. E non c'è proprio confronto, codice alla mano. :cool:
Ripeto, questo lo dici te, io non ce la vedo, codice alla mano, anzi.
Edit: rispetto a Java charamente
banryu79
27-02-2009, 13:24
Perché mi attiva Python per la sua semplicità e mi respinge per la poco praticità su Mac, che da quanto ho leggo e un pò un macello far funzionare successivamente le interfacce grafiche.
Invece per Java mi attira per, la quanto si dice trasportabilità su ampie piattaforme, ma non dalla sua semplicità come Python.
Credo che tu abbia centrato il nocciolo della questione riguardo al tuo problema.
Ti invito ad una riflessione: tu parti da zero su tutto.
Cosa ti conviene fare:
A) faticare un po' di più [= dedicare più tempo, più fatica] per imparare il linguaggio in senso stretto però poi essere facilitato nello sviluppo e nell'integrazione delle varie tecnologie [= documentazione ampia e completa, interfaccia standardizzata] che comporranno la tua soluzione (applicazione) sulla piattaforma target (Mac)
oppure
b) imparare più rapidamente e facilmente[= meno tempo, meno fatica] il linguaggio in senso stretto però poi trovarti in difficoltà maggiori nello sviluppo e integrazione delle varie tecnologie che comporranno la tua soluzione sulla piattaforma target (Mac) [= completezza e standardizzazione della documentazione non assicurata, esaustività e completezza di librerie per le varie tecnologie? integrazione con piattaforma Mac? almeno stando a quanto riportato fin'ora da chi ha effettivamente lavorato con lo strumento Python nel contesto della piattaforma Mac]
Ti assicuro che non ti invidio, perchè so che ti trovi nella difficile posizione di quello che, non sapendone nulla in concreto deve scegliere il miglior percorso.
Puoi basarti solo su quello che ti hanno riportato tutti gli utenti che hanno partecipato fin'ora a questro thread di discussione.
Purtroppo mi rendo conto che in alcuni interventi i contenuti erano orientati a una critica più appartenente alla sfera de "il linguaggio x la spunta sul linguaggio y rispetto ad a, b e c" (tra l'altro di difficile valutazione da parte tua che ci senti parlare ma ancora non hai competenze tali da poterti fare un'opinione tua circostanziata) che non a dare a te un elemento di discrimiazione valido al fine di compiere una scelta.
Per come la vedo io, onestamente, tra la facilità di apprendimento del linguaggio in se, e la facilità d'uso invece dei moduli/librerie/framework (= strumenti) già esistenti che dovrai usare per integrare il codice sorgente della tua applicazione, accorderei preferenza per la seconda.
Ma questa è solo la scelta che farei io, al tuo posto, tenuto conto delle idee e conoscenze che ho oggi.
Come dicevo qualche post fa, alla fine per te, oggettivamente, è impossibile fare una scelta veramente tua: puoi solo compiere la scelta che "ti da la sensazione di aver preso la decisione migliore" sulla base della fiducia che accordi alle informazioni espresse nei post dei partecipanti.
Comunque consolati: sei partito che volevi studiare il linguaggio C per poi passare a Objective-C e da qui finalmente partire ad affrontare tutto l'ambaradam di tecnologie specifiche per implemetare l'applicativo... e ora hai una prospettiva diversa: Java o Python.
Comunque vada sarà meglio di prima :)
cdimauro
27-02-2009, 13:38
Ripeto, questo lo dici te, io non ce la vedo, codice alla mano, anzi.
Edit: rispetto a Java charamente
In caso, confrontiamo problemi e soluzioni in Python e Java.
Potremmo cominciare da qui (http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=python&lang2=java&box=1) e il corrispettivo (http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=java&lang2=python&box=1).
Basta visualizzare i sorgenti e confrontarli.
Ovviamente se conosci esempi di applicazioni disponibili per Python e Java, posta pure.
Al limite gli esempi li possiamo fare noi, non c'è problema. :D
AnonimoVeneziano
27-02-2009, 13:47
I vantaggi di python non sono certo nella quantità di caratteri con cui si scrivono i programmi.
I vantaggi di python su Java sono per lo più concentrati nella dinamicità del linguaggio.
Un esempio di vantaggio di Python su Java (che possa essere visto facilmente anche da un principiante) è ad esempio quando bisogna scrivere un metodo che deve ritornare un gruppo eterogeneo di elementi.
Mettiamo il caso che devo scrivere un metodo che ritorna una lista di coppie di elementi tipo "Oggetto Utente" e "Oggetto Sito Internet". Il primo è un'oggetto di un certo tipo e il secondo è un oggetto di un altro tipo.
In java dovrei scervellarmi su come fare. Potrei usare una ArrayList che contiene degli ArrayList che a loro volta contengono i due oggetti richiesti, ma per fare ciò dovrei usare ArrayList senza generics che a livello di sintassi fanno abbastanza schifo, perchè per usare i due oggetti sono costretto o a creare dei reference per ogni oggetto presente nell'ArrayList e usare gli oggetti coi reference (e se la lista dovesse contenere più di due oggetti? mi riempio di reference) o a infilare dei cast orribili nelle chiamate di metodo tipo :
String nomeutente = ((Utente)lista_main.get(0).lista.get(0)).getNome()
bleah.
Oppure dovrei creare un oggetto che contiene le coppie di oggetti che voglio ritornare dal metodo e infilare quello nell'arraylist e poi usare .getUtente() o .getSito() per ottenere l'oggetto tipo:
String nomeutente = lista.get(0).getUtente().getNome()
ma in questo caso dovrei creare un oggetto apposta per ritornare degli elementi da un metodo ... non molto comodo.
In python invece una lista con dentro liste è facile da fare e usare tipo:
[[utente1, sito1], [utente2, sito2], ...]
poi nel codice mi basta fare:
nomeutente = lista[0][0].getNome()
dove mi serve.
Insomma, in java mi serve più lavoro ed è anche sintatticamente più brutto.
Ovviamente la pericolosità di questa possibilità è evidente e uno può arrivare a creare liste di dizionari con liste di liste di dizionari ... etc e uscirsene fuori con cose tipo
lista[0]['chiave1'][4][2]['chiave2'][6].getNome()
In python ci sono molti esempi dove la dinamicità del linguaggio rende la vita all'utente molto più facile senza stare a pensare a tipi, cast ... etc
Ovviamente questa libertà permette di fare anche cose molto molto sporche come quella sopra . Insomma, libertà si, ma usarla con giudizio :p
Ciao
Ma non fa parte di Java. Io se scarico Python, ad esempio, di default ho già IDLE come IDE. ;)
NetBeans viene distribuito anche con il Java SDK: http://java.sun.com/javase/downloads/netbeans.html :fiufiu:
String nomeutente = lista.get(0).getUtente().getNome()
ma in questo caso dovrei creare un oggetto apposta per ritornare degli elementi da un metodo ... non molto comodo.
Non c'è bisogno di creare una classe apposta tutte le volte che hai bisogno di gestire coppie di elementi. Io mi sono scritto una robetta tipo:
public final class Pair<T,E> {
private final T first, E second;
public Pair(final T first, final E second) {
this.first = first; this.second = second;
}
// ...getters
}
E poi nell'arraylist gli infili questo tutte le volte.
ps. ho scritto direttamente nel editor del forum, perdonate eventuali errori.
Intanto il primo codice ha una struttura, il secondo non la ha. Che senso ha un programma senza una struttura. Il risparmio è solo nello scrivere Hello World, appena bisogna strutturare il codice perdi il vantaggio. Che poi è un vantaggio solo di caratteri...
Non e' solo un vantaggio di caratteri.
Qualcuno e' riuscito ad esporre la questione meglio di quel che potrei fare io...
http://norvig.com/ibol.html
Note: On Java Verbosity
Note: the Java main function is a good example of what I don't like about Java. For defining the Levenshtein distance function, Java is about as good as any language. But the main procedure addresses a simple task: just collect all the tokens from the input file that are longer than 500 characters; these are the genomes. In python, a simple task has a simple solution, taking just one line:
genomes = [t for t in file("barcodingdata.txt").read().split()) if len(t) > 500]
and all I have to remember is two things that I use every day: that file objects have a read method and strings have a split method.
In Java I have to remember or look up eight things: (1) the name of the class to read files, (2) the name of the class to buffer the reader, (3) the fact that I need both classes, (4) the class to tokenize strings, (5,6) the two methods that StringTokenizer uses to enumerate its elements (different from enumerating the elements of a list, vector, or any other class), and finally (7,8) the two classes of exceptions that can be thrown during the process of opening and reading files. That adds up to 15 lines:
public static void main(String[] args) throws java.io.FileNotFoundException, java.io.IOException {
String[] genomes = new String[1280];
BufferedReader reader = new BufferedReader(new FileReader("barcodingdata.txt"));
int N = 0;
String line;
while ((line = reader.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line);
while (st.hasMoreTokens()) {
String t = st.nextToken();
if (t.length() > 500) {
genomes[N] = t;
N++;
}
}
}
Ora, magari e' un esempio costruito ad arte, ma e' una cosa che ho sempre notato anche io quando ho a che fare con Java rispetto a molti altri linguaggi, non solo python.
AnonimoVeneziano
27-02-2009, 15:26
Non c'è bisogno di creare una classe apposta tutte le volte che hai bisogno di gestire coppie di elementi. Io mi sono scritto una robetta tipo:
public final class Pair<T,E> {
private final T first, E second;
public Pair(final T first, final E second) {
this.first = first; this.second = second;
}
// ...getters
}
E poi nell'arraylist gli infili questo tutte le volte.
ps. ho scritto direttamente nel editor del forum, perdonate eventuali errori.
Si beh, certo, usare i generici ti sistema il problema della coppia ... però se poi devi ritornare delle triplette? O quartetti di oggetti ... etc
Bisogna creare anche le triplette , quartetti ... etc , certo, si può fare, ma non è semplice come il caso python a mio parere :fagiano:
In python ci sono molti esempi dove la dinamicità del linguaggio rende la vita all'utente molto più facile senza stare a pensare a tipi, cast ... etc
Proprio grazie a questo il codice diventa illeggibile :D
Prima di tutto non è detto che se una cosa rende la vita più semplice al programmatore renda il progetto più leggibile. Se una collection come quella scritta sopra dal programmatore A passa in mano al programmatore B che se la ritrova come parametro di una funzione...cosa fa ? si mette le mani nei capelli ? Oppure si deve andare a leggere tutto il codice cercando di capire dove e come questa lista di liste è stata generata e cosa contiene.
Imho è una delle feature più error prone della storia della programmazione...cioè è una feature in comune con PHP, non so se mi spiego :asd:
Comunque a parte un cast non mi sembra che ci sia tutta questa differenza:
package base;
import java.util.ArrayList;
public class ListOfList {
public static class User {
String s;
public User(String string) {
s = string;
}
public String getName() {
return s;
}
}
public static class Site {
String s;
public Site(String string) {
s = string;
}
public String getName() {
return s;
}
}
public static ArrayList<Object> addPair(User u, Site s) {
ArrayList<Object> a = new ArrayList<Object>();
a.add(u);
a.add(s);
return a;
}
public static void main(String[] args) {
ArrayList<ArrayList<Object>> a = new ArrayList<ArrayList<Object>>();
a.add(addPair(new User("user1"), new Site("user1.site.com")));
a.add(addPair(new User("user2"), new Site("user2.site.com")));
a.add(addPair(new User("user3"), new Site("user3.site.com")));
System.out.println(((User) a.get(1).get(0)).getName());
System.out.println(((Site) a.get(2).get(1)).getName());
}
}
E nota che così si stanno mescolando le pere e le mele nella lista interna, cosa che imho non si dovrebbe mai fare. Se vi piace programmare sporco fate pure, ma a me piace più non farlo.
package base;
import java.util.ArrayList;
public class ListOfList {
public static interface named {
String getName();
}
public static class User implements named {
String s;
public User(String string) {
s = string;
}
public String getName() {
return s;
}
}
public static class Site implements named {
String s;
public Site(String string) {
s = string;
}
public String getName() {
return s;
}
}
public static ArrayList<named> addPair(User u, Site s) {
ArrayList<named> a = new ArrayList<named>();
a.add(u);
a.add(s);
return a;
}
public static void main(String[] args) {
ArrayList<ArrayList<named>> a = new ArrayList<ArrayList<named>>();
a.add(addPair(new User("user1"), new Site("user1.site.com")));
a.add(addPair(new User("user2"), new Site("user2.site.com")));
a.add(addPair(new User("user3"), new Site("user3.site.com")));
System.out.println(a.get(1).get(0).getName());
System.out.println(a.get(2).get(1).getName());
}
}
Comunque concordo con te che fare solamente un confronto sulle righe non ha senso. Tra l'altro Java è uno dei linguaggi in cui l'ambiente di sviluppo riesce a scrivere una percentuale molto grande del codice autonomamente (intestazioni di classi, metodi, parentesi).
Non e' solo un vantaggio di caratteri.
Qualcuno e' riuscito ad esporre la questione meglio di quel che potrei fare io...
http://norvig.com/ibol.html
Ora, magari e' un esempio costruito ad arte, ma e' una cosa che ho sempre notato anche io quando ho a che fare con Java rispetto a molti altri linguaggi, non solo python.
Per carità, non dico che Java non sia verboso, ma secondo me la verbosità non è un male.
Però...ad esempio per questa riga:
genomes = [t for t in file("barcodingdata.txt").read().split()) if len(t) > 500]
Come fai a fare il debug ?
~FullSyst3m~
27-02-2009, 15:49
Per carità, non dico che Java non sia verboso, ma secondo me la verbosità non è un male.
Però...ad esempio per questa riga:
genomes = [t for t in file("barcodingdata.txt").read().split()) if len(t) > 500]
Come fai a fare il debug ?
Semplicemente invece di usare le list comprehension si usa la sintassi "lunga":
genomes = []
for t in file('bla.txt').read().split():
if len(t) > 500:
genomes.append(t)
AnonimoVeneziano
27-02-2009, 15:52
Beh, la documentazione esiste anche per una eventuale classe pair, basta mettere una docstring con gli elementi che vengono ritornati nelle liste non mi sembra che sia molto diversa la cosa rispetto alla Javadoc della classe Pair :D
Comunque sul fatto che è molto error-prone sono d'accordo, giocare con certi strumenti che python ti mette a disposizione è come giocare con l'energia nucleare, puoi creare energia elettrica per una città o la puoi spazzare via in un secondo . Dipende come la usi :D
Java ti obbliga a seguire certi schemi che , se da un lato è vero che cercano di indirizzarti verso una buona abitudine di programmazione, da un certo altro punto di vista possono essere delle limitazioni che ti fanno perdere solo tempo e che non aggiungono niente di positivo al design codice, anzi, a volte lo rendono solo più caotico e confusionario.
Per questo python è nato come linguaggio di scripting e Java come linguaggio di programmazione, notoriamente nei linguaggi di scripting la cosa più importante è raggiungere l'obiettivo velocemente a discapito dell'eleganza , mentre nei linguaggi di programmazione è raggiungerlo elegantemente a discapito della velocità.
Python permette anche di raggiungere l'obiettivo elegantemente, ma si sa, il lato oscuro è seducente :asd:
Semplicemente invece di usare le list comprehension si usa la sintassi "lunga":
genomes = []
for t in file('bla.txt').read().split():
if len(t) > 500:
genomes.append(t)
Appunto, quindi è già inutile usare la sintassi corta se non a risparmiare caratteri :D
Quindi questa feature imho ha utilità nulla.
Python permette anche di raggiungere l'obiettivo elegantemente, ma si sa, il lato oscuro è seducente :asd:
Certo...fino a quando programmi da solo va bene :D
AnonimoVeneziano
27-02-2009, 15:58
Come fai a fare il debug ?
Uh? If it compiles, ship it!
Azz è vero che python non ha un compilatore statico :doh: :p
~FullSyst3m~
27-02-2009, 16:41
Appunto, quindi è già inutile usare la sintassi corta se non a risparmiare caratteri :D
Quindi questa feature imho ha utilità nulla.
Dipende da dove la usi questa feature. E poi ci sono modi e modi di scriverla. L'esempio tuo è proprio estremo visto che vengono eseguite molte istruzioni.
Ma se si fa una cosa del tipo:
l = [f**2 for f in numeri]
è più chiaro il codice.
Il punto è che non bisogna strafare, come ha detto Anonimo.
nuvolare
27-02-2009, 16:43
Scusate, ho cercato nei vari post ma ho trovato manuali in inglese, è possibile avere manuali in Italiano o dei libri in Italiano per Java?
Per carità, non dico che Java non sia verboso, ma secondo me la verbosità non è un male.
Però...ad esempio per questa riga:
genomes = [t for t in file("barcodingdata.txt").read().split()) if len(t) > 500]
Come fai a fare il debug ?
E cosa vorresti debuggare ? :confused: . Non lo fai, al piu' la testi. Non sono 20 linee di codice in cui devi tenere a mente altrettante cose diverse. L'idea e' che quella riga dice cosa fa, non come. E' questo il punto, non tanto la lunghezza in se'.
wingman87
27-02-2009, 16:47
Scusate, ho cercato nei vari post ma ho trovato manuali in inglese, è possibile avere manuali in Italiano o dei libri in Italiano per Java?
Ne trovi uno gratuito qui: http://www.claudiodesio.com/
E' aggiornato alla versione 5.
nuvolare
27-02-2009, 16:49
Per utilizzarlo con il Mac fa differenza? Poi per compilare cosa devo utilizzare?
~FullSyst3m~
27-02-2009, 16:50
Per utilizzarlo con il Mac fa differenza? Poi per compilare cosa devo utilizzare?
Credo che sia tutto spiegato li. Ho iniziato a studiare anche io in quel libro.
wingman87
27-02-2009, 16:57
Per utilizzarlo con il Mac fa differenza? Poi per compilare cosa devo utilizzare?
Il codice resta lo stesso, semplicemente dovrai scaricare il JDK giusto. Ho fatto una piccola ricerca per te, credo che troverai tutto qui:
http://developer.apple.com/java/
I vantaggi di python non sono certo nella quantità di caratteri con cui si scrivono i programmi.
I vantaggi di python su Java sono per lo più concentrati nella dinamicità del linguaggio.
Uhm, direi piuttosto che il sistema di tipi di Java e' quello che e', e manca un po' di "zucchero sintattico" per i tipi piu' usati.
Nell'espressione
Pair<String,Int> foo = Pair<String,Int>( "foo" , 42 );
L'informazione sui tipi viene ripetuta tre volte. Nella dichiarazione, nel costruttore, e negli argomenti. Tutto rumore visuale che disturba la lettura.
E' vero, ma spesso non c'è bisogno di ripeterla.
nuvolare
27-02-2009, 17:38
Il codice resta lo stesso, semplicemente dovrai scaricare il JDK giusto. Ho fatto una piccola ricerca per te, credo che troverai tutto qui:
http://developer.apple.com/java/
Ok, ti ringrazio per la ricerca, ho scaricato e quando provo ad installare mi dice che non ho bisogno di questo aggiornamento.
Io ho scaricato "Java for Mac OS X 10.4, Release 6" è quello corretto?
banryu79
27-02-2009, 17:45
Comunque volevo dire che il titolo del thread è irregolare :O
Che lo facciamo chiudere a Cionci, così nuvolare ne riapre uno nuovo e partiamo daccapo? :asd:
wingman87
27-02-2009, 17:56
Ok, ti ringrazio per la ricerca, ho scaricato e quando provo ad installare mi dice che non ho bisogno di questo aggiornamento.
Io ho scaricato "Java for Mac OS X 10.4, Release 6" è quello corretto?
Vuol dire che hai già installato tutto di default. In realtà lo immaginavo, lo dice in quel link che ti ho passato, all'inizio:
Mac OS X is the only major consumer operating system that comes complete with a fully configured and ready-to-use Java runtime and development environment.
Non so però se è già installato l'IDE, ad ogni modo trovi NetBeans qui:
http://www.netbeans.org/downloads/index.html
Devi solo selezionare Mac Os X tra le platform
Non e' solo un vantaggio di caratteri.
Qualcuno e' riuscito ad esporre la questione meglio di quel che potrei fare io...
http://norvig.com/ibol.html
Ora, magari e' un esempio costruito ad arte, ma e' una cosa che ho sempre notato anche io quando ho a che fare con Java rispetto a molti altri linguaggi, non solo python.
Io l'avrei fatto così:
ArrayList<String> genomes = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new FileReader("/home/cionci/Xorg.0.log"));
String line;
while ((line = reader.readLine()) != null)
for (String token : line.split(" "))
if (token.length() > 10)
genomes.add(token);
Un po' meglio rispetto a questo:
String[] genomes = new String[1280];
BufferedReader reader = new BufferedReader(new FileReader("barcodingdata.txt"));
int N = 0;
String line;
while ((line = reader.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line);
while (st.hasMoreTokens()) {
String t = st.nextToken();
if (t.length() > 500) {
genomes[N] = t;
N++;
}
}
nuvolare
27-02-2009, 18:01
Ok, perfetto, devo scaricare quella completa "All" giusto?
Ok, perfetto, devo scaricare quella completa "All" giusto?
Scarica solo quello con JavaSE...il resto per ora non ti interessa. Rischieresti solo di appesantire il tutto.
~FullSyst3m~
27-02-2009, 18:07
Io l'avrei fatto così:
ArrayList<String> genomes = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new FileReader("/home/cionci/Xorg.0.log"));
String line;
while ((line = reader.readLine()) != null)
for (String token : line.split(" "))
if (token.length() > 10)
genomes.add(token);
Un po' meglio rispetto a questo:
String[] genomes = new String[1280];
BufferedReader reader = new BufferedReader(new FileReader("barcodingdata.txt"));
int N = 0;
String line;
while ((line = reader.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line);
while (st.hasMoreTokens()) {
String t = st.nextToken();
if (t.length() > 500) {
genomes[N] = t;
N++;
}
}
A vedere questo codice mi passa la voglia di fare Java. E' traumatizzante la cosa venendo da Python.
I vantaggi di python non sono certo nella quantità di caratteri con cui si scrivono i programmi.
I vantaggi di python su Java sono per lo più concentrati nella dinamicità del linguaggio.
Un esempio di vantaggio di Python su Java (che possa essere visto facilmente anche da un principiante) è ad esempio quando bisogna scrivere un metodo che deve ritornare un gruppo eterogeneo di elementi.
Mettiamo il caso che devo scrivere un metodo che ritorna una lista di coppie di elementi tipo "Oggetto Utente" e "Oggetto Sito Internet". Il primo è un'oggetto di un certo tipo e il secondo è un oggetto di un altro tipo.
In java dovrei scervellarmi su come fare. Potrei usare una ArrayList che contiene degli ArrayList che a loro volta contengono i due oggetti richiesti, ma per fare ciò dovrei usare ArrayList senza generics che a livello di sintassi fanno abbastanza schifo, perchè per usare i due oggetti sono costretto o a creare dei reference per ogni oggetto presente nell'ArrayList e usare gli oggetti coi reference (e se la lista dovesse contenere più di due oggetti? mi riempio di reference) o a infilare dei cast orribili nelle chiamate di metodo tipo :
String nomeutente = ((Utente)lista_main.get(0).lista.get(0)).getNome()
bleah.
Oppure dovrei creare un oggetto che contiene le coppie di oggetti che voglio ritornare dal metodo e infilare quello nell'arraylist e poi usare .getUtente() o .getSito() per ottenere l'oggetto tipo:
String nomeutente = lista.get(0).getUtente().getNome()
ma in questo caso dovrei creare un oggetto apposta per ritornare degli elementi da un metodo ... non molto comodo.
In python invece una lista con dentro liste è facile da fare e usare tipo:
[[utente1, sito1], [utente2, sito2], ...]
poi nel codice mi basta fare:
nomeutente = lista[0][0].getNome()
dove mi serve.
Insomma, in java mi serve più lavoro ed è anche sintatticamente più brutto.
Ovviamente la pericolosità di questa possibilità è evidente e uno può arrivare a creare liste di dizionari con liste di liste di dizionari ... etc e uscirsene fuori con cose tipo
lista[0]['chiave1'][4][2]['chiave2'][6].getNome()
In python ci sono molti esempi dove la dinamicità del linguaggio rende la vita all'utente molto più facile senza stare a pensare a tipi, cast ... etc
Ovviamente questa libertà permette di fare anche cose molto molto sporche come quella sopra . Insomma, libertà si, ma usarla con giudizio :p
Ciao
non sono certo un esperto, e non sò neanche di cosa tratti questo 3d, solo credo che il problema posto sia inesistente, in Java puoi creare una classe di tipo object che ritorni un oggetto, ed essendo tutte le clasi sottoclassi della classe object, con tale classe puoi far tornare qualsiasi tipo di oggetto da un metodo di una classe Object, senza fare tanti giri
A vedere questo codice mi passa la voglia di fare Java. E' traumatizzante la cosa venendo da Python.
Scusa, ma che differenza noti fra:
while ((line = reader.readLine()) != null)
for (String t : line.split(" "))
if (t.length() > 500)
genomes.add(t);
e
for t in file('bla.txt').read().split():
if len(t) > 500:
genomes.append(t)
Bene o male il codice effettivo è quello, le altre sono tutte dichiarazioni di variabili...
~FullSyst3m~
27-02-2009, 18:39
Scusa, ma che differenza noti fra:
while ((line = reader.readLine()) != null)
for (String t : line.split(" "))
if (t.length() > 500)
genomes.add(t);
e
for t in file('bla.txt').read().split():
if len(t) > 500:
genomes.append(t)
Bene o male il codice effettivo è quello, le altre sono tutte dichiarazioni di variabili...
Magari la differenza qua non si nota, ma in altro codice si. La definizione di classi, di variabili, l'instanziazione, la getsione e creazione di array ecc è abbastanza diversa da Python.
^TiGeRShArK^
27-02-2009, 18:51
Non e' solo un vantaggio di caratteri.
Qualcuno e' riuscito ad esporre la questione meglio di quel che potrei fare io...
http://norvig.com/ibol.html
Ora, magari e' un esempio costruito ad arte, ma e' una cosa che ho sempre notato anche io quando ho a che fare con Java rispetto a molti altri linguaggi, non solo python.
File.ReadAllLines("genomes.txt").Where(l => l.Split().Count > 500);
questo in C# se non ho dimenticato niente...
E comunque anche Java ha il metodo split, quindi chi ha scritto il codice lo poteva rendere meno complesso.
EDIT: appunto, ho appena visto che cionci ha scritto il codice con lo split al posto del tokenizer.
Qui
http://norvig.com/ibol.html
è stato fatto scempio di Java così come di Python. Perchè è stato distorto il principio comune delle due lingue: l'essere di alto livello.
Darei per buone due teorie sul concetto di alto livello.
Una è quella secondo cui un linguaggio è di alto livello se permette di scrivere tanto codice macchina con poche parole.
L'altra dice che un linguaggio è di alto livello se mi consente di esprimere un concetto in forma umanamente comprensibile.
La prima visione è utile quanto l'alito cattivo: non gliene frega niente a nessuno finchè non se lo trova sotto il naso.
La seconda è già più interessante.
Concedetemi per buona un'affermazione. Dato un qualsiasi essere umano questo:
genomes = [t for t in file("barcodingdata.txt").read().split()) if len(t) > 500]
vale quanto questo:
public static void main(String[] args) throws java.io.FileNotFoundException, java.io.IOException {
String[] genomes = new String[1280];
BufferedReader reader = new BufferedReader(new FileReader("barcodingdata.txt"));
int N = 0;
String line;
while ((line = reader.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line);
while (st.hasMoreTokens()) {
String t = st.nextToken();
if (t.length() > 500) {
genomes[N] = t;
N++;
}
}
}
Cioè niente. La differenza tra i due è che nel secondo ha usato molte più parole per non dire alcunchè.
L'autore era così concentrato su come ottenere un risultato da dimenticare di dire quale risultato volesse ottenere. E' come prendere la macchina e andare a sbattere contro un palo. Perchè l'hai fatto? Perchè la macchina può farlo. Be', è vero, ma potrebbe non essere quello lo scopo di un'automobile.
cdimauro
27-02-2009, 19:25
NetBeans viene distribuito anche con il Java SDK: http://java.sun.com/javase/downloads/netbeans.html :fiufiu:
Devi scaricarti l'SDK, appunto. Con Python ho tutto "batteries included" già nella versione ufficiale. ;)
Proprio grazie a questo il codice diventa illeggibile :D
Beh, a giudicare dal codice Java che hai scritto finora, mi sembra l'esatto contrario. :fagiano:
Prima di tutto non è detto che se una cosa rende la vita più semplice al programmatore renda il progetto più leggibile. Se una collection come quella scritta sopra dal programmatore A passa in mano al programmatore B che se la ritrova come parametro di una funzione...cosa fa ? si mette le mani nei capelli ? Oppure si deve andare a leggere tutto il codice cercando di capire dove e come questa lista di liste è stata generata e cosa contiene.
Imho è una delle feature più error prone della storia della programmazione...cioè è una feature in comune con PHP, non so se mi spiego :asd:
Non mi sembra che lo stretto controllo sui tipi di Java si estenda anche ai generic, o sbaglio? Anche questa è una "feature" error prone, e guarda caso salta fuori nel momento in cui hai la necessità di "liberarti" dei tipi.
Comunque quella di mischiare pere e mele non è la norma, ma dimostra la facilità con cui sia possibile farlo in Python senza aumentare mostruosamente la complessità del codice.
Ciò che è importante è sottolineare che Python può gestire liste, tuple, dizionario e insieme di qualunque tipo. Dove normalmente il tipo è comune a tutti gli elementi (e quindi puoi stare tranquillo che chi metterà mano al codice non avrà difficoltà a comprendere come funziona), ma se serve può anche non esserlo (come nell'esempio).
Comunque a parte un cast non mi sembra che ci sia tutta questa differenza:
package base;
import java.util.ArrayList;
public class ListOfList {
public static class User {
String s;
public User(String string) {
s = string;
}
public String getName() {
return s;
}
}
public static class Site {
String s;
public Site(String string) {
s = string;
}
public String getName() {
return s;
}
}
public static ArrayList<Object> addPair(User u, Site s) {
ArrayList<Object> a = new ArrayList<Object>();
a.add(u);
a.add(s);
return a;
}
public static void main(String[] args) {
ArrayList<ArrayList<Object>> a = new ArrayList<ArrayList<Object>>();
a.add(addPair(new User("user1"), new Site("user1.site.com")));
a.add(addPair(new User("user2"), new Site("user2.site.com")));
a.add(addPair(new User("user3"), new Site("user3.site.com")));
System.out.println(((User) a.get(1).get(0)).getName());
System.out.println(((Site) a.get(2).get(1)).getName());
}
}
Certo. Non c'è molta differenza: hai scritto un papiro chilometrico per fare una cosa che con Python risolvi con una manciata di righe e una leggibilità di gran lunga migliore. :asd:
E nota che così si stanno mescolando le pere e le mele nella lista interna, cosa che imho non si dovrebbe mai fare. Se vi piace programmare sporco fate pure, ma a me piace più non farlo.
Dipende tutto dalle esigenze che si ha. Nessuno t'impedisce di piazzare dei controlli addizionali sui tipi che stai utilizzando, e nonostante tutto il codice non ti diventa chilometrico.
package base;
import java.util.ArrayList;
public class ListOfList {
public static interface named {
String getName();
}
public static class User implements named {
String s;
public User(String string) {
s = string;
}
public String getName() {
return s;
}
}
public static class Site implements named {
String s;
public Site(String string) {
s = string;
}
public String getName() {
return s;
}
}
public static ArrayList<named> addPair(User u, Site s) {
ArrayList<named> a = new ArrayList<named>();
a.add(u);
a.add(s);
return a;
}
public static void main(String[] args) {
ArrayList<ArrayList<named>> a = new ArrayList<ArrayList<named>>();
a.add(addPair(new User("user1"), new Site("user1.site.com")));
a.add(addPair(new User("user2"), new Site("user2.site.com")));
a.add(addPair(new User("user3"), new Site("user3.site.com")));
System.out.println(a.get(1).get(0).getName());
System.out.println(a.get(2).get(1).getName());
}
}
Leggibilissimo anche questo, eh? :D
Comunque concordo con te che fare solamente un confronto sulle righe non ha senso.
In Python la quantità inferiore di codice è una diretta conseguenza della sua dinamicità e dei tipi standard di cui è fornito.
In Java la quantità codice è diretta conseguenza degli errori di design dei suoi progettisti che l'hanno reso uno dei linguaggi più inutilmente prolissi, anche rispetto a linguaggi a tipizzazione statica.
Tra l'altro Java è uno dei linguaggi in cui l'ambiente di sviluppo riesce a scrivere una percentuale molto grande del codice autonomamente (intestazioni di classi, metodi, parentesi).
Questo dipende dall'IDE utilizzato. Komodo Edit ha un'ottima funzionalità di completamento del codice (non soltanto per Python).
Semplicemente invece di usare le list comprehension si usa la sintassi "lunga":
genomes = []
for t in file('bla.txt').read().split():
if len(t) > 500:
genomes.append(t)
Non serve: il codice precedente è già autoesplicativo e molto semplice.
E cosa vorresti debuggare ? :confused: . Non lo fai, al piu' la testi. Non sono 20 linee di codice in cui devi tenere a mente altrettante cose diverse. L'idea e' che quella riga dice cosa fa, non come. E' questo il punto, non tanto la lunghezza in se'.
Esattamente. Tra l'altro producendo codice molto più velocemente, con Python si arriva prima a testare il codice con dei dati reali.
Anzi, spesso i pezzi di codice li si testa direttamente dall'interprete a riga di comando (anch'esso in dotazione con la distribuzione standard; non mi sembra che né Java standard né la versione con NetBeans abbiano feature simili), aumentando notevolmente la produttività. :cool:
Uhm, direi piuttosto che il sistema di tipi di Java e' quello che e', e manca un po' di "zucchero sintattico" per i tipi piu' usati.
Nell'espressione
Pair<String,Int> foo = Pair<String,Int>( "foo" , 42 );
L'informazione sui tipi viene ripetuta tre volte. Nella dichiarazione, nel costruttore, e negli argomenti. Tutto rumore visuale che disturba la lettura.
Concordo. Non dico di prendere i tipi direttamente dai dati, ma almeno nella dichiarazione della variabile si poteva evitare di ripetere esattamente gli stessi tipi presenti nel costruttore.
I generic fanno veramente pena in Java.
E' vero, ma spesso non c'è bisogno di ripeterla.
A me pare il contrario: spesso c'è bisogna di ripetere i tipi.
A vedere questo codice mi passa la voglia di fare Java. E' traumatizzante la cosa venendo da Python.
Ti ci dovrai abituare: purtroppo Java è stradiffuso all'università.
Scusa, ma che differenza noti fra:
while ((line = reader.readLine()) != null)
for (String t : line.split(" "))
if (t.length() > 500)
genomes.add(t);
e
for t in file('bla.txt').read().split():
if len(t) > 500:
genomes.append(t)
Bene o male il codice effettivo è quello, le altre sono tutte dichiarazioni di variabili...
Hai detto niente. :D Mica puoi prendere il solo codice grezzo quando fai i confronti: devi mettere TUTTO sul piatto, anche gli import che fai. :O
~FullSyst3m~
27-02-2009, 20:40
Ti ci dovrai abituare: purtroppo Java è stradiffuso all'università.
Lo so. Magari però faranno Python il prossimo anno :D
^TiGeRShArK^
27-02-2009, 20:46
Devi scaricarti l'SDK, appunto. Con Python ho tutto "batteries included" già nella versione ufficiale. ;)
ehmmm...
cesare...
l'SDK E' la versione ufficiale.. :stordita:
anzi, se vogliamo per me è un pregio che la sun ti permetta di scaricare sia il jdk da solo che con netbeans, anche perchè chi ha già netbeans immagino preferisca non scaricarsi un centinaio di mega di roba ad ogni update della VM... :mbe:
per me è la scelta migliore.
E comunque ricordiamo che IDLE non è un IDE, ma è una caccoletta rispetto a Netbeans.. :mbe:
cdimauro
27-02-2009, 21:01
ehmmm...
cesare...
l'SDK E' la versione ufficiale.. :stordita:
Sì, lo so che la distribuisce Sun, ma mi riferivo alla JRE. :fagiano:
anzi, se vogliamo per me è un pregio che la sun ti permetta di scaricare sia il jdk da solo che con netbeans, anche perchè chi ha già netbeans immagino preferisca non scaricarsi un centinaio di mega di roba ad ogni update della VM... :mbe:
per me è la scelta migliore.
Certamente.
E comunque ricordiamo che IDLE non è un IDE, ma è una caccoletta rispetto a Netbeans.. :mbe:
Non c'è dubbio. :D
^TiGeRShArK^
27-02-2009, 21:04
Sì, lo so che la distribuisce Sun, ma mi riferivo alla JRE. :fagiano:
Certamente.
Non c'è dubbio. :D
si ma con il JRE non puoi programmare, hai solo il runtime :p
con il JDK invece puoi programmare e con JDK + netbeans hai anche un IDE :p
cdimauro
27-02-2009, 21:13
Sì, lo so. Con Java c'ho lavorato. :D
Volevo solo sottolineare che già con l'installazione standard di Python si può anche programmare. :)
^TiGeRShArK^
27-02-2009, 21:20
Sì, lo so. Con Java c'ho lavorato. :D
Volevo solo sottolineare che già con l'installazione standard di Python si può anche programmare. :)
perchè non hai bisogno di compilare :p
cdimauro
27-02-2009, 21:32
perchè non hai bisogno di compilare :p
Ehm... anche il compilatore è già incluso. :cool:
nuvolare
28-02-2009, 17:03
A questo punto ho scaricato i 2 manuali, Pytho e Java e sto leggendo...
Ho iniziato con i primi capitoli di java, mi dice che per iniziare è meglio utilizzare la Java Develpment Kit e di utilizzare quella.
Io con Mac non posso utilizzarla vero?
Ho saltato quindi tutta la spiegazione e sono arrivato subito al primo codice che ho compilato ed eseguito con NetBeans 6.5:
public class HelloWord
{
public static void main(String args[])
{
Sistem.out.println("Hello Word!");
}
}
Prima sequenza di errori...
Sistem.out.println("Hello Word!");
1 error
BUILD FAILED (total time: 0 seconds)
Perché non ha compilato?
System.out.println("Hello Word!");
nuvolare
28-02-2009, 17:12
System.out.println("Hello Word!");
E meno male che l'ho letto 70 volte prima di postare!!!! :doh:
Grazie 1000
nuvolare
28-02-2009, 18:36
Mah! sto leggendo e sono arrivato ancora al 2° capitolo, quindi posso dire che ancora sono a niente e quindi non vorrei essere molto frettoloso, ma il libro mi sembra molto chiaro.... tantè vero che ho capito delle cose che non avevo ben capito in C. Mi piace questo Java!!! :D
~FullSyst3m~
28-02-2009, 19:14
Mah! sto leggendo e sono arrivato ancora al 2° capitolo, quindi posso dire che ancora sono a niente e quindi non vorrei essere molto frettoloso, ma il libro mi sembra molto chiaro.... tantè vero che ho capito delle cose che non avevo ben capito in C. Mi piace questo Java!!! :D
Che libro stai usando?
nuvolare
28-02-2009, 20:12
Che libro stai usando?
Sto utilizzando Object Oriented && Java 5 - II Edizione
~FullSyst3m~
28-02-2009, 22:34
Sto utilizzando Object Oriented && Java 5 - II Edizione
Capito. Quello di De Sio. Io pure.
Avevo iniziato il mattone dopo mattone ma ci sono errori incredibili. Ma non lo controllano il libro prima di distribuirlo?
Adesso sto leggendo l'introduzione di quello del De Sio.
DanieleC88
01-03-2009, 00:17
P.S. Python integra nativamente Tk per sviluppare interfacce grafiche senza installare altro. Tipo Java, quindi. ;)
Ahem. Tk è una chiavica.
:D
A vedere questo codice mi passa la voglia di fare Java. E' traumatizzante la cosa venendo da Python.
Fallo in C e poi ne riparliamo. :Prrr:
Fallo in C e poi ne riparliamo. :Prrr:
Sai che l'istigazione al suicidio è un reato? :D
Concordo con alex. C è il penultimo linguaggio da usare per processare stringhe. Io dopo tutti questi anni ancora non ho capito come funziona strtok. :O
~FullSyst3m~
01-03-2009, 00:52
Ahem. Tk è una chiavica.
:D
Sottoscrivo :D
Fallo in C e poi ne riparliamo. :Prrr:
Tra il coma e il suicidio scelgo il coma :D
Anche se arriverò anche al suicidio visto che dovrò fare pure C.
Sai che l'istigazione al suicidio è un reato?
:rotfl:
Concordo con alex. C è il penultimo linguaggio da usare per processare stringhe. Io dopo tutti questi anni ancora non ho capito come funziona strtok.
Addirittura :eek:
P.S: l'ultimo e l'assembly?
~FullSyst3m~
01-03-2009, 01:14
Esatto.
Come mai questo problema a processare stringhe?
cdimauro
01-03-2009, 07:09
Ahem. Tk è una chiavica.
:D
L'ho detto che c'è di meglio. :D
Poi francamente preferirei che fosse integrata la VCL di Delphi & CBuilder. Anzi, qualche tempo fa avevo (appena) cominciato a scriverla in Python, ma poi mi sono orientato sulla sua virtual machine e... ci sono rimasto "secco". :p
Sottoscrivo :D
Tra il coma e il suicidio scelgo il coma :D
Anche se arriverò anche al suicidio visto che dovrò fare pure C.
:rotfl:
Addirittura :eek:
Prepara la spada a lama piccola per il seppuku. :asd:
P.S: l'ultimo e l'assembly?
Esatto.
Parlate così perché non avete visto quanto è "bello" il linguaggio macchina. :asd:
Come mai questo problema a processare stringhe?
Direttamente dal generatore di AST di CPython (file ast.c):
static int
forbidden_check(struct compiling *c, const node *n, const char *x)
{
if (!strcmp(x, "None"))
return ast_error(n, "assignment to None");
if (Py_Py3kWarningFlag && !(strcmp(x, "True") && strcmp(x, "False")) &&
!ast_warn(c, n, "assignment to True or False is forbidden in 3.x"))
return 0;
return 1;
}
strcmp viene usato per confrontare le stringhe... Bello, vero? :asd:
Concordo con alex. C è il penultimo linguaggio da usare per processare stringhe. Io dopo tutti questi anni ancora non ho capito come funziona strtok. :O
Quella funzione è un porcaio abnorme :asd:
DanieleC88
01-03-2009, 11:16
Sai che l'istigazione al suicidio è un reato? :D
:asd:
Concordo con alex. C è il penultimo linguaggio da usare per processare stringhe. Io dopo tutti questi anni ancora non ho capito come funziona strtok. :O
Oddio, alla fine strtok() è facile, sia come implementazione che come comportamento. Il problema è che è una delle cose meno thread-safe che io conosca. :asd:
(in altre parole, fatevi un parser a mano che fate meglio)
DanieleC88
01-03-2009, 11:19
Tra il coma e il suicidio scelgo il coma :D
Anche se arriverò anche al suicidio visto che dovrò fare pure C.
Mah, guarda, alla fine siamo nel 2009, anche la nostra università s'è resa conto che è meglio mettere un po' di Java sin dal primo anno; credo che il C lo incontrerai poco, e immagino che non vi faranno fare parecchio con la manipolazione di stringhe (più che altro allocazione dinamica, gestione di matrici e roba simile). Secondo me riesci a salvarti. :D
cdimauro
01-03-2009, 12:50
Visto che dovrà frequentare la mia stessa università, confermo: a Catania Java ormai impera, e il C si vede moooooolto raramente per fortuna (soltanto in alcune materie, e per lo più per mostrare degli esempi, tipo la classica chat realizzata coi socket).
Quindi gli andrà abbastanza bene.
~FullSyst3m~
01-03-2009, 13:02
L'ho detto che c'è di meglio. :D
Poi francamente preferirei che fosse integrata la VCL di Delphi & CBuilder. Anzi, qualche tempo fa avevo (appena) cominciato a scriverla in Python, ma poi mi sono orientato sulla sua virtual machine e... ci sono rimasto "secco". :p
Secco in senso negativo o positivo??
Prepara la spada a lama piccola per il seppuku. :asd:
Dopo aver visto il codice sotto la preparo sicuro :asd:
Parlate così perché non avete visto quanto è "bello" il linguaggio macchina. :asd:
Infatti. Io lo amo.... :ciapet:
Direttamente dal generatore di AST di CPython (file ast.c):
static int
forbidden_check(struct compiling *c, const node *n, const char *x)
{
if (!strcmp(x, "None"))
return ast_error(n, "assignment to None");
if (Py_Py3kWarningFlag && !(strcmp(x, "True") && strcmp(x, "False")) &&
!ast_warn(c, n, "assignment to True or False is forbidden in 3.x"))
return 0;
return 1;
}
strcmp viene usato per confrontare le stringhe... Bello, vero? :asd:
:eek:
P.S: cosa è AST?
Quella funzione è un porcaio abnorme
:rotfl:
Mah, guarda, alla fine siamo nel 2009, anche la nostra università s'è resa conto che è meglio mettere un po' di Java sin dal primo anno; credo che il C lo incontrerai poco, e immagino che non vi faranno fare parecchio con la manipolazione di stringhe (più che altro allocazione dinamica, gestione di matrici e roba simile). Secondo me riesci a salvarti.
Se hai ragione ti offro un PyPizza e una PyCola :D
Sono ateo, ma credo che inizierò a pregare perchè questo si avveri :asd:
Visto che dovrà frequentare la mia stessa università, confermo: a Catania Java ormai impera, e il C si vede moooooolto raramente per fortuna (soltanto in alcune materie, e per lo più per mostrare degli esempi, tipo la classica chat realizzata coi socket).
Quindi gli andrà abbastanza bene.
Menomale. Io incrocio le dita. Addirittura in alcune uni, tipo Parma mi sembra, fanno fare pure Python e C#. Speranza di vederli a Catania, visto che è rinomata per l'alto livello di preparazione e aggiornamento che ha, c'è nè?
P.S: è emozionante sentire dire "dovrà frequentare la mia stessa università" :asd:
cdimauro
01-03-2009, 13:29
Secco in senso negativo o positivo??
Entrambi. (MOLTO) Positivo perché mettere le mani su roba come la virtual machine, il compilatore, l'ottimizzatore è estremamente stimolante e appagante (quando arrivano i risultati :D).
(MOLTO) negativo perché, purtroppo, ho a che fare col C e con le sue idiosincrasie (tipo i maledettissimi switch che se ti dimentichi di mettere il break a fine case, ti fanno sudare 70 volte 7 camicie per capire dov'è l'errore :muro:).
:eek:
P.S: cosa è AST?
Abstract Syntax Tree. E' un "albero" che viene generato in fase di parsing del sorgente, e viene usato per produrre poi il codice oggetto.
Menomale. Io incrocio le dita. Addirittura in alcune uni, tipo Parma mi sembra, fanno fare pure Python e C#. Speranza di vederli a Catania, visto che è rinomata per l'alto livello di preparazione e aggiornamento che ha, c'è nè?
Mi pare difficile. Ho visto qualcuno usare Python, ma a livello di materie non mi risulta lo si studi.
E' anche vero che manco da un po' di anni ormai, ma non credo che l'università sia cambiata fino a questo punto (magari! :D).
P.S: è emozionante sentire dire "dovrà frequentare la mia stessa università" :asd:
Non farmi fare brutta figura!!! :p
~FullSyst3m~
01-03-2009, 13:44
Entrambi. (MOLTO) Positivo perché mettere le mani su roba come la virtual machine, il compilatore, l'ottimizzatore è estremamente stimolante e appagante (quando arrivano i risultati :D).
(MOLTO) negativo perché, purtroppo, ho a che fare col C e con le sue idiosincrasie (tipo i maledettissimi switch che se ti dimentichi di mettere il break a fine case, ti fanno sudare 70 volte 7 camicie per capire dov'è l'errore :muro:).
Non ti va proprio giù il C a quanto vedo. E se non va giù a te con le conoscenze e l'esperienza che hai credo sia tutto dire. Mi domando come fanno a sviluppare il kernel linux, e anche gli altri, che sono di una complessità altissima, in C.
P.S: oltretutto non credo che hai 490 camicie. Con Python stai a maniche corte immagino :asd:
Abstract Syntax Tree. E' un "albero" che viene generato in fase di parsing del sorgente, e viene usato per produrre poi il codice oggetto.
Ah, si. Ora ricordo. Lo avevo letto da qualche parte.
Mi pare difficile. Ho visto qualcuno usare Python, ma a livello di materie non mi risulta lo si studi.
Lo immaginavo. Mi è sembrato strano infatti sentire dire che a Parma lo studiano. Forse la persona che me l'ha detto intendeva dire che gli hanno lasciato scelta libera di linguaggio per sviluppare qualche progetto. Ho guardato tantissime uni e non risulta in nessuna Python o C# nel programma di studi.
E' anche vero che manco da un po' di anni ormai, ma non credo che l'università sia cambiata fino a questo punto (magari! :D).
Ma tu quando ti sei laureato?
Non farmi fare brutta figura!!! :p
Ehm... in che senso?? Casomai, in caso di emergenza, neghi categoricamente di conoscermi :D
Vincenzo1968
01-03-2009, 14:19
A proposito di AST, sto preparando un contest: sviluppare un piccolo compilatore per un mini linguaggio di programmazione a oggetti. Vincerà chi riuscirà a produrre il codice più ottimizzato.
;)
P.S. per "codice ottimizzato" intendo l'assembly prodotto dal compilatore e non il tempo impiegato per produrlo(bisognerà utilizzare, quindi, algoritmi per l'eliminazione di sottoespressioni comuni, ottimizzazione dei salti, constant folding, eliminazione della ricorsione in coda, etc).
cdimauro
01-03-2009, 14:49
Non ti va proprio giù il C a quanto vedo.
No, e proprio perché c'ho lavorato e ci lavoro so quanto "pesa" sviluppare con questo linguaggio.
E se non va giù a te con le conoscenze e l'esperienza che hai credo sia tutto dire. Mi domando come fanno a sviluppare il kernel linux, e anche gli altri, che sono di una complessità altissima, in C.
Cazzi loro. :asd:
P.S: oltretutto non credo che hai 490 camicie. Con Python stai a maniche corte immagino :asd:
:cool: Comunque era una citazione biblica. Per "70 volte 7" s'intende un numero "enorme". :D
Ma tu quando ti sei laureato?
Nel 2004.
Ehm... in che senso?? Casomai, in caso di emergenza, neghi categoricamente di conoscermi :D
Già. :D
A proposito di AST, sto preparando un contest: sviluppare un piccolo compilatore per un mini linguaggio di programmazione a oggetti. Vincerà chi riuscirà a produrre il codice più ottimizzato.
;)
P.S. per "codice ottimizzato" intendo l'assembly prodotto dal compilatore e non il tempo impiegato per produrlo(bisognerà utilizzare, quindi, algoritmi per l'eliminazione di sottoespressioni comuni, ottimizzazione dei salti, constant folding, eliminazione della ricorsione in coda, etc).
In questo caso un linguaggio di più alto livello aiuta a sviluppare più velocemente il prototipo e a testare prima quindi il codice prodotto. ;)
~FullSyst3m~
01-03-2009, 15:07
No, e proprio perché c'ho lavorato e ci lavoro so quanto "pesa" sviluppare con questo linguaggio.
La sofferenza dell'informatica è racchiusa in questo linguaggio :asd:
Cazzi loro. :asd:
Sono degli automi per caso?? Di sicuro sono dei cervellini fini per scrivere una cosa del genere in C.
:cool: Comunque era una citazione biblica. Per "70 volte 7" s'intende un numero "enorme". :D
Era una battuta infatti :muro:
Nel 2004.
Qualcosa credo sia cambiata da allora. Sono passati 5 anni.
Già. :D
Giuda :mad:
Vincenzo1968
01-03-2009, 15:13
...
In questo caso un linguaggio di più alto livello aiuta a sviluppare più velocemente il prototipo e a testare prima quindi il codice prodotto. ;)
Infatti, per la prima volta, voglio provare a cimentarmi in Java. Lo sto studiando da qualche giorno perché voglio fornire gli esempi di codice del mio sito con questo linguaggio oltre che in C(così forse qualcuno, qui(ohé banryu, tutto a posto? :D), la smetterà di definirmi :old: :mad:).
;)
EDIT: tra l'altro, la seconda edizione del Dragon Book(2006), riporta gli esempi proprio in Java ;)
cdimauro
01-03-2009, 15:36
Sono degli automi per caso?? Di sicuro sono dei cervellini fini per scrivere una cosa del genere in C.
Naaaa. Se avessero i cervelli "fini" sarebbero passati quanto meno al C++ da un pezzo. :asd:
A parte gli scherzi, ci si scontra spesso con il legacy, cioé col codice già prodotto. E un compilatore C esiste per qualunque piattaforma.
Ecco perché, purtroppo, CPython è scritto in C. Dove c'è un compilatore C potenzialmente ci può essere Python.
Giuda :mad:
:ciapet:
Infatti, per la prima volta, voglio provare a cimentarmi in Java. Lo sto studiando da qualche giorno perché voglio fornire gli esempi di codice del mio sito con questo linguaggio oltre che in C(così forse qualcuno, qui(ohé banryu, tutto a posto? :D), la smetterà di definirmi :old: :mad:).
;)
Vedrai che la tua produttività aumenterà notevolmente. Java poi ha una ricchissima libreria standard.
EDIT: tra l'altro, la seconda edizione del Dragon Book(2006), riporta gli esempi proprio in Java ;)
Io ho soltanto la prima edizione. :stordita:
Comunque in questi casi più che altro servono le idee. Il DB è sicuramente "la bibbia" per quanto riguarda compilatori et similia, ma ti dà (tante) nozioni di base. Poi l'algoritmo "fico" che per certi pattern genera un codice "molto buono" è tutto frutto della mente (malata in alcuni casi :asd:) dello sviluppatore. :cool:
Ecco perché, purtroppo, CPython è scritto in C. Dove c'è un compilatore C potenzialmente ci può essere Python.
E qualsiasi altro linguaggio con compilatore e VM scritta in C o C++ :)
Cioè praticamente tutti.
nuvolare
01-03-2009, 15:53
Sono alle prese con i primi esercizi di Java, ed ho compilato quanto scritto sul libro all'esercizio 2.a.
public class ClasseRichiesta
{
public static void main(String[] args)
{
NumeroIntero uno = new NumeroIntero();
NumeroIntero due = new NumeroIntero();
uno.numeroIntero = 1;
due.NUmeroIntero = 2;
uno.StampaNumero();
due.Stampanumero();
}
}
Mi spiegate perché NetBeans mi da tanti punti esclamativi rossi ed alcuni di essi con la lampadina? credo siano dei bug
Mi spiegate perché NetBeans mi da tanti punti esclamativi rossi ed alcuni di essi con la lampadina? credo siano dei bug
Quelli sono gli errori di compilazione. Se ci clicki sopra ti dice l'errore ed anche possibili soluzioni (con la lampadina)
Il primo errore che vedo è questo:
uno.numeroIntero = 1;
due.NUmeroIntero = 2;
C'è una inconsistenza in maiuscole e minuscole fra le due variabili.
khelidan1980
01-03-2009, 16:15
Il mattone dopo mattone è assurdo, ho letto solo le prime pagine di introduzione e ci sono un sacco di errori grammaticali e parole mancanti. Cerco documentazione in italiano perchè ho poco tempo per dedicarmi a quella inglese e poi perdo ancora più a tempo a capire frasi tipo "La programmazione è diversa dalla procedurale". Ma che azz....:muro:
Quel libro fa schifo,non capisco perchè la gente si ostini a consigliarlo,inoltre è preistorico,risale al 2001 l'ultimo aggiornamento
Non ti va proprio giù il C a quanto vedo. E se non va giù a te con le conoscenze e l'esperienza che hai credo sia tutto dire.
Ma hai pure la foto di cdimauro sul comodino?? :D si scherza eh....
Quelli sono gli errori di compilazione. Se ci clicki sopra ti dice l'errore ed anche possibili soluzioni (con la lampadina)
Il primo errore che vedo è questo:
uno.numeroIntero = 1;
due.NUmeroIntero = 2;
C'è una inconsistenza in maiuscole e minuscole fra le due variabili.
come pure su:
uno.StampaNumero();
due.Stampanumero();
nuvolare
01-03-2009, 16:18
Cliccando sopra la lampadina ed il punto esclamativo, mi si aprivano tipo delle pagine all'interno di NetBeas, forse facendomi vedere al soluzione, non so, ma sta difatto che quando la chiudevo si levavano i bug.
Mi è rimasto uno solo che mi dice :
class ClasseRichiesta is public, should be declared in a filee named ClasseRichiesta.Java
Significa che il File deve avere questo nome?
Vincenzo1968
01-03-2009, 16:20
...
Comunque in questi casi più che altro servono le idee. Il DB è sicuramente "la bibbia" per quanto riguarda compilatori et similia, ma ti dà (tante) nozioni di base. Poi l'algoritmo "fico" che per certi pattern genera un codice "molto buono" è tutto frutto della mente (malata in alcuni casi :asd:) dello sviluppatore. :cool:
Quoto.
Quoto e approfitto di questo thread per chiedere, a chiunque fosse interessato a partecipare al contest, un parere:
per dare a chiunque la possibilità di provare il codice assembly prodotto dal compilatore, direi di non produrre codice specifico per una macchina/sistema particolare. Potremmo, per esempio:
1) Produrre codice per l'ambiente MIPS32 visto che esiste un simulatore (http://pages.cs.wisc.edu/~larus/spim.html) per Linux, Mac e Windows.
2) Invece che codice assembly, si potrebbe produrre codice per una macchina virtuale(ma, in questo caso, bisogna implementare anche la VM in grado di eseguire il bytecode prodotto dal compilatore).
Cosa ne pensate? Qualcuno ha qualche altra idea da proporre?
P.S. Per chi ritiene il compito difficile. È vero, si tratta di un contest un po' più impegnativo di quelli che si sono svolti finora. Ma un compilatore non è nemmeno una cosa impossibile da realizzare: né più né meno che un qualsiasi altro task di programmazione(bisogna conoscere molto bene le strutture dati elementari: stack, alberi, hashtable). Ve lo dice uno che, le (poche) cose che sa sull'argomento, le ha imparate da autodidatta, senza seguire nessun corso universitario ;)
class ClasseRichiesta is public, should be declared in a filee named ClasseRichiesta.Java
Significa che il File deve avere questo nome?
Sì. Quando crei una classe il file deve avere il nome della classe.
~FullSyst3m~
01-03-2009, 16:35
Naaaa. Se avessero i cervelli "fini" sarebbero passati quanto meno al C++ da un pezzo. :asd:
A parte gli scherzi, ci si scontra spesso con il legacy, cioé col codice già prodotto. E un compilatore C esiste per qualunque piattaforma.
Ecco perché, purtroppo, CPython è scritto in C. Dove c'è un compilatore C potenzialmente ci può essere Python.
Non capisco cosa vuoi dire. Se lo scrivessero, ad esempio, in C++, i compilatori pure ci sono. Perchè questa ostinazione con il C?
E che significa dove c'è un compilatore C potenzialmente ci può essere Python?
Io ho soltanto la prima edizione. :stordita:
Comunque in questi casi più che altro servono le idee. Il DB è sicuramente "la bibbia" per quanto riguarda compilatori et similia, ma ti dà (tante) nozioni di base. Poi l'algoritmo "fico" che per certi pattern genera un codice "molto buono" è tutto frutto della mente (malata in alcuni casi :asd:) dello sviluppatore. :cool:
Di cosa parla il DB?
P.S: scusate l'ignoranza, ma non ho mai capito cosa siano i pattern. Tra wikipedia e altri siti ho trovato descrizioni discordanti.
nuvolare
01-03-2009, 16:49
Sì. Quando crei una classe il file deve avere il nome della classe.
Ok, ma una volta creato un nuovo progetto con il nome ClasseRichiesta, non compila...
public class ClasseRichiesta
{
public static void main (String args [])
{
NumeroIntero uno = new NumeroIntero();
NumeroIntero due = new NumeroIntero();
uno.numeroIntero = 1;
due.numeroIntero = 2;
uno.stampaNumero();
due.stampaNumero();
}
}
Come mai?
E poi, ma perché per stampare chiama StampaNumero(); e non StampaNumeroIntero();?
Non dovrebbe andare a richiamare in nome completo?
Vincenzo1968
01-03-2009, 16:52
...
Di cosa parla il DB?
...
Spiega le tecniche per implementare un linguaggio di programmazione.
http://dragonbook.stanford.edu/
"Dragon Book" deriva dal disegno sulla copertina del libro.
;)
Ok, ma una volta creato un nuovo progetto con il nome ClasseRichiesta, non compila...
public class ClasseRichiesta
{
public static void main (String args [])
{
NumeroIntero uno = new NumeroIntero();
NumeroIntero due = new NumeroIntero();
uno.numeroIntero = 1;
due.numeroIntero = 2;
uno.stampaNumero();
due.stampaNumero();
}
}
Come mai?
E poi, ma perché per stampare chiama StampaNumero(); e non StampaNumeroIntero();?
Non dovrebbe andare a richiamare in nome completo?
La classe NumeroIntero la dovresti aver scritta te...li sai te i nomi dei metodi.
Non capisco cosa vuoi dire. Se lo scrivessero, ad esempio, in C++, i compilatori pure ci sono. Perchè questa ostinazione con il C?
E che significa dove c'è un compilatore C potenzialmente ci può essere Python?
Il compilatore C è il primo programma che si scrive per una nuova piattaforma. Sia sotto forma di corss compiler (cioè un compilatore che gira su un sistema già funzionante e che genera codice per una nuova piattaforma) che in forma normale.
Questo perché praticamente tutti i compilatori e le virtual machine sono scritte in C o in C++.
cdimauro
01-03-2009, 17:03
E qualsiasi altro linguaggio con compilatore e VM scritta in C o C++ :)
Cioè praticamente tutti.
Beh, se compilatore e/o la VM sono fatti in C/C++, mi sembra ovvio. :p
Comunque PyPy è un'implementazione di Python scritta in Python stesso, ed è in grado di generare codice nativo (PowerPC), bytecode (per la VM di Python) e qualche altro formato. ;)
Quoto.
Quoto e approfitto di questo thread per chiedere, a chiunque fosse interessato a partecipare al contest, un parere:
per dare a chiunque la possibilità di provare il codice assembly prodotto dal compilatore, direi di non produrre codice specifico per una macchina/sistema particolare. Potremmo, per esempio:
1) Produrre codice per l'ambiente MIPS32 visto che esiste un simulatore (http://pages.cs.wisc.edu/~larus/spim.html) per Linux, Mac e Windows.
2) Invece che codice assembly, si potrebbe produrre codice per una macchina virtuale(ma, in questo caso, bisogna implementare anche la VM in grado di eseguire il bytecode prodotto dal compilatore).
Cosa ne pensate? Qualcuno ha qualche altra idea da proporre?
P.S. Per chi ritiene il compito difficile. È vero, si tratta di un contest un po' più impegnativo di quelli che si sono svolti finora. Ma un compilatore non è nemmeno una cosa impossibile da realizzare: né più né meno che un qualsiasi altro task di programmazione(bisogna conoscere molto bene le strutture dati elementari: stack, alberi, hashtable). Ve lo dice uno che, le (poche) cose che sa sull'argomento, le ha imparate da autodidatta, senza seguire nessun corso universitario ;)
In tal caso io vi consiglierei di utilizzare una VM già esistente, ma dipende sempre dalla complessità del linguaggio che volete implementare.
Giusto per essere chiari, la VM di LUA 5.x è estremamente semplice, perché è register based, quasi del tutto ortogonale, e con poche istruzioni; le istruzioni sono a dimensione fissa (32 bit).
Però LUA è anche un linguaggio mooolto semplice sintatticamente parlando.
Per contro Python ha una VM decisamente più complessa, con bytecode a dimensione variabile (1, 3, e 6 byte), molte più istruzioni, ed è basata su stack.
Ma Python è molto più complesso ed espressivo come linguaggio.
Se scegliete Python come VM io posso esservi di aiuto perché è da un bel pezzo che ci sto lavoro e conosco compilatore, ottimizzatore, e VM discretamente bene.
Non capisco cosa vuoi dire. Se lo scrivessero, ad esempio, in C++, i compilatori pure ci sono. Perchè questa ostinazione con il C?
Per questione di legacy, appunto: è un linguaggio di cui trovi il compilatore ovunque, ed è quindi quello che garantisce una maggior facilità di porting delle applicazioni.
E che significa dove c'è un compilatore C potenzialmente ci può essere Python?
Perché CPython, l'implementazione attuale "standard" di Python, è scritto in C, per cui se c'è un sistema che ha un compilatore C è facile realizzarne un porting e, quindi, avere Python per quel sistema.
Di cosa parla il DB?
Di compilatori (e interpreti).
P.S: scusate l'ignoranza, ma non ho mai capito cosa siano i pattern. Tra wikipedia e altri siti ho trovato descrizioni discordanti.
Pattern = modello.
Applicato alle istruzioni prodotte da un compilatore, di cui parlavamo prima, indica la ricorrenza di un certo gruppo di istruzioni.
Esempio (dalla VM di Python):
LOAD_CONST 123 (None)
RETURN_VALUE
Questo è un pattern che si trova spesso nel bytecode prodotto, e che in futuro :cool: verrà automaticamente trasformato in:
RETURN_CONST 123 (None)
risparmiando numero di istruzioni (si passa da 2 a 1) e spazio. ;)
Comunque PyPy è un'implementazione di Python scritta in Python stesso, ed è in grado di generare codice nativo (PowerPC), bytecode (per la VM di Python) e qualche altro formato. ;)
E cosa ci sarebbe di strano :mbe:
E' quasi sempre il passo successivo alla creazione di un linguaggio la riscrittura del compilatore nel linguaggio che si è creato ;)
AnonimoVeneziano
01-03-2009, 17:31
Mmm , pensavo che PyPy non fosse in grado di compilare tutto il codice python, ma solo il codice scritto in una versione "ridotta" del linguaggio (mi sembra lo chiamino PythonR o una roba del genere). La situazione è cambiata?
woomacoder
01-03-2009, 17:37
Scusami stavo implementando il codice ed ho creato due tipi
if (numero%2==0)
printf("Il numero è pari\n");
else
printf("Il numero è dispari\n");
e con questo mi dice sempre che è pari
l'altro
x = numero;
if (numero/2==0)
printf("Il numero è pari\n");
else
{
printf("Il numero è dispari\n");
}
}
Mi dice sempre dispari
Il secondo script non è valido.
Il primo con l operatore resto dovrebbe riportare 1 se la divisione produce resto, altrimenti 0.
Guarda questo, che è corretto:
#include "stdio.h"
int main()
{
int numero = 0;
do{
if(numero % 2 == 0)
{
printf("Il numero %d è pari\n", numero);
numero++;
continue;
}
else
{
printf("Il numero %d è dispari\n", numero);
numero++;
continue;
}
}while(numero <= 10);
return 0;
}
Vincenzo1968
01-03-2009, 17:47
...
In tal caso io vi consiglierei di utilizzare una VM già esistente, ma dipende sempre dalla complessità del linguaggio che volete implementare.
Giusto per essere chiari, la VM di LUA 5.x è estremamente semplice, perché è register based, quasi del tutto ortogonale, e con poche istruzioni; le istruzioni sono a dimensione fissa (32 bit).
Però LUA è anche un linguaggio mooolto semplice sintatticamente parlando.
Per contro Python ha una VM decisamente più complessa, con bytecode a dimensione variabile (1, 3, e 6 byte), molte più istruzioni, ed è basata su stack.
Ma Python è molto più complesso ed espressivo come linguaggio.
Se scegliete Python come VM io posso esservi di aiuto perché è da un bel pezzo che ci sto lavoro e conosco compilatore, ottimizzatore, e VM discretamente bene.
...
Benissimo.
Prima però vorrei capire se c'è qualcun altro interessato al contest.
Avevo in mente d'implementare un linguaggio di programmazione semplice semplice, non certo uno complesso in grado di competere con quelli esistenti. E si potrebbe rendere il compilatore "retargetable". Si potrebbe dare, cioè, la possibilità di produrre codice per una delle VM esistenti, a scelta dell'utente:Java, Python, C#(e anche, volendo, codice assembly specifico per una particolare macchina/sistema operativo).
Per chi fosse interessato: fatemelo sapere con un pvt, così ci contiamo e vediamo se vale la pena di aprire un contest.
;)
~FullSyst3m~
01-03-2009, 17:51
Ma hai pure la foto di cdimauro sul comodino?? :D si scherza eh....
No, nel portafogli :D
Se scegliete Python come VM io posso esservi di aiuto perché è da un bel pezzo che ci sto lavoro e conosco compilatore, ottimizzatore, e VM discretamente bene.
Ti sei dedicato molto allo studio dei sorgenti di questi componenti a quanto vedo.
cdimauro
01-03-2009, 20:20
E cosa ci sarebbe di strano :mbe:
E' quasi sempre il passo successivo alla creazione di un linguaggio la riscrittura del compilatore nel linguaggio che si è creato ;)
Sì, infatti. E' una "prova di forza". :D
Mmm , pensavo che PyPy non fosse in grado di compilare tutto il codice python, ma solo il codice scritto in una versione "ridotta" del linguaggio (mi sembra lo chiamino PythonR o una roba del genere). La situazione è cambiata?
PyPy è basato su una versione ridotta di Python per girare (cioé lui stesso), ma i sorgenti che compila sono con la sintassi completa di Python.
Benissimo.
Prima però vorrei capire se c'è qualcun altro interessato al contest.
Avevo in mente d'implementare un linguaggio di programmazione semplice semplice, non certo uno complesso in grado di competere con quelli esistenti. E si potrebbe rendere il compilatore "retargetable". Si potrebbe dare, cioè, la possibilità di produrre codice per una delle VM esistenti, a scelta dell'utente:Java, Python, C#(e anche, volendo, codice assembly specifico per una particolare macchina/sistema operativo).
Sì, questa potrebbe essere un'idea interessante.
Per chi fosse interessato: fatemelo sapere con un pvt, così ci contiamo e vediamo se vale la pena di aprire un contest.
;)
E' qualcosa che va ben al di là di un contest. Praticamente è un progetto tipo Diamonds. Inoltre richiede parecchie conoscenze.
Non so quanti utenti potrebbero aggregarsi.
P.S. Come avrai intuito io ho già le mani in pasta su un altro compilatore. :D
Ti sei dedicato molto allo studio dei sorgenti di questi componenti a quanto vedo.
Decisamente. E sto andando ben oltre quanto avevo in mente di fare. Ma son cose che mi piacciono, per cui va bene così. :p
woomacoder
01-03-2009, 20:43
cdimauro, per iniziare a programmare c'è solo il C :D :D :D
~FullSyst3m~
01-03-2009, 20:56
Decisamente. E sto andando ben oltre quanto avevo in mente di fare. Ma son cose che mi piacciono, per cui va bene così. :p
Dettagli?? :D
Comunque quando una cosa piace non c'è niente da fare ;)
cdimauro
01-03-2009, 21:47
cdimauro, per iniziare a programmare c'è solo il C :D :D :D
Più che altro per iniziare a farsi male. :sofico:
Dettagli?? :D
Comunque quando una cosa piace non c'è niente da fare ;)
Già. Comunque ho implementato il costant folding nell'AST. Giusto per dare un'idea, con la versione 2.6.1 di Python ho questo:
>>> from dis import dis
>>> def f():
... return 1 + 2 * 3 ** 4
...
>>> dis(f)
2 0 LOAD_CONST 1 (1)
3 LOAD_CONST 2 (2)
6 LOAD_CONST 3 (3)
9 LOAD_CONST 4 (4)
12 BINARY_POWER
13 BINARY_MULTIPLY
14 BINARY_ADD
15 RETURN_VALUE
>>> f()
163
>>> c = f.func_code
>>> c.co_consts
(None, 1, 2, 3, 4)
>>>
Questo perché al momento ho disattivato il peephole optimizer. Attivandolo otterei qualcosa tipo questo:
>>> from dis import dis
>>> def f():
... return 1 + 2 * 3 ** 4
...
>>> dis(f)
2 0 LOAD_CONST 1 (1)
3 LOAD_CONST 2 (2)
6 LOAD_CONST 5 (81)
9 BINARY_MULTIPLY
12 BINARY_ADD
13 RETURN_VALUE
>>> f()
163
>>> c = f.func_code
>>> c.co_consts
(None, 1, 2, 3, 4, 81)
>>>
In pratica è riuscito soltanto a precalcolare 3 ** 4 = 81, senza andare poi avanti a calcolare le altre costanti. Inoltre da notare che all'elenco delle costanti utilizzate ne ha aggiunta un'altra (81), allungando ancora la lista e la relativa occupazione di memoria (6 costanti in tutto tenute in memoria).
Con la mia attuale implementazione, invece, ottengo questo:
>>> from dis import dis
>>> def f():
... return 1 + 2 * 3 ** 4
...
>>> dis(f)
2 0 LOAD_CONST 1 (163)
2 RETURN_VALUE
>>> f()
163
>>> c = f.func_code
>>> c.co_consts
(None, 163)
>>>
Come vedi riesce a effettuare tutti i calcoli, restituendo immediamente il valore. Quindi abbiamo sia poche istruzioni eseguite (soltanto due; per cui il codice è più veloce), sia un minor consumo di memoria (soltanto 2 costanti vengono mantenute in memoria).
Quando avrò messo mano alla mia versione del peephole optimizer (spero la prossima settimana), il codice diventerà questo invece:
>>> dis(f)
2 0 RETURN_CONST 1 (163)
Quindi una sola istruzione.
Ma sto pensando anche a qualche sistema per togliere di mezzo l'onnipresente costante None che viene riportata in tutte le funzioni. :D
woomacoder
01-03-2009, 21:51
Interessante questo intervento (Cdimauro), molto interessante.
Comunque con il C non ti fai male, impari a Programmare, con la P maiuscola.
Saper gestire puntatori, alloc memoria, ecc... è fondamentale per un buon programmatore!
Ciò non toglie che Python sia il linguaggio piu divertente al mondo per programmare (mi ricorda tanto il pascal :(:() :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.