DIPARTIMENTO   DI   INFORMATICA
Università di Torino

4. Lezione/esercitazione del 8/10/04 [2 ore, in AULA B] per tutti i turni

di: Algoritmi & Laboratorio ( Modulo 2 )

"Riassunto" della lezione:

Per poter usare al meglio un linguaggio di programmazione occorre essere coscienti di quali sono le sue caratteristiche Alcune caratteristice di interesse sono le seguenti:
  1. Il linguaggio e' interpretato o compilato?
    Ad es. BASIC, Perl, JavaScript sono interpretati, mentre FORTRAN, Pascal, C sono compilati.
  2. Se il linguaggio e' compilato, allora supporta la compilazione separata?
    Ad es. il Pascal Standard non supporta la compilazione separata, mentre C la supporta.
  3. Se il linguaggio e' compilato, allora e compilato in codice macchina oppure nel codice di una macchina virtuale?
    Ad es. C e' compilato in codice macchina, mentre Java e' compilato nel codice di una macchina virtuale.
  4. Se il linguaggio e' compilato e supporta la compilazione separata, allora il linking e' statico o dinamico?
    Ad es. in Pascal e in ANSI C il linking e' statico (attenzione, nei C della Microsoft, le DLL sono linkate dinamicamente...), mentre Java e' compilato nel codice di una macchina virtuale.
  5. Quanto e' dettagliata la definizione (o specifica) del linguaggio?
    Ad es. in Pascal e in C e' la dimensione dei tipi base (e la rappresentazione dei loro valori) non e' specificata (varia di compilatore in compilatore, riflettendo l'archittetura della macchina sottostante). In Java, invece, la rappresentazione dei tipi base e' completamente specificata.
  6. Ci sono dei "apetti poco chiari" nella definizione (o specifica) del linguaggio?
    Ad esempio, nel caso di un linguaggio compilato, viene specificata chiaramente la relazione tra
    • risultato della compilazione separata (e del linking) dei files sorgenti S_1,...,S_n, e
    • risultato della compilazione di un singolo file sorgente S concatenazione di S_1,...,S_n?
  7. Il linguaggio e' "safe" o "non-safe"?
    Ad es. Java e Scheme sono safe, mentre C e' non-safe. Confrontate ad es. il comportamento dei programmi:
    main(){
       int a[10];
       int b[10];
       int i;
    
       scanf("%d",&i);
       a[i]=100;
    }
    
    e
    public class Esempio 
    {  public static void main(String[] args)
       { int a = new int[10];
         int b = new int[10];
         int i;
    
         i = ConsoleReader.readInt("");
         a[i]=100;
        }
    }
    
    sull'input 13.
  8. Il linguaggio supporta la gestione delle eccezioni?
    Ad es. Java supporta la gestione delle eccezioni, mentre C no.
  9. Il linguaggio ha i tipi?
    Ad esempio SmallTalk e Scheme non hanno i tipi, mentre C e Java hanno i tipi.
  10. Se il il linguaggio ha i tipi, quali sono le proprita' del suo sistema di tipi (il linguaggio e' fortemente tipato)?
    A scanso di equivoci, diremo che:
    • Un linguaggio e' (staticamente) tipato se, in fase di compilazione, ad ogni espressione viene asssegnato un tipo.
    • Un linguaggio e' (staticamente) fortemente tipato se e' tipato e, in fase di esecuzione, non possono verificarsi errori di tipo.

    Ad. esempio C non e' fortemente tipato, mentre Pascal e Java sono quasi fortemente tipati.
    Java non e' fortemente tipato (ma le circostanze in cui si puo' verificare un errore ti tipo in fase di esecuzione sono circoscitte e documentate, per questo dire che Java e' quasi fortemente tipato). Si consideri ad esempio il seguente programma:
    public class A { public String ma {return "A";}}
    
    public class B { public String mb {return "B";}}
    
    public class Esempio 
    {  public static void main(String[] args)
       {  A[] a;
          B[] b;
          b = new b[10];
          a = b;
          a[0] = new A(); // QUESTA ISTRUZIONE GENERA UN ERRORE DI TIPO A RUN-TIME
          b[0].mb();
       }
    }
    
    
    
E' anche utile sapere quali sono le idee che hanno guidato il design del linguaggio e la sua evoluzione nel tempo. Informazioni di questo genere si possono trovare:
  • per Java, nel libro [Arn],
  • per C, nel "white book" (B. W. Kerninghan, D. M. Ritchie. Il linguaggio C. Pearson/Prentice Hall, 2004 --- va bene anche la seconda edizione stampata dalla Jackson) --- nel seguito riferito come [Ker].

Riferimenti (LETTURE OBBLIGATORIE):

Studiare:
  • i tipi dati fondamentali del linguaggio Java: ([Hor] capitolo 3).

Riferimenti (LETTURE CONSIGLIATE):

  • La "prefazione" e il capitolo 1 ("Una rapida panoramica") del libro [Arn].
  • Le "prefazioni", l'"introduzione" e il capitolo 1 ("Panoramica del linguaggio") del libro [Ker].


[Corso di Studi di Informatica]

Last update: Oct 20, 2004