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.

See more

22 Pages

«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

Unlock the full PDF for free

Sign up to get full access to the document and start transforming it with AI.

Preview

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

Can’t find what you’re looking for?

Explore more topics in the Algor library or create your own materials with AI.