View Full Version : Perchè si usa ancora il C?
BlackLukeS
25-04-2008, 20:35
Si usa il C per sviluppare il kernel, per le distro, i Window manager e le applicazioni. Quali sono i vantaggi rispetto al c++?
Il C è ( forse ) il linguaggio più di basso livello rispetto agli altri e quindi ha un codice macchina ben ottimizzato e veloce.
Il C++ è comunque valido, solo che il kernel e i window manager devono essere il più veloci possibile ( soprattutto il kernel ) scrivendo pur sempre un codice di "alto" livello ( o umanamente comprensibile ^^ ).
ByeBye
khelidan1980
25-04-2008, 22:04
e comunque molti progetti tipo il kernel sono nati nei primi anni novanti,il C era la norma,ora sarebbe un po improbabile riscrivere tutto il kernel,piu che altro ciò che dovrebbe essere svecchiato un po è gnome e le gtk
Poi non bisogna dimenticare che non è detto che il C sia universalmente più scomodo.
Ci saranno programmatori che lo usano da una vita e sono piu produttivi con quello, e alcune cose si fanno meglio ( o si fanno solo) col C piuttosto che con linguaggi di piu alto livello (non parlo del c++)
BlackLukeS
25-04-2008, 22:27
Quindi il c è lungi da essere obsoleto?
io l'ho appena studiato ora, programmatore al terzo anno d'università.
Se una cosa funziona e non da problemi, non vedo il perchè di una sostituzione. con cosa, poi? ^^
chicco83
26-04-2008, 00:46
mi sembra che in questa discussione (http://www.hwupgrade.it/forum/showthread.php?t=1547246) si sia trattato l'argomento almeno per quello che riguarda il kernel linux (o almeno, si e' iniziato, poi mi sembra che si sia andati un po' ot :D)
IMHO il C oggigiorno e' da destinarsi per quei progetti (vedi appunto kernel) che gia' esistono implementati cosi' e/o necessitano di prestazioni molto elevate (rivedi appunto un kernel... ).
Per quanto riguarda grossi applicativi oramai si preferiscono i linguaggi ad oggetti, piu' vicini al modo di pensare umano, anche grazie a compilatori che restituiscono codice sempre piu' ottimizzato.
DanieleC88
26-04-2008, 23:01
Be', perché c'è ancora chi sviluppa certe cose in assembly, invece? :D
Il linguaggio è uno strumento, ognuno usa quello che ritiene più adatto per le proprie abitudini, capacità, necessità. Io con il C mi trovo bene, ma per certe cose più "larghe" comincio già a preferire il C++, che mi fornisce delle comodità in più che mi aiutano a programmare più fluidamente, pensando più al problema in sé che non all'implementazione di ogni singolo aspetto. :)
Comunque... non era più adatta in "Programmazione" questa discussione? :D
BlackLukeS
27-04-2008, 08:57
Be', perché c'è ancora chi sviluppa certe cose in assembly, invece? :D
Il linguaggio è uno strumento, ognuno usa quello che ritiene più adatto per le proprie abitudini, capacità, necessità. Io con il C mi trovo bene, ma per certe cose più "larghe" comincio già a preferire il C++, che mi fornisce delle comodità in più che mi aiutano a programmare più fluidamente, pensando più al problema in sé che non all'implementazione di ogni singolo aspetto. :)
Comunque... non era più adatta in "Programmazione" questa discussione? :D
In teoria si, ma io non intendevo "perchè si usa il C" in generale, intendevo nell'ambito linux, comprese le distro
Beh c'è anche da dire che il C permette di incorporare l'assembly, cosa necessaria nella scrittura di Driver ad esempio, questo non penso sia possibile col C++ ( ma non sono sicurissimo), mentre non è di sicuro possibile con linguaggi di più alto livello e che magari girano su macchina virtuali (Java e C#).
Ve lo immaginate un sistema il cui kernel gira già di suo in una macchina virtuale?
khelidan1980
27-04-2008, 09:11
Beh c'è anche da dire che il C permette di incorporare l'assembly, cosa necessaria nella scrittura di Driver ad esempio, questo non penso sia possibile col C++ ( ma non sono sicurissimo), mentre non è di sicuro possibile con linguaggi di più alto livello e che magari girano su macchina virtuali (Java e C#).
Ve lo immaginate un sistema il cui kernel gira già di suo in una macchina virtuale?
Certo che si puo con java(e penso anche con C#):
http://en.wikipedia.org/wiki/Java_Native_Interface
e so che microsoft aveva scritto un intero kernel in C#,ovvio che nel primo caso si tratta di routine chiamate proprio in casi eccezionali,nel secondo si tratta di pura sperimentazione
Nell'ambito Linux ripeto, imho bisogna svecchiare(a livello di sviluppo) gnome e gtk,portarli ad un linguaggio ad oggetti,l'ideale sarebbe come per kde,c++ e sopratutto utilizzare una metodologia di sviluppo veramente oop
Attenzione: quello che hai citato dice che il codice Java può chiamare ed essere chiamato da applicazioni scritte in altro linguaggio, il che è ben diverso dalla necessità che si ha scrivendo un driver di incorporare direttamente codice a bassissimo livello specifico per l'architettura del processore.
khelidan1980
27-04-2008, 09:26
Attenzione: quello che hai citato dice che il codice Java può chiamare ed essere chiamato da applicazioni scritte in altro linguaggio, il che è ben diverso dalla necessità che si ha scrivendo un driver di incorporare direttamente codice a bassissimo livello specifico per l'architettura del processore.
si ok,era un discorso gnerale,non so poi se si riesce a fare anche quello che dici tu,bisognerebbe indagare,tra l'altro spero di non aver mai bisogno di includere assembly in vita mia se non per sfizio mio! ;)
Piu che altro so di progetto oltre quello di ms,di kernel in C#,sarebbe interessante vedere come hanno gestito la cosa
DanieleC88
27-04-2008, 12:22
Piu che altro so di progetto oltre quello di ms,di kernel in C#,sarebbe interessante vedere come hanno gestito la cosa
Per ora mi sono interessato solo di analizzare velocemente il bootloader, ma è un progetto interessante. Da quanto ho capito è stato implementato un interprete di bytecode minimalistico e il resto è sviluppato direttamente in C#.
http://www.codeplex.com/singularity
In teoria si, ma io non intendevo "perchè si usa il C" in generale, intendevo nell'ambito linux, comprese le distro
Perché spesso i kernel si preferisce scriverli in C, la libreria standard che permette la compatibilità POSIX è scritta in C e si appoggia sul sistema operativo direttamente, perché molti programmi sfruttano direttamente la libreria standard. Poi, il C non è un linguaggio pessimo, se lo si sa usare bene anzi risulta abbastanza comodo. E il motivo maggiore comunque è che è diffusissimo e da 30 anni e più è praticamente il linguaggio usato universalmente. Ma molti progetti nell'ambito GNU non sono scritti in C, basti vedere la miriade di applicazioni scritte usando PERL, Python, Java, ultimamente C# tramite Mono, etc... ;)
dinomite
27-04-2008, 13:55
piccolo OT
non sapendo assolutamente nulla di linguaggi, per linux, quale è secondo voi un linguaggio semplice e fattibile per un niubbo?
Costituisce valore aggiunto un linguaggio per il quale sia disponibile un'ampia documentazione sul web ( magari in italiano ) ed esempi esplicativi ed esaustivi che aiutino la comprensione.
grazie
fine OT
DanieleC88
27-04-2008, 14:26
Anche se non l'ho mai usato, credo che Python risponda abbastanza bene alle tue necessità. :)
Anche se non l'ho mai usato, credo che Python risponda abbastanza bene alle tue necessità. :)
quoto, il python è di una semplicità allucinante :D
Willy McBride
27-04-2008, 15:52
Nell'ambito Linux ripeto, imho bisogna svecchiare(a livello di sviluppo) gnome e gtk,portarli ad un linguaggio ad oggetti,l'ideale sarebbe come per kde,c++ e sopratutto utilizzare una metodologia di sviluppo veramente oop
Quella di utilizzare il C per le gtk+ e le librerie di gnome (che tra l'altro sono in via di estinzione, visto che si punta a portare tutto quello che è utile dentro le gtk+, vedi ad esempio il supporto alla stampa o diversi widget "avanzati" e deprecare il resto) è una scelta ragionata: librerie base in C, binding in tutti i linguaggi che uno vuole.
Inkscape ad esempio è scritto in C++ usando gtkmm, che è il binding C++ delle gtk+, gajim, deskbar-applet e alacarte sono scritti in python usando pygtk e i binding python ad alcune librerie gnome, tomboy, f-spot e banshee sono scritti in C# usando i binding gtk-sharp e gnome-sharp, etc. etc.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.