di zello » 30/06/11 11:27
Allora, facciamo sintesi:
- il C è un linguaggio di basso livello, che astrae relativamente poco il funzionamento della macchina (ad un livello però sufficiente per portare lo stesso programma da un'architettura all'altra); la sua standardizzazione viene chiamata Ansi-C (l'ansi-c non è un linguaggio diverso dal C, è semplicemente il suo standard: dovrebbe essere accettato da qualsiasi compilatore C).
- il C++ è (più o meno) un sovrainsieme del C, che prevede i concetti di classe, i templates, gli overload degli operatori e delle funzioni e altre caratteristiche che in parte sono comode, in parte permettono più di uno stile di programmazione. E' un linguaggio tanto potente quanto incasinato (già la sintassi del C non è una meraviglia, ma andandoci ad innestare sopra un sacco di ulteriori concetti mantenendo però la compatibilità la situazione diventa veramente intricata). Ciò detto, per efficienza e flessibilità (ecco, eleganza magari no) è il linguaggio general-purpose che preferisco. Come dicevo, è un sovrainsieme del C, e quindi un programma C ben scritto è compilabile da un compilatore C++.
- il c# (che non conosco nei dettagli) e java sono linguaggi che, pur somigliando semanticamente al c++ (più che al C), in parte lo semplificano in quanto a sintassi e costrutti (e ne perdono la compatibilità con il C); tuttavia, l'opera di semplificazione, oltre ovviamente a ridurre la flessibilità, ne stravolge l'uso. Uno dei casi più comuni è l'uso della memoria: il c++ permette scelte di allocazione della memoria flessibili (e incasinate), e lascia al programmatore la libertà di gestire la memoria allocata. Java e c# si prendono la responsabilità della gestione della memoria, e liberano il programmatore dall'incombenza. Ciò cambia completamente la gestione del ciclo di vita degli oggetti. Inoltre, mentre il C++ viene fornito con una scarna libreria standard (che si limita a fornire "building blocks" di utilità generale, come le liste o gli algoritmi), il c# e java si portano dietro un'imponentissima libreria che consente di fare più o meno qualsiasi cosa, compreso interagire con le finestre del sistema operativo; per fare la stessa cosa in C++ o parli direttamente all'interfaccia del sistema operativo (le cosiddette API, un insieme di funzioni previste da Windows per interagire con il sistema), oppure trovi (o compri) una libreria (non standard) che lo faccia al tuo posto; comunque sia, questa non è "compresa" nel linguaggio come è per c# e java.
D'altra parte, java e c# sono inerentemente più inefficienti di c++ (tutto viene ad un costo); certo è che se non stai scrivendo il nuovo Call of Duty non è che proprio hai bisogno di risparmiare anche i nanosecondi...
In sintesi:
- C è il genitore
- C++ è un C arricchito, che spinge al massimo la flessibilità pur mantenendo un livello molto basso (vicino al modo di ragionare della macchina, e non dell'uomo, per intenderci)
- java e C# sono linguaggi che assomigliano solo per grammatica al C e al C++; seguono logiche e hanno principi di programmazione sostanzialmente diversi.
Ci sarebbe anche l'objective-C, ma questo te lo risparmio...
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...