Un consiglio? (niente codice)

giuscri
Ciao a tutti! So bene che sarebbe meglio chiedere in qualche altro forum più specializzato (vedi di smanettoni :lol: ), ma per il momento preferisco discutere con voi dato che "conosco" già qualcuno e ho capito che di competenza ce n'è parecchia qua dentro.

Nei mesi scorsi, durante quest'estate, ho usato Debian sul mio computer fisso per preparare un esame di informatica (programmazione in C++). Quello che ho fatto durante la preparazione è stato sempre e solo usare un editor di testo leggero e da terminale richiamare gcc, compilare ed eseguire (sempre dentro al terminale) -e venire sul forum a chiedere se era tutto ok.

La cosa non mi è pesata per nulla, anzi mi deliziava avere a che fare un sistema operativo che non avevo mai toccato e da cui stavo imparando continuamente cose nuove.

In questi giorni ho comprato un pc portatile e mi piacerebbe usarlo anche nello stesso modo con cui ho usato il fisso in questi mesi.
Ho dato un'occhiata ad alcune distribuzioni (Debian, al primo colpo, non ha funzionato bene) e mi sono accorto che sul fisso non avevo mai prestato attenzione a un fatto: il consumo d'energia!

Sinceramente sono un po' un ansioso per la durata della batteria di un computer, e l'idea di usare una configurazione che mi faccia sprecare più energia di quanto ne potrei usare soltando accedendo alla partizione con Windows e facendo tutto da lì non mi fa stare tranquillo.

D'altro canto con Linux mi sono trovato bene: ho acquisito un po' di familiarità con il terminale e mi dispiacerebbe abbandonarlo per tornare con Windows.

Ora vi chiedo: conoscete qualche ambiente GNU/Linux leggero che possa fare proprio al caso mio, scrivi-compila-esegui, oppure se dovessi rimanere su Windows non c'è un modo per evitare di usare uno strumento professionale come Visual Studio -lo dico perché mi pare lontano dall'immediatezza con cui lavora gcc.

La vostra esperienza con la programmazione e i portatili qual è?

Grazie per i consigli!,

Giuseppe

Risposte
hamming_burst
qualunque derivato di *nix ha il terminale, da terminale fai TUTTO. Perciò anche il scrivi-compila-esegui.
(sicuramente l'editor è un gedit, ho qualcosa di simile).

Per il consumo energetico Xubuntu (la distro che utilizzo io) dura una mezz'oretta in più di un Windows in Power Saver od ottimizzazioni software date dal produttore hardware. Tale durata è molto variabile perchè dipende da cosa si faccia ed dall'ambiente, perciò non vuol dir nulla :-)

-e venire sul forum a chiedere se era tutto ok

questa è carina :-D

giuscri
"hamming_burst":
Per il consumo energetico Xubuntu (la distro che utilizzo io) dura una mezz'oretta in più di un Windows in Power Saver od ottimizzazioni software date dal produttore hardware. Tale durata è molto variabile perchè dipende da cosa si faccia ed dall'ambiente, perciò non vuol dir nulla :-)


Poco fa ho scaricato l'immagine iso di Lubuntu, che dovrebbe essere la distro più adatta a computer vecchi, sempre sviluppata da Canonical. Nel caso proverò Xubuntu. Poi posto. Grazie, per ora :)

claudio862
GCC ha un porting per Windows che si chiama MinGW. Puoi scaricare l'ultima versione da qua:
MinGW 4.7.1 x86 (io userei questa anche su sistemi x64)
MinGW 4.7.1 x64

Scarichi il file e lo estrai in C:\mingw, poi aggiungi C:\mingw\bin al PATH di sistema (qua se non sai come fare). Aggiungi, non sostituisci. Il tuo PATH corrente sarà qualcosa come C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem, tu cambialo in C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\mingw\bin.

Adesso dal prompt dei comandi potrai usare g++ e alcune altre utility (c'è anche make ma si chiama mingw32-make). Altre utility tipiche di Linux si possono scaricare qua.
Comunque puoi usare anche Visual Studio dal prompt dei comandi. Nel menu avvio dovresti avere una voce tipo "Visual studio prompt", che apre un prompt dei comandi con tutte le variabili d'ambiente impostate per Visual Studio. Il compilatore si chiama CL.

Dallo stesso sito puoi anche scaricare una versione di CLang per Windows.
CLang 3.1 x86 (meglio x86 anche qua)
CLang 3.1 x64
L'installazione è identica a MinGW (mettilo in C:\clang). Purtroppo la libreria standard è la stessa di MinGW e questa build di CLang è compilata con MinGW 4.6, quindi non puoi compilare sorgenti C++11 (ma probabilmente non ti servirà).
I messaggi di errore di CLang sono infinitamente più chiari di quelli di GCC (ma anche di Visual Studio). Non dovrai più venire a chiedere niente (ok, forse qua sono un po' ottimista).

Sia GCC che Visual Studio abilitano estensioni non standard come impostazione predefinita. Per disabilitarle:

cl /Za file.c             # C versione più recente
cl /Za file.c++           # C++ versione più recente
gcc -std=c89 -pedantic file.c       # C versione 1989
gcc -std=c99 -pedantic file.c       # C versione 1999
gcc -std=c11 -pedantic file.c       # C versione 2011
g++ -std=c++98 -pedantic file.cpp   # C++ versione 1998
g++ -std=c++11 -pedantic file.cpp    # C++ versione 2011


CLang dovrebbe disabilitare qualsiasi estensione non standard di default. Per imporre una versione precisa usa le stesse opzioni di GCC (in generale le opzioni hanno spesso lo stesso nome).

clang -std=c89 -pedantic file.c         # C versione 1989
clang -std=c99 -pedantic file.c         # C versione 1999
clang -std=c11 -pedantic file.c         # C versione 2011
clang++ -std=c++98 -pedantic file.cpp   # C++ versione 1998
clang++ -std=c++11 -pedantic file.cpp    # C++ versione 2011


Per compilare abilita sempre i warning con /Wall su Visual Studio e -Wall -Wextra su GCC e Clang (su quest'ultimo c'è anche -Weverything per i perfezionisti).


Per piccoli progetti puoi usare Notepad++ (o un qualsiasi altro editor più o meno evoluto) e compilare dal prompt dei comandi. Per grossi progetti io uso CMake e Qt Creator (anche per progetti che non usano Qt). In alternativa ci sarebbe Code::Blocks (che però non conosco). Dev-C++ è il caso di lasciarlo perdere.



Tutto questo vale anche su Linux, a parte Visual Studio e Notepad++ (ma ci sono un'infinità di altri editor). Però io non lo uso su portatile (e nemmeno su fisso in modo costante), quindi su questo non so come consigliarti.

apatriarca
Di che tipo di portatile stiamo parlando? Hai provato a verificare su internet se tutti i driver sono ben supportati dalla distro che stai prendendo in considerazione? Il supporto dei driver è in generale molto migliorato rispetto al passato, ma esistono ancora delle eccezioni, soprattutto se si ha a che fare con computer molto recenti o che includono tante tecnologie proprietarie. Non ho molta esperienza con il consumo energetico di linux su portatili, ma esistono senza dubbio parecchie disto linux capaci di consumare meno di Windows.

Come già descritto da claudio86, non è comunque necessario usare linux per poter programmare con un editor di testo e compilare da linea di comando. Puoi addirittura installarti emacs su Windows se lo desideri.. Personalmente preferisco usare un buon IDE nei progetti più grossi, ma devo ammettere che ci sono molte situazioni in cui compilare da linea di comando sia più veloce.

hamming_burst
"claudio86":

Comunque puoi usare anche Visual Studio dal prompt dei comandi. Nel menu avvio dovresti avere una voce tipo "Visual studio prompt", che apre un prompt dei comandi con tutte le variabili d'ambiente impostate per Visual Studio. Il compilatore si chiama CL.

interessante, non ne ero a conoscenza di questa possibilità.

claudio862
"hamming_burst":
interessante, non ne ero a conoscenza di questa possibilità.

Visual Studio ha anche una sua versione di make: NMake. Non so se la sintassi dei Makefile sia la stessa, comunque se usi altre utility per generarli (come QMake o CMake) non dovrebbero esserci problemi.

Altrimenti si può usare jom, che è un clone di NMake ma permette di compilare in parallelo più file (make -j). Anche nelle ultime versioni il compilatore CL è multiprocesso e può compilare già di suo in parallelo, usando lo switch /MP:

cl /MP4 file1.cpp file2.cpp file3.cpp file4.cpp
Compila usando 4 processi contemporaneamente.

giuscri
Intanto ringrazio Claudio per le informazioni utili su MingGW. Di fatto, per ora Windows mi serve e lo trovo abbastanza utile per l'utilizzo di tutti i giorni. Avere a che fare con la shell di Linux senza dover riavviare ogni volta può fare proprio al caso mio.

Per apatriarca: sì, in realtà non ho controllato i driver, perché per ora funziona quasi tutto bene.

***

Al momento sto usando Lubuntu e mi pare funzioni abbastanza bene. In realtà c'è un sacco di roba precaricata che non mi serve ma vedrò di non interessarmene troppo. Con questa raggiungo le 5 ore d'autonomia -almeno così dice l'indicatore della batteria; lontane dalle 8 e passa che Windows dichiara dalla barra di stato.

Vedrò di sbrigarmela con i driver. Ho visto che potrei anche abbassare il limite massimo della frequenza della CPU...

EDIT: ho installato qualche driver: ora la scheda di rete non soffre più di bassa ricezione. Inoltre ho settato la frequenza delle CPU sotto gli 800Mhz. Vedrò. Per ora, al 30% di batteria rimasta, con Wi-Fi acceso e retroilluminazione del monitor accettabilmente bassa mi dice che ne ha ancora per 2 ore spaccate.

garnak.olegovitc1
Salve claudio86,
vorrei capire meglio come aggiungere la PATH... io ho estratto l'archivio in una cartella denominata CLang su C... E poi, se non chiedo troppo, come fare a compilare...!!
Ti ringrazio in anticipo!!
Cordiali saluti!!

claudio862
"garnak.olegovitc":
Salve claudio86,
vorrei capire meglio come aggiungere la PATH... io ho estratto l'archivio in una cartella denominata CLang su C... E poi, se non chiedo troppo, come fare a compilare...!!
Ti ringrazio in anticipo!!
Cordiali saluti!!


Comincia così: apri il prompt dei comandi, e aggiungi al PATH il percorso di Clang

> set PATH=%PATH%;C:\mingw32-dw2\bin


(al posto di clang metti il nome esatto della cartella, cioè controlla che C:\mingw32-dw2\bin esista). A quel punto vedi se Clang funziona

> clang -v
clang version 3.2 (tags/RELEASE_32/final)
Target: i686-w64-mingw32
Thread model: posix


Se sì, bene. Magari prova a compilare qualcosa, giusto per sicurezza.

Se invece hai un errore del tipo "DLL non trovata", "libgcc_*dw*.dll", devi estrarre nella stessa cartella anche GCC dw2 4.6 (ci sono versioni più recenti, 4.7 e 4.8, ma a me non funzionano). Questo perché Clang sfrutta alcuni componenti di GCC (per esempio il linker, ma credo anche la libreria standard).
In breve, scarica Clang 3.2 e GCC dw2 4.6 ed estraili nella stessa cartella (es. C:\mingw32-dw2).



Adesso che funziona, puoi aggiungere il percorso di Clang al PATH di sistema (così non dovrai aggiornare il PATH ogni volta).
Menu avvio -> tasto destro su "Computer" (o Risorse del computer, non so come sia in italiano) -> proprietà
(Oppure, se hai risorse del computer sul desktop, tasto destro lì)
Impostazioni di sistema avanzate
Variabili d'ambiente
Variabili di sistema (in basso)
Seleziona PATH, modifica, aggiungi alla fine ";C:\mingw32-dw2\bin" (come sopra, il percorso esatto).

Qui una spiegazione per modificare il PATH più semplice.


Nel post sopra trovi le istruzioni per compilare abilitando tutti gli avvisi. Probabilmente puoi anche impostare Code::Blocks (o altri IDE) per usare Clang invece di GCC, però non saprei dirti esattamente come fare. Prova a guardare nelle impostazioni.

Infine, Clang, soprattutto su Windows e per C++, non è un progetto completamente maturo. Mi sono capitati problemi (crash del compilatore) in un paio di casi (abbastanza inusuali a dire il vero, una combinazione di C++11, ottimizzazioni abilitate e Boost program_options). Ma non credo sia una cosa di cui tu dovresti preoccuparti.

garnak.olegovitc1
Salve claudio86

"claudio86":


Se invece hai un errore del tipo "DLL non trovata", "libgcc_*dw*.dll", devi estrarre nella stessa cartella anche GCC dw2 4.6 (ci sono versioni più recenti, 4.7 e 4.8, ma a me non funzionano). Questo perché Clang sfrutta alcuni componenti di GCC (per esempio il linker, ma credo anche la libreria standard).
In breve, scarica Clang 3.2 e GCC dw2 4.6 ed estraili nella stessa cartella (es. C:\mingw32-dw2).



allora, non ho capito.. una volta scaricati i due archivi li devo estrarre entrambi nella stessa cartella.. ma se lo faccio ovviamente vi sono cartelle e file con lo stesso nome... che devo fare?

Grazie di tutto!

Cordiali saluti

claudio862
"garnak.olegovitc":
allora, non ho capito.. una volta scaricati i due archivi li devo estrarre entrambi nella stessa cartella.. ma se lo faccio ovviamente vi sono cartelle e file con lo stesso nome... che devo fare?


Sì, esatto, "mischiane" il contenuto. Entrambi gli archivi contengono una cartella mingw32-dw2, che contiene le cartelle bin, include, share…
Per esempio, mettili entrambi gli archivi in una cartella, e su entrambi clic destro -> estrai qui. Alla fine ti ritrovi con una cartella mingw32-dw2 che contiene i file di entrambi gli archivi.

garnak.olegovitc1
Salve claudio86,

"claudio86":
[quote="garnak.olegovitc"]allora, non ho capito.. una volta scaricati i due archivi li devo estrarre entrambi nella stessa cartella.. ma se lo faccio ovviamente vi sono cartelle e file con lo stesso nome... che devo fare?


Sì, esatto, "mischiane" il contenuto. Entrambi gli archivi contengono una cartella mingw32-dw2, che contiene le cartelle bin, include, share…
Per esempio, mettili entrambi gli archivi in una cartella, e su entrambi clic destro -> estrai qui. Alla fine ti ritrovi con una cartella mingw32-dw2 che contiene i file di entrambi gli archivi.[/quote]

ho fatto come hai detto, e va tutto bene... ma adesso, scusami per l'ignoranza, ma come faccio a compilare un codice in C ed a creare l'eseguibile???

Cordiali saluti

garnak.olegovitc1
Salve claudio86,
okok tutto fatto... non ci voleva molto... devo dire che è formidabile come compilatore!!!
Grazie ancora!! :smt023
Cordiali saluti

garnak.olegovitc1
Salve claudio86,

"claudio86":


CLang dovrebbe disabilitare qualsiasi estensione non standard di default. Per imporre una versione precisa usa le stesse opzioni di GCC (in generale le opzioni hanno spesso lo stesso nome).

clang -std=c89 -pedantic file.c         # C versione 1989
clang -std=c99 -pedantic file.c         # C versione 1999
clang -std=c11 -pedantic file.c         # C versione 2011
clang++ -std=c++98 -pedantic file.cpp   # C++ versione 1998
clang++ -std=c++11 -pedantic file.cpp    # C++ versione 2011


Per compilare abilita sempre i warning con /Wall su Visual Studio e -Wall -Wextra su GCC e Clang (su quest'ultimo c'è anche -Weverything per i perfezionisti).



devo dire che è tutto ok, ho installato Clang su windows, compila e compone l'eseguibile..... ma cosa intendevi quando hai detto ciò che ho quotato sopra?? Come si fa a disabilitare quelle opzioni ed ad abilitare i warning sun CLang? Anche se devo essere sincero i warning già mi spuntano e non posso essere che soddisfatto.. ma volevo capire di più!! :wink:

Cordiali saluti

claudio862
clang++ -std=c++98 -pedantic-errors -Wall -Wextra file.cpp -o file.exe

Compila il file "file.cpp" nel file "file.exe", specificando la versione C++98 (-std=c++98), disabilitando tutte le estensioni non standard (-pedantic-errors), abilitando gli avvisi più comuni (-Wall) e quelli meno comuni (-Wextra).

clang++ -std=c++98 -pedantic-errors -Wall -Wextra -Weverything file.cpp -o file.exe

Come sopra, ma abilita tutti gli avvisi che il compilatore può dare. Ma normalmente non serve. Gli avvisi mostrati con -Wall e -Wextra possono realmente essere causa di malfunzionamenti in un programma, quelli mostrati solo con -Weverything in genere sono completamente innocui (e sono tanti, e potresti non notare gli altri).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.