vbextreme ha scritto:
...
Tutto il discorso delle libreria è circa giusto,ma il c e il c++ mettono a disposizione del programmatore tecniche di programmazione avanzate,permettendo di programmare un intero s.o. avendo solo il compilatore che compili il proprio file(ovvero produca bytecode compatibile) senza nessuana libreria di supporto!!!
Infatti se non erro la libreria standard è scritta nel linguaggio c per il c e c++ per il c++.
Utilizzare il c o c++ è indifferente,anche perchè il c++ nasconde parecchie cose al programmatore, e spesso tutte quelle magie che riesce ad eseguire analizzando il codice compilato si scopre che altro non solo che semplici tecniche di programmazione.
Una ad esempio:
Nel c++ quando all'interno di un metodo di una classe utilizzi il comando "this" in realtà non si sta facendo niente di magico!Il compilatore tradurrà in questo modo la funzione:
int classname_functionname_nnn(Object this);
e quando la si va ad utilizzare il compilatore in automatico passerà l'oggetto anche se noi in realtà non lo facciamo.
La reale potenza del c/c++ sta proprio nel fatto che con quei 4 costrutti che mettono a disposizione sono in grado di svolgere tutti i compiti di un computer.
Per accedere poi all'hardware non è obbligatorio l'uso di una libreria,lo si può fare benissimo direttamente in c o c++.
Beata gioventu'!
Innanzitutto non sono
tecniche di programmazione, ma semmai
paradigmi di programmazione.
vbextreme ha scritto:
il c e il c++ mettono a disposizione del programmatore tecniche di programmazione avanzate
Dirai:
e' la stessa cosa!
Si e no: utilizzare la terminologia corretta implica anche una comprensione di quello che si sta' dicendo. Usare una terminologia sbagliata o in modo non corretto invece, ....
vbextreme ha scritto:
... permettendo di programmare un intero s.o. avendo solo il compilatore che compili il proprio file
Vero: puoi programmare un intero S.O. con il solo compilatore.
Ma se sei un programmatore (non sto dicendo tu in paricolare, ma un professionista che studia e conosce la materia), saprai anche che la prima cosa da fare e' quella di partizionare il tuo lavoro in moduli, identificare le interfaccie tra ogni modulo, ed implementare un modulo alla volta.
Quello che fai e' crearti una libreria!
Certo' e' una libreria che hai fatto tu e non qualcun altro. Ma sempre una libreria e'.
Non vuoi chiamarla libreria? Ma modulo? Gerarchia di classi?
Chiamala come vuoi ma e' sempre la setssa cosa: un qualcosa che una volta preparato puo' essere utilizzato per fare altro.
Ora come saprai, l'utilizzo di una libreria ha i suei pregi ed i suoi diffetti:
1) il pregio e' che qualcun altro, probabilmente piu' esperto di te (ovviamente non tu personalmente, ma del professionista di cui sopra), ha identificato un'interfaccia che descrive l'uso comune che si fa delle funzionalita' messe a disposizione dalla libreria, e ha implementato e testato la suddetta interfaccia
2) il diffetto e' che bisogna adattarsi alla filosofia della libreria. E non e' detto che il tuo problema si adatti perfettamente a tale filosofia.
Ora, implementare qualunque cosa senza un approccio modulare (le cosidette tecniche di
programming in large) e' impossibile. Oppure si e' dei dilettanti.
Ovviamente, non mi permetterei mai di offendere un dilettante che non sa programmare. Ma non assegnerei mai un lavoro complesso ad un dilettante, o a uno che non sa utilizzare i termini in modo corretto...
Nota: a meno di non intendere la piattaforma .NET in cui esiste un compilatore C++ (cosi' come un compilatore Basic), la maggior parte dei compilatori C/C++
non si appoggiano ad una virtual machine e non generano
bytecode compatibile.
vbextreme ha scritto:
... il compilatore che compili il proprio file(ovvero produca bytecode compatibile) senza nessuana libreria di supporto!!!
Generano codice binario eseguibile direttamente sull'hardware e sul SO per cui sono stati progettati.
Il che non vuol dire che sia la macchina sui cui vengono utilizzati: esistono anche i 'cross compilatori'.
Nota 2: Sarebbe interessante avere un esempio di queste miracolose
techniche di programmazione che permettono di implementare un intero S.O. senza librerie di supporto.
Nota 3: la libreria standard del C/C++ e' composta da due parti:
1) la libreria di funzioni C, usabile sia in C che in C++, con le primitive per l'input/output, le funzioni matematiche, l'accesso al file system, le routine di allocazione della memoria. E poco altro. Ad esempio, fino al C++11 non erano presenti le funzioni per create thread. Bisognava utilizzare una libreria di terze parti come 'pthreads', oppure le api WIN32 se si era sotto Windows (e non si voleva utilizzare le MFC)
2) le STL che utilizzano i template del C++, ed usabili solo con esso, per mettere a dispoziione una serie di collezioni, una serie di algoritmi sulle collezioni, ed una serie di oggetti per un Input/Output piu' flessibile. Ed ora anche una serie di oggetti per il supporto al threading
Quindi non e' esatto dire (cioe' stai errando ):
vbextreme ha scritto:
Infatti se non erro la libreria standard è scritta nel linguaggio c per il c e c++ per il c++.
Nota 4: altrettanto interessante e' avere un esempio di queste
magie:
vbextreme ha scritto:
... Utilizzare il c o c++ è indifferente,anche perchè il c++ nasconde parecchie cose al programmatore, e spesso tutte quelle magie che riesce ad eseguire analizzando il codice compilato si scopre che altro non solo che semplici tecniche di programmazione.
C e C++ sono due linguaggi che si assomigliano dal punto di vista sintattico, ed in particolare e' stato fatto uno sforzo considerevole per far si che il C++ sia compatibile con il C.
Ma sono due linguaggi fondamentalmente diversi, per il banale motivo che implementano due
paradigmi di programmazione diversi.
Certo, quello che si puo' fare in C++ lo si puo' fare anche in C (il contrario e' assicurato per progettazione), con un po' di fatica in piu' e con ragionevole comprensione di che cosa e' la programmazione ad oggetti. Vero, nulla di eclatante.
Ma il
paradigma di programmazione non e' sintassi ma
filosofia: e' un diverso modo di approciare un problema, e un diverso modo di risolverlo.
Ad esempio, utilizzando il paradigma della
programmazione a regole (il capostipite dei linguaggi di programmazione di questo tipo e' l'OPS5) un problema verrebbe risolto in modo estremamente diverso da quello utilizzabile con la programmazione ad oggetti.
Poi, se gratti fino ad arrivare all'hardwrae, tutto si riduce alle istruzioni macchina. Questo per dire che qualunque cosa fai con il C++ lo puoi fare anche in assembler. Vero, ovvio.
Ma vuoi mettere ragonare per oggetti e ragionare per indirizzi di memoria? Ragionare in termini di metodi di un oggetto o in termini di subroutine?
Quindi, non credo che l'affermazione seguente sia condivisibile:
vbextreme ha scritto:
... Nel c++ quando all'interno di un metodo di una classe utilizzi il comando "this" in realtà non si sta facendo niente di magico!Il compilatore tradurrà in questo modo la funzione:
... La reale potenza del c/c++ sta proprio nel fatto che con quei 4 costrutti che mettono a disposizione sono in grado di svolgere tutti i compiti di un computer.
La reale potenza del C++ sta' nel
paradigma di programmazione!
PS: se non sei perfettamente competente nella materia, non ti conviene fare affermazioni del tipo
... hai una gran confusione in testa .... E' un po' ... troppo diretta ... a fronte di troppe poche informazioni sulla controparte .