I linguaggi di programmazione: evoluzione e fondamenti per l'informatica

Slide di Università sui linguaggi di programmazione. Il Pdf introduce i fondamenti della programmazione, esaminando il linguaggio macchina e l'assembly, le loro caratteristiche e limitazioni. Questo documento di Informatica è utile per comprendere l'evoluzione dei linguaggi e la necessità di quelli di livello superiore.

Mostra di più

22 pagine

«I linguaggi di programmazion
Antonio Tufano
Definizione 1 Un linguaggio è un insieme di parole e di metodi
di combinazione delle parole usati e compresi da una comunità
di persone
È una definizione poco precisa perché…
…non evita le ambiguità dei linguaggi naturali
…non si presta a descrivere processi computazionali automatici
…non aiuta a stabilire proprietà
Introduzione alla programmazione

Visualizza gratis il Pdf completo

Registrati per accedere all’intero documento e trasformarlo con l’AI.

Anteprima

Introduzione alla programmazione

Antonio Tufano
Definizione 1 - Un linguaggio è un insieme di parole e di metodi
di combinazione delle parole usati e compresi da una comunità
di persone

  • È una definizione poco precisa perché ...
    ... non evita le ambiguità dei linguaggi naturali
    ... non si presta a descrivere processi computazionali automatici
    ... non aiuta a stabilire proprietà

Definizione di linguaggio

Definizione 2 - Il linguaggio è un sistema matematico che
consente di rispondere a domande come:

  • quali sono le frasi lecite?
  • si può stabilire se una frase appartiene al linguaggio?
  • come si stabilisce il significato di una frase?
  • quali sono gli elementi linguistici primitivi?

Lessico, sintassi e semantica

  • Lessico: l'insieme di regole formali per la scrittura di parole in un
    linguaggio
  • Sintassi: l'insieme di regole formali per la scrittura di frasi in un
    linguaggio, che stabiliscono cioè la grammatica del linguaggio
    stesso
  • Semantica: l'insieme dei significati da attribuire alle frasi
    (sintatticamente corrette) costruite nel linguaggio
  • Nota: una frase può essere sintatticamente corretta e tuttavia non
    avere significato!

Cenni storici

. Benché siano macchine in grado di compiere operazioni
complesse, i calcolatori devono essere "guidati" per mezzo di
istruzioni appartenenti ad un linguaggio specifico e limitato, a
loro comprensibile.

Linguaggio di programmazione: costituzione

  • Un linguaggio di programmazione è costituito, come ogni altro
    tipo di linguaggio, da un alfabeto, con cui viene costruito un
    insieme di parole chiave (il vocabolario) e da un insieme di
    regole sintattiche per l'uso corretto delle parole del linguaggio.

Comandi hardware

  • A livello hardware, i calcolatori riconoscono solo comandi
    semplici, del tipo copia un numero, addiziona due numeri,
    confronta due numeri.

Linguaggio macchina

  • I comandi realizzati in hardware definiscono il set di istruzioni macchina
    e i programmi che li utilizzano direttamente sono i programmi in
    linguaggio macchina
  • In linguaggio macchina ...
    - ogni "operazione" richiede l'attivazione di numerose istruzioni base
    - qualunque entità, istruzioni, variabili, dati, è rappresentata da
    numeri binari: i programmi sono difficili da scrivere, leggere e
    manutenere


Il linguaggio macchina riflette l'organizzazione della macchina più che
la natura del problema da risolvere

Programmazione in linguaggio macchina e assembly

  • Negli anni '50, tutti i programmi erano scritti in linguaggio macchina
    o in assembly
    - ogni istruzione è identificata da una sigla piuttosto che da un
    codice numerico
    - il riferimento alle variabili viene effettuato per mezzo di nomi
    piuttosto che mediante indirizzi di memoria
  • I programmi scritti in assembly necessitano di un apposito
    programma assemblatore per tradurre le istruzioni tipiche del
    linguaggio in istruzioni macchina

Linguaggi di alto livello

  • Oggi si utilizza l'assembly solo se esistono vincoli stringenti sui
    tempi di esecuzione; viceversa, si usano linguaggi più vicini al
    linguaggio naturale, i linguaggi di alto livello
    I linguaggi di alto livello sono elementi intermedi di una varietà di


linguaggi ai cui estremi si trovano il linguaggio macchina, da un lato,
ed i linguaggi naturali, come l'italiano e l'inglese, dall'altro.

  • I linguaggi di programmazione differiscono comunque dai linguaggi
    naturali: sono infatti meno espressivi ma più precisi
  • Sono semplici e poveri (poche parole chiave, poche regole), ma
    privi di qualsiasi ambiguità

Linguaggi di programmazione: alfabeto e regole

  • Un linguaggio di programmazione è costituito, come ogni altro tipo
    di linguaggio, da un alfabeto con cui viene costruito un insieme di
    parole chiave (il vocabolario) e da un insieme di regole sintattiche
    (la grammatica) per l'uso corretto delle parole del linguaggio
  • I microprocessori presenti all'interno della macchina sono stati
    progettati per riconoscere ed eseguire un insieme piuttosto ristretto
    di istruzioni; tali istruzioni costituiscono il cosiddetto linguaggio
    macchina
  • Il linguaggio macchina è basato su una codifica estremamente
    compatta e poco intuitiva

Codifica e diffusione della programmazione

  • Codificare un programma utilizzando il linguaggio macchina è assai
    arduo e richiede una conoscenza approfondita del funzionamento di
    un particolare calcolatore (o meglio: del microprocessore che
    costituisce la CPU della macchina)
  • Per ovviare a questo problema, che ha costituito per molti anni un
    grosso limite alla diffusione della programmazione e quindi anche
    dell'uso dei calcolatori, sono stati sviluppati dei linguaggi di
    programmazione più evoluti, che si pongono a metà strada fra il
    nostro linguaggio naturale ed il linguaggio macchina
  • Sono semplici e poveri (poche parole chiave, poche regole), ma
    privi di qualsiasi ambiguità

Programmazione a basso e alto livello

  • In informatica si parla di programmazione a basso livello quando si
    utilizza un linguaggio molto vicino alla macchina, al suo
    funzionamento interno
  • Si parla invece di programmazione ad alto livello quando si
    utilizzano linguaggi più sofisticati ed astratti, slegati dal
    funzionamento fisico della macchina
  • Si viene così a creare una gerarchia di linguaggi, dai meno evoluti (il
    linguaggio macchina e l'assembler) a quelli più evoluti (Pascal,
    Fortran, Cobol, Java, Perl, Python, Go)
  • Il linguaggio C si pone ad un livello intermedio

Efficienza e velocità di programmazione

  • La programmazione a basso livello è più ardua e meno intuitiva, ma
    consente di sviluppare programmi molto efficienti su uno specifico
    sistema hardware/software, sfruttandone a fondo le caratteristiche
  • Ad alto livello la programmazione è più "naturale" e rapida, ma è
    possibile che non consenta di produrre software particolarmente
    efficiente
    Efficienza del programma
    Programmazione
    a basso livello
    Programmazione
    ad alto livello
    Facilità e velocità di programmazione

Vantaggi dei linguaggi di alto livello

  • Consentono di trattare oggetti complessi senza doversi preoccupare
    dei dettagli della macchina sulla quale il programma viene eseguito
  • Richiedono un compilatore o un interprete in grado di tradurre le
    istruzioni del linguaggio di alto livello in istruzioni macchina di basso
    livello, eseguibili dal calcolatore
  • Un compilatore è un programma traduttore simile ad un
    assemblatore, ma più complesso, infatti ...
    - esiste una corrispondenza biunivoca fra istruzioni in assembler
    ed istruzioni macchina
    - ogni singola istruzione di un linguaggio di alto livello corrisponde
    a molte istruzioni in linguaggio macchina

Portabilità, leggibilità, manutenibilità

  • I linguaggi che non dipendono dall'architettura della macchina
    offrono due vantaggi fondamentali:
    - i programmatori non devono cimentarsi con i dettagli
    architetturali di ogni calcolatore
    - i programmi risultano più semplici da leggere e da modificare
    => portabilità, leggibilità, manutenibilità

Benefici dei linguaggi di alto livello

  • Portabilità: i programmi scritti per un calcolatore possono essere
    utilizzati su qualsiasi altro calcolatore, previa ricompilazione
  • Leggibilità: la relativa similitudine con i linguaggi naturali rende i
    programmi più semplici, non solo da scrivere, ma anche da leggere
  • Manutenibilità: facilità nell'effettuare modifiche di tipo correttivo,
    perfettivo, evolutivo e adattivo
  • La possibilità di codificare algoritmi in maniera astratta si traduce in
    una migliore comprensibilità del codice e quindi in una più facile
    analisi di correttezza

Svantaggi e costi di produzione software

  • Eventuale svantaggio dell'uso dei linguaggi di alto livello è la
    riduzione di efficienza
    - È possibile utilizzare successioni di istruzioni macchina diverse
    per scrivere programmi funzionalmente equivalenti: il
    programmatore ha un controllo limitato sulle modalità con cui il
    compilatore traduce il codice
    - Tuttavia ... compilatori sofisticati ricorrono a trucchi di cui molti
    programmatori ignorano l'esistenza
  • La ragione fondamentale per decretare la superiorità dei linguaggi di
    alto livello consiste nel fatto che la maggior parte dei costi di
    produzione del software è localizzata nella fase di manutenzione,
    per la quale leggibilità e portabilità sono cruciali

Tipi di linguaggi ad alto livello

Possiamo aggregare i numerosi linguaggi di programmazione esistenti
sulla base del modello astratto di programmazione che sottintendono e
che è necessario adottare per utilizzarli
Linguaggi di
programmazione
Imperativi
Dichiarativi
Procedurali
(C, Pascal)
Ad oggetti
(C++, Java)
Linguaggi per il
calcolo Parallelo
Funzionali
(Lisp)
Logici
(Prolog)

Linguaggi imperativi

  • Il modello computazionale è basato sul cambiamento di stato
    della memoria della macchina
  • È centrale il concetto di assegnazione di un valore ad una
    (variabile) locazione di memoria
  • Il compito del programmatore è costruire una sequenza di
    assegnazioni che producano lo stato finale (in modo tale che
    questo rappresenti la soluzione del problema)

Linguaggi dichiarativi

  • Il modello computazionale è basato sui concetti di funzione e
    relazione
  • Il programmatore non ragiona in termini di assegnazioni di valori,
    ma di relazioni tra entità e di valori di una funzione

Scelta del linguaggio in base al problema

  • Sulla base dell'ambito in cui si colloca il problema da risolvere, è
    opportuno adottare un linguaggio piuttosto che un altro:
    - Calcolo scientifico: Fortran, C
    - Intelligenza Artificiale: Prolog, Lisp, C
    - Applicazioni gestionali: Cobol, SQL, C
    - Sistemi operativi: Assembler, C
    - Applicazioni visuali: C++, Java, Visual Basic
    - Applicazioni Web: Java, PHP, ASP

Non hai trovato quello che cercavi?

Esplora altri argomenti nella Algor library o crea direttamente i tuoi materiali con l’AI.