Newsgroup: it.comp.lang.c++
Titolo: Documentazione di basso livello..

ciao.. ormai sono diversi anni che programmo in C++ anche su progetti
di dimensioni abbastanza consistenti..
Non provenendo però da formazione informatica mi sento molto insicuro
sulle fondamenta su cui si basano oggi i normali elaboratori.. come la
memoria viene organizzata, richiamata, quali sono i passaggi che il
sistema operativo effettua per eseguire un codice o aprire uno
stream..
Un post recende qui in questo gruppo parlava di vtables, name
mangling, ABI.. tutta terminologia a me sconosciuta..
Qualcuno potrebbe indirizzarmi a della documentazione (meglio ancora
ad un libro - ita o inglese indifferente) in cui si discuta dei
funzionamenti di basso livello degli elaboratori.. che sia adatta ad
un'utenza come la mia??
Anche un termine preciso da cercare con google andrebbe bene...
ciao & grazie,
  Antonello

 un'utenza come la mia??
Per cominciare:
http://en.wikipedia.org/wiki/Vtable
http://en.wikipedia.org/wiki/Name_mangling
http://en.wikipedia.org/wiki/Application_binary_interface
Ciao
-- 
Andrea Corradi | Debian User | 
www.debian.org
Fingerprint: A41E F6B0 DBDB F04C 4940 E411 30F3 CD62 57B1 8458
gpg --keyserver 
keyserver.linux.it
 --recv-key 57B18458
Please avoid sending me Word or PowerPoint attachments.
http://www.gnu.org/philosophy/no-word-attachments.html

stream..
Personami, ma sono diversi anni che programmi *in C++* "anche su
progetti di dimensioni abbastanza consistenti" e non hai idea di cosa
sia una vtable, che si intenda per "name mangling" e cosa sia un'ABI?
Ti giuro che non te lo chiedo per polemica ma mi incuriosisce davvero
che un chirurgo possa maneggiare per diversi anni un bisturi senza
sapere davvero come sia fatto...
Oltretutto, mi sembra incredibile che tu non abbia conoscenze solide
su come sia organizzata la memoria e come il sistema operativo esegua
il codice. Perdonami (sul serio) ma a me sembra davvero incredibile se
quello che riferisci sulla tua carriera è vero.
E' come se il chirurgo di cui sopra, oltre al resto, avesse solo una
vaga idea di com'è fatto un rene... Credimi non voglio mortificarti,
ma trovo abbastanza grave tutto questo.
A quale piattaforma sei interessato, nello specifico? (perché, benché
a livello hardware le cose funzionino secondo principi abbastanza
uniformi, le cose cambiano da s.o. a s.o.).
Lo mastichi l'inglese? ti prego almeno a questo dimmi di sì, perché
altrimenti ti uccido.
Se la risposta è sì, una delle risorse che puoi consultare (non so
quanto semplice, però, per te) è la seguente:
http://mitpress.mit.edu/sicp/full-text/book/book.html
Poi c'è l'intramontabile "Computer Organization Hardware/Software
Interface" di Hannessey e Patterson, che potrebbe però rivelarsi un
po' difficile.
Se ti serve avere delle conoscenze di basso livello sul C++, potresti
procurarti "Inside The C++ Object Model" di Stanley Lippman, che è
vecchissimo ma fonte autorevole ed entra nei dettagli.
Poi ci sono i manuali di Tanenbaum su reti e sistemi operativi, vere
bibbie sugli argomenti. Quelli di Richter e Russinovich per Windows,
nello specifico.
Ci sono testi sulla programmazione di rete come lo Stevens. Insomma,
di cose da leggere ce ne sono tante, forse faresti bene a fissare
delle priorità...


bè guarda.. trovo "un po'" offensivo il tuo post.. l'ho detto fin
dall'inizio.. non ho una provenienza informatica ed in C++ ci ho fatto
quello che mi serviva, cioè far girare dei modelli economici multi-
agente (
http://regmas.org
 circa 10000 LOC).
Comunque grazie per i riferimenti.. erano del tipo che cercavo, ho
incominciato a dare un occhio a "Structure and Interpretation
of Computer Programs".. poi vediamo.. (@ Andrea Corradi.. non cercavo
le singole voci - che avevo riportato come esempio, sembra con
successo- ma dei testi maggiormente organizati)

agente (
http://regmas.org
 circa 10000 LOC).
Tu puoi trovare offensivo quello che scrivo; io la trovo solo una
reazione molto onesta (e assolutamente scevra da intenti polemici, te
lo garantisco) alle tue parole. Ti assicuro che quanto dici ha delle
gravità, a livello oggettivo. Bada che è facile che io passi per il
cattivo, polemico, arrogante di turno, ma ti ho dato delle indicazioni
tecniche precise su come procedere nel tuo studio, per cui non ho
questo timore.
Ti risponderò, come prima, senza voglia né di mortificarti, né di
polemizzare oziosamente. A me, a prima vista, le tue sono sembrate le
parole di un troll, ma non voglio bruciare sul rogo l'ennesima
presunta strega.
Tu hai detto una cosa diversa da quella che stai dicendo in questo
messaggio e cioè (ti cito): "ormai sono diversi anni che programmo in
C++ anche su progetti di dimensioni abbastanza consistenti.."
Far seguire a questo una confessione della tua ignoranza di certi
meccanismi "interni" del C++ (che poi così interni non sono, perché
almeno un'idea di fondo di cosa siano è nota a qualunque programmatore
mediamente esperto) e più in generale di certi fondamenti dei
calcolatori ha delle connotazioni oggettivamente gravi.
In sostanza non mi spiego come tu possa avere diversi anni di
esperienza alle spalle su progetti di dimensioni abbastanza
consistenti, senza avere alcuna preparazione informatica specifica.
A meno di capire cosa siano i "progetti di dimensioni abbastanza
consistenti" (10000 righe di codice non sono, a mio parere, un
progetto "abbastanza consistente") e a meno di capire che intenda tu
esattamente per "programmazione".
Programmare in un linguaggio per "diversi anni" su "progetti di
dimensioni abbastanza consistenti" presuppone, secondo il mio parere,
se non un'eccellente, almeno una conoscenza MOLTO buona del
linguaggio. Tutti quei "diversi anni", poi, dovrebbero esserti bastati
ad entrare in confidenza con aspetti di (relativo) basso livello del
C++. Altrimenti che cosa fai nello specifico? ti limiti a battere
tasti su una tastiera? scrivi senza pensare? non ti interroghi su come
funzionino le cose? 
Non ci credo che non hai mai letto della documentazione tecnica sul
C++, non ci credo che in tutti quegli anni non ti sei MAI imbattuto in
alcuna risorsa che approfondisse certi concetti.
Una sola domanda: hai passione per il tuo lavoro?

 sapere davvero come sia fatto...
Che esagerazione, al panettiere che gli frega di conoscere i processi della 
lievitazione del pane a livello molecolare???? :-)


A volte anch'io trovo un po' estreme le posizioni di Andrea, ma il tuo
paragone non calza. Molta gente va in giro in macchina tutta la vita,
guidando anche bene, senza sapere come funziona il motore. Michael
Schumacher della sua Ferrari non solo conosceva ogni bullone, ma ne
conosceva pure l'effetto sul comportamento della macchina.
Mi sembra che l'OP abbia chiarito che la programmazione non e' il suo
mestiere e quindi non ci trovo niente di strano che non abbia
determinate basi. Pero' concordo con Andrea che per fare bene il
nostro lavoro sono indispensabili.
Ciao,
Nicola

 lievitazione del pane a livello molecolare???? :-)
Non sto esagerando. Chiunque abbia una - almeno buona - conoscenza del
C++ sa bene cosa è il polimorfismo e viene naturale almeno chiedersi
come venga implementato. Oltretutto cosa sia una vtable è spiegato su
qualunque testo sul C++, almeno in superficie. Il paragone che proponi
è inadeguato perché i concetti a cui fa riferimento l'OP (vtable, name
mangling, ABI) non stanno al C++ come la chimica molecolare sta al
pane. Sono concetti molto più fondamentali per il lavoro del
programmatore di quanto lo sia la fisica quantistica per il
panettiere.
Poi, il panettiere non deve necessariamente avere un approccio
scientifico al proprio lavoro, mentre al programmatore dovrebbe venir
spontaneo chiedersi come funzionano le cose "under the hood".

 guidando anche bene, senza sapere come funziona il motore.
Non è la stessa cosa. La gente che va in macchina è paragonabile ad un
utente, non ad un programmatore.
Il programmatore dovrebbe essere colui che progetta certi meccanismi
alla base di ciò che la gente comune usa ed è quindi tenuto ad
informarsi più che bene su come vadano fatte le cose. Una casalinga
(utente) che va a fare la spesa con la sua 600 non è tenuta a sapere
cosa sia un albero a camme o cosa siano coppia e potenza di un motore,
mentre per un ingegnere meccanico (programmatore) che progetta quel
motore sono probabilmente noziosi fondamentali.
Poi, in quanto all'OP, fermo restando che gli ho dato indicazioni su
come procedere nello studio e che la sua situazione semplicemente mi
incuriosisce, io non ci trovo nulla di estremo in quello che ho detto.
Ho solo fatto una banale analisi delle sue parole: uno che sviluppa in
C++ da diversi anni su sistemi anche di dimensioni abbastanza
consistenti per me è un programmatore a tutti gli effetti, quindi
(vedi sopra) è tenuto a sapere certi concetti.

Andrea Laforgia ha scritto:

Un programmatore C++ e' l'utente del compilatore.
I concetti di vtable, name mangling, e ABI sono necessari per 
l'implementatore di un compilatore, ma non per i suoi utenti.
Infatti, non riesco a trovare riferimenti a tali concetti nel libro di 
Stroustrup sul C++; e conosco varie persone che programmano con 
soddisfazione in C++ nonostante probabilmente non conoscano tali concetti.
Ovviamente ci sono vari livelli di conoscenza di un linguaggio, e in 
ogni organizzazione di sviluppo software dovrebbe sempre esserci almeno 
una persona con una profonda esperienza del linguaggio usato e degli 
strumenti impiegati, ma non e' affatto necessario che tutti i 
programmatori di tale organizzazione condividano tali competenze.
E una piccola azienda si puo' avvalere di consulenti esterni.
Per fare una similitudine, non tutti i tecnici della Fiat e non tutte le 
officine di manutenzione di macchine Fiat hanno le conoscenze di 
meccanica dei progettisti della Fiat.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 soddisfazione in C++ nonostante probabilmente non conoscano tali concetti.
Ok. Tuttavia di fatto dal momento che normalmente uno cerca di fare
funzionare i programmi in concreto (dopo averli scritti) potrebbe
sbatterci contro queste cose.
La prima volta che cerca di interfacciare C++ con C e/o con altro C++
compilato da qualche altro compilatore (o magari da una diversa versione
dello stesso compilatore) non mi sembra improbabilme imbattersi in
problemi legati a name mangling e ABI.
Poi ovviamente, se uno suddetti problemi non li ha (o ha qualcuno che
glieli risolve), magari non gli viene un'idea.
Diciamo che avete in un certo senso ragione entrambi.
-- 
-riko