PDA

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++?

Xfight
25-04-2008, 21:20
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

R4iDei
25-04-2008, 22:25
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?

Khronos
25-04-2008, 23:51
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)

leuzr0x
26-04-2008, 08:43
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

Cobra78
27-04-2008, 09:03
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

Cobra78
27-04-2008, 09:19
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à. :)

gepeppe
27-04-2008, 15:09
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.