Codice sorgente e codice oggetto

Da Wikiversità, l'apprendimento libero.
lezione
Codice sorgente e codice oggetto
Tipo di risorsa Tipo: lezione
Materia di appartenenza Materia: Fondamenti di informatica

Introduzione[modifica]

Un programma è una serie di istruzioni in codice binario che vengono eseguite dalla CPU. Si può pensare come una lunga catena di 1 e 0 (i segnali elettrici) che attivano all'interno della CPU i corretti circuiti logici che effettueranno i calcoli e le operazioni necessarie. Ogni operazione è richiamabile da una precisa sequenza di 1 e 0. L'insieme delle combinazioni che identificano tutte le operazioni possibili è denominato API, mentre il codice che viene eseguito è definito codice macchina. Ogni CPU ovviamente ha un'API diversa da tutte le altre architetture, e pertanto un codice macchina creato per una determinata architettura non può funzionare su altre.

Inizialmente i programmatori erano costretti a definire il programma scrivendo direttamente il codice macchina, ovvero precisamente le combinazioni corrette di 1 e 0 che la CPU doveva eseguire. Come è facile immaginare non era un lavoro facile e la probabilità di commettere errori alta. Col tempo sono stati introdotti strumenti sempre più complessi per facilitare lo sviluppo delle applicazioni, consentendo la scrittura di codice più comprensibile per gli uomini, poi codificato in linguaggio macchina da altri programmi. Questi ultimi sono i compilatori e verranno trattati nel prossimo capitolo.

Esiste quindi una differenza sostanziale tra quello che il programmatore scrive, chiamato codice sorgente, e quello che effettivamente è l'eseguibile, ovvero le istruzioni binarie frutto della compilazione, chiamato anche codice binario o oggetto. Il codice sorgente è scritto in un linguaggio, detto appunto linguaggio di programmazione, ed è indipendente dal linguaggio macchina. Sarà infatti il compilatore ad assumersi il compito di tradurre il sorgente in codice binario seguendo le API dell'architettura su cui il programma dovrà poi essere eseguito.

L'evoluzione dei linguaggi di programmazione, unita all'incremento della potenza di calcolo, ha visto la nascita anche di linguaggi che non sono compilati ma interpretati. Un esempio è il ben noto javascript, utilizzato nei siti web. Questi linguaggi di programmazione sono letti da un programma, detto interprete, che esegue le operazioni previste. Intuitivamente svolge a livello software quello che fa la cpu a livello hardware. Le istruzioni attivano le varie funzioni dell'interprete che eseguirà poi il lavoro vero e proprio. Si aggiunge quindi un ulteriore livello di astrazione, che porta molti vantaggi tra cui la portabilità del programma, ma anche lo svantaggio di avere minori prestazioni.