Ma cosa succede quando compiliamo?
Regole della sezione
- Vietate categoricamente discussioni e messaggi riguardanti politica e religione.
- Evitare l'apertura di discussioni e sondaggi del tipo "mi sta bene questo taglio di capelli?", "che dentifricio usate?" e altre banalità simili.
- Le discussioni che non rispettano le regole suddette, usano linguaggio e toni giudicati non adatti, saranno chiuse dal Gruppo Forum senza preavviso con eventuali provvedimenti sanzionatori.
- Per il resto, è sempre valido il regolamento del forum.
- topper_harley
- Entusiasta Emergente

- Messaggi: 1078
- Iscrizione: giovedì 15 dicembre 2005, 13:21
- Località: Treviso/Udine
- Contatti:
Ma cosa succede quando compiliamo?
Non sapevo dove postare quindi sono venuto al bar!
La mia è una semplice curiosità da niubbo e non mi aspetto una risposta troppo tecnica o dettagliata.
Spesso per vari motivi ci troviamo a dover installare dei programmi dai sorgenti. Il procedimento è più o meno sempre lo stesso: "./configure", "make", "sudo make install". Da bravi debianisti noi facciamo "auto-apt run ./configure", "make", "sudo checkinstall -D make install"...
Mentre mi è abbastanza chiaro cosa succede nel "configure" e nel "make install", quello che accade nel "make" mi è totalmente oscuro, come oscure sono le scritte he mi appaiono a video...
Cosa succede quando compilo?
La mia è una semplice curiosità da niubbo e non mi aspetto una risposta troppo tecnica o dettagliata.
Spesso per vari motivi ci troviamo a dover installare dei programmi dai sorgenti. Il procedimento è più o meno sempre lo stesso: "./configure", "make", "sudo make install". Da bravi debianisti noi facciamo "auto-apt run ./configure", "make", "sudo checkinstall -D make install"...
Mentre mi è abbastanza chiaro cosa succede nel "configure" e nel "make install", quello che accade nel "make" mi è totalmente oscuro, come oscure sono le scritte he mi appaiono a video...
Cosa succede quando compilo?
Jabber: topper_harley@jabber.org - ICQ: 224179391
MSN: TopperHarley80@gmail.com-GoogleTalk: TopperHarley80
egrep -iroh "fuck | shit | suck" /usr/src/linux | sort | uniq -c | sort -r
MSN: TopperHarley80@gmail.com-GoogleTalk: TopperHarley80
egrep -iroh "fuck | shit | suck" /usr/src/linux | sort | uniq -c | sort -r
-
Ikitt
Re: Ma cosa succede quando compiliamo?
Visto da 1000 metri di altezza, "make" semplicemente produce file a partire da altri secondo regole stabilitetopper_harley ha scritto: [...]
Mentre mi è abbastanza chiaro cosa succede nel "configure" e nel "make install", quello che accade nel "make" mi è totalmente oscuro, come oscure sono le scritte he mi appaiono a video...
Cosa succede quando compilo?
e scritte in un file (appunto) di regole, chiamato `makefile'. L'uso piu` comune di make, ma non l'unico, e` quello di assistere e automatizzare la compilazione dei programmi.
Un compilatore, sempre visto da 1000 metri di altezza, altro non e` che un traduttore, che trasforma un programma scritto in un linguaggio intellegibile (piu` o meno bene) dall'uomo, quale C o C++, in uno equivalente, ovvero che fa le stesse cose, intellegibile da una data macchina.
Ovviamente la traduzione puo` essere piu` o meno furba e ottimizzata
(precisazioni formali gradite)
- topper_harley
- Entusiasta Emergente

- Messaggi: 1078
- Iscrizione: giovedì 15 dicembre 2005, 13:21
- Località: Treviso/Udine
- Contatti:
Re: Ma cosa succede quando compiliamo?
Ma se make si limita a "tradurre" un linguaggio "umano" in un linguaggio "macchina", perchè si dice che un programma compilato è ottimizzato per la macchina che lo ha compilato, mentre uno precompilato è meno ottimizzato? Una traduzione non dovrebbe essere sempre uguale?
In un canale irc in lingua inglese ho trovato un tale che diceva di aver impiegato 12 ore a installare Dapper, partendo dall'installazione server e poi installando tutto, dipendenze comprese con:
sudo apt-get -b source nomeprogramma
sudo dpkg -i nomeprogramma.deb
Diceva di volere tutto ottimizzato per la sua macchina...
Rasenta la paranoia o ha dei buoni motivi?
In un canale irc in lingua inglese ho trovato un tale che diceva di aver impiegato 12 ore a installare Dapper, partendo dall'installazione server e poi installando tutto, dipendenze comprese con:
sudo apt-get -b source nomeprogramma
sudo dpkg -i nomeprogramma.deb
Diceva di volere tutto ottimizzato per la sua macchina...
Rasenta la paranoia o ha dei buoni motivi?
Jabber: topper_harley@jabber.org - ICQ: 224179391
MSN: TopperHarley80@gmail.com-GoogleTalk: TopperHarley80
egrep -iroh "fuck | shit | suck" /usr/src/linux | sort | uniq -c | sort -r
MSN: TopperHarley80@gmail.com-GoogleTalk: TopperHarley80
egrep -iroh "fuck | shit | suck" /usr/src/linux | sort | uniq -c | sort -r
-
Ikitt
Re: Ma cosa succede quando compiliamo?
Calma: make e` il coordinatore del traduttore, che in questo caso e` gcc o g++; questi ultimi due fanno "il lavoro sporco". In altre parole: gcc e g++ farebbero benissimo il loro lavoro senza make, make semplifica solamente le cose (ma non e` un vantaggio da poco, ovviamente).topper_harley ha scritto: Ma se make si limita a "tradurre" un linguaggio "umano" in un linguaggio "macchina",
No: dipende da chi traduce e da come traduce.perchè si dice che un programma compilato è ottimizzato per la macchina che lo ha compilato, mentre uno precompilato è meno ottimizzato? Una traduzione non dovrebbe essere sempre uguale?
Ovviamente il senso complessivo deve rimanere immutato, altrimenti la traduzione (compilazione) sarebbe incorretta: se ad esempio nel mio codice sorgente scrivo: "a = b + c", il programma finale dovra` fare, in qualche modo, la corrispondente operazione, altrimenti le cose non tornano.
Il compilatore, nel suo lavoro, puo` pero` ottimizzare la traduzione in base alla CPU (o all'architettura) su cui il prodotto dovra` girare. Puo` usare, cioe`, istruzioni diverse a seconda del contesto diverso, a patto che ovviamente il risultato finale prodotto dalle diverse operazioni sia il medesimo.
Consideriamo, ad esempio (sto inventando di sana pianta, spero il concetto passi) due diverse CPU: la CPU "calculator" e la sua discendente "calculator+". La seconda e` una versione successiva e raffinata della prima, ma compatibile con essa: ogni codice comprensibile dalla prima e` comprensibile dalla seconda che, si spera, lo eseguira` piu` velocemente.
Mettiamo che la CPU "calculator" possa eseguire quest'operazione "INC X, Y", corrispondente ad aggiungere il valore di Y ad X. Poniamo il caso che i progettisti della CPU "calculator", per vari motivi non interessanti alla discussione, non abbiano predisposto altri meccanismi di somma.
Resosi conto della bischerata commessa, i suddetti progettisti rimediano nella CPU "calculator+", introducendo l'operazione "SUM A,B,C", corrispondente a sommare i valori di B e C e scrivere il risultato in A.
Un ipotetico compilatore che dovra` tradurre "a = b + c" per la CPU "calculator" non avra` altra scelta
che produrre:
Codice: Seleziona tutto
INC A, B
INC A, C
Se invece il compilatore deve tradurre lo stesso codice per "calculator+", avra` due scelte: produrre
lo stesso codice precedente, che funziona di sicuro stante la retrcompatibilita` tra i due processori,
oppure sfruttare le nuove caratteristiche della nuova CPU e fare semplicemente
Codice: Seleziona tutto
SUM A, B, C
Discorso prestazioni: restando nell'esempio, se i progettisti di "calculator+" hanno ben operato, redimendosi completamente, l'operazione "SUM" sara` piu` efficiente di una coppia di "INC" consecutive necessarie precedentemente, e il codice specifico (ottimizzato!) per "calculator+" girera` piu` velocemente su questa CPU (mentre, come detto, sara` ignoto, e quindi non potra` funzionare, su una cpu "calculator").
+++
Dopo questo lungo, e spero, chiaro, esempio, passo a rispondere alla tua domanda. Un programma precompilato, dovendo girare su un numero di CPU compatibili tra loro ma con caratteristiche (tra cui, ma non solo, istruzioni supportate) diverse, deve necessariamente usare quell'insieme minimo di caratteristiche comune tra di esse. Funziona su tutte, ma su alcune potrebbe andare piu` lento del massimo possibile date le caratteristiche del processore.
Viceversa, ricompilando un programma, si puo` indicare (e di solito cosi` accade) che questo programma
dovra` girare su una e ben determinata classe di CPU (quella cui appartiene quella installata nel sistema!),
e si puo` quindi passare a sfruttare tutte le caratteristiche di quel processore. Questo puo` comportare,
in certi casi, aumenti di prestazioni.
Per il mio personalissimo gusto e in base alle prove che ho fatto o visto fare, piu` la prima che la seconda.[...]
Diceva di volere tutto ottimizzato per la sua macchina...
Rasenta la paranoia o ha dei buoni motivi?
HTH,
- topper_harley
- Entusiasta Emergente

- Messaggi: 1078
- Iscrizione: giovedì 15 dicembre 2005, 13:21
- Località: Treviso/Udine
- Contatti:
Re: Ma cosa succede quando compiliamo?
Che dire...
Non potevo aspettarmi una risposta più precisa, puntuale e completa!!!
Grazie mille ikitt!!!!
Non potevo aspettarmi una risposta più precisa, puntuale e completa!!!
Grazie mille ikitt!!!!
Jabber: topper_harley@jabber.org - ICQ: 224179391
MSN: TopperHarley80@gmail.com-GoogleTalk: TopperHarley80
egrep -iroh "fuck | shit | suck" /usr/src/linux | sort | uniq -c | sort -r
MSN: TopperHarley80@gmail.com-GoogleTalk: TopperHarley80
egrep -iroh "fuck | shit | suck" /usr/src/linux | sort | uniq -c | sort -r
-
Ikitt
Re: Ma cosa succede quando compiliamo?
Di nullatopper_harley ha scritto: Che dire...
Non potevo aspettarmi una risposta più precisa, puntuale e completa!!!
Grazie mille ikitt!!!!
In realta` il discorso e` ancora (molto) piu` complesso, e ancora (molto) piu` complesso di quanto io riesca a capirne
Cionondimeno, per altre domande io son qui (o alla peggio ci saranno altri
Per esempio, per non appesantire il gia` lungo post precedente, ho tralasciato di parlare di quelle ottimizzazioni che il compilatore puo` fare indipendentemente dalla CPU "di destinazione" (discorso che, in effetti, esulava in parte dalla specifica domanda).
- Stealth
- Tenace Tecnocrate

- Messaggi: 17364
- Iscrizione: martedì 31 gennaio 2006, 22:55
- Desktop: Gnome
- Distribuzione: Ubuntu 22.04 LTS
Re: Ma cosa succede quando compiliamo?
acc.... bravo ikitt, ho capito qualcosa anche io, una buona lezione
adesso veniamo a noi, di soldi non se ne parla, ti do al massimo un punto di karma
da bere lo paga topper, così impara a postare al bar
ciao
adesso veniamo a noi, di soldi non se ne parla, ti do al massimo un punto di karma
da bere lo paga topper, così impara a postare al bar
ciao
Re: Ma cosa succede quando compiliamo?
ciao a tutti
mi inserisco nel discorso in qualità di principiante
ho installato breezy 5.1 sul mio PC con PIII
il mio kernel e' il 2.6.12-9-386, quello installato direttamente dal Cd
è utile passare al 2.6.12-10-386 o al corrispondente -386?
se sì, come si fa'?
grazie
mi inserisco nel discorso in qualità di principiante
ho installato breezy 5.1 sul mio PC con PIII
il mio kernel e' il 2.6.12-9-386, quello installato direttamente dal Cd
è utile passare al 2.6.12-10-386 o al corrispondente -386?
se sì, come si fa'?
grazie
Nella scatola era scritto: "Richiede Windows Xp o superiore"
Così ho installato Linux :-)
Così ho installato Linux :-)
Re: Ma cosa succede quando compiliamo?
Se hai abilitato i repositories in /etc/apt/sources.list (se non sai come fare, trovi moltissimo materiale con una ricerca sul forum e/o sul wiki, anche sulla guida c'è qualcosa) al primo aggiornamento che fai con synaptico o:
auso apt-get update
trova da solo il nuovo kernel e ti segnale che esistono aggiornamenti disponibili.
ciao
auso apt-get update
trova da solo il nuovo kernel e ti segnale che esistono aggiornamenti disponibili.
ciao
Pietro pagina personale - Avete domande sul forum? Leggendo le FAQ: potreste trovare la risposta.
La conoscenza deve essere collettiva, quindi, come da regolamento (Sez. II punto 15) i messaggi personali contententi richieste di assistenza tecnica verranno ignorati.
La conoscenza deve essere collettiva, quindi, come da regolamento (Sez. II punto 15) i messaggi personali contententi richieste di assistenza tecnica verranno ignorati.
Re: Ma cosa succede quando compiliamo?
ho imparato un sacco di cose..
un punto a ikitt e topper.
ciao
un punto a ikitt e topper.
ciao
- nadir
- Scoppiettante Seguace

- Messaggi: 325
- Iscrizione: domenica 20 novembre 2005, 14:38
- Località: Bologna
- Contatti:
Re: Ma cosa succede quando compiliamo?
pensa a make semplimenete come una serie di input testuali che dovresti dare manualmente al compilatore. in un progetto con 3 file sorgenti, ad esempio, dovresti compilare - convertire in file oggetto ogni singolo file e poi eseguire il linkaggio complessivo. ovviamente specificando pure se vuoi includere informazioni di debug o meno, ed altre amenità. anche per tre files l'operazione diviene rapidamente tediosa (immagina di fare una modifica, anche piccola, e controllarne l'efficacia). make contiene tutte le istruzioni che daresti manualmente e rende molto più rapida la compilazione (quasi trasparente).topper_harley ha scritto: In un canale irc in lingua inglese ho trovato un tale che diceva di aver impiegato 12 ore a installare Dapper, partendo dall'installazione server e poi installando tutto, dipendenze comprese con:
sudo apt-get -b source nomeprogramma
sudo dpkg -i nomeprogramma.deb
Diceva di volere tutto ottimizzato per la sua macchina...
Rasenta la paranoia o ha dei buoni motivi?
Ikitt è stato molto esauriente. tieni presente che le ottimizzazioni introducibili non soltato si riferiscono all'impiego di particolarità offerte dalla tua architettura - ma sono un autentico labor limae compiuto sul codice che verrà generato. ad esempio potresti desiderare un allineamento delle strutture dati sulla frontiera dei 32 bits in modo da renderne più efficiente la lettura (per la cpu, ovviamente) e così via, anche se queste sono generalmente scelte dal programmatore piuttosto che dall'utente che ricompila i sorgenti altrui.topper_harley ha scritto: perchè si dice che un programma compilato è ottimizzato per la macchina che lo ha compilato, mentre uno precompilato è meno ottimizzato? Una traduzione non dovrebbe essere sempre uguale?
se guadagnare qualche secondo nell'arco dell'ora di utilizzo, a fronte di sei mesi di compilazioni, è un buon motivo allora si. ALTRIMENTI è PARANOIAtopper_harley ha scritto: Diceva di volere tutto ottimizzato per la sua macchina...
Rasenta la paranoia o ha dei buoni motivi?
ho un amd 64 ed uso linux 386. scaricando il kernel adatto (non quello di default) alla mia amatissima cpu ho guadagnato 3 secondi in fase di boot.
ciao
Real programmers don't comment their code. If it was hard to write, it should be hard to understand.
- 1111
- Scoppiettante Seguace

- Messaggi: 619
- Iscrizione: lunedì 7 novembre 2005, 10:19
- Località: val susa
Re: Ma cosa succede quando compiliamo?
aggiungo solo una noticina.
quanto detto non vale solo per gli eseguibili "puri", ma anche per i cosiddetti "bytecode", ovvero i risultati delle compilazioni di linguaggi tipo java o python che dal sorgente creano il codice per un processore virtuale (detto appunto virtual machine). in questo caso il vantaggio è che lo stesso codice può girare su piattaforme diverse (basta avere la virtual machine corrispondente); in compenso non ha senso ricompilare i sorgenti, perché il bytecode che ottieni è lo stesso sempre (a meno di non usare compilatori diversi, ovviamente)
quanto detto non vale solo per gli eseguibili "puri", ma anche per i cosiddetti "bytecode", ovvero i risultati delle compilazioni di linguaggi tipo java o python che dal sorgente creano il codice per un processore virtuale (detto appunto virtual machine). in questo caso il vantaggio è che lo stesso codice può girare su piattaforme diverse (basta avere la virtual machine corrispondente); in compenso non ha senso ricompilare i sorgenti, perché il bytecode che ottieni è lo stesso sempre (a meno di non usare compilatori diversi, ovviamente)
1111
----
a volte ritornano...
----
a volte ritornano...
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti
