• Aucun résultat trouvé

C’est aussi une science...

N/A
N/A
Protected

Academic year: 2022

Partager "C’est aussi une science..."

Copied!
80
0
0

Texte intégral

(1)

INF 321

Introduction au cours et ` a Java

Eric Goubault

Cours 1

13 mai 2013

(2)

L’informatique, c’est dur, c’est complexe...

...il faut comprendre les concepts de base...

(3)

L’informatique est partout...

Dans les ustensiles de la vie quotidienne

machine `a laver

t´el´ephone portable

t´el´evision

(HD: ∼1 TeraFlops pour la carte graphique...)

(4)

...et doit fonctionner sans bug !

Dans l’´energie, les transports...

avion

(A380: plus d’1 million de lignes de code pour le calculateur primaire de vol!)

centrale

(5)

C’est aussi une science...

“Computer science is no more about computers than astronomy is about telescopes”

Edsger W. Dijkstra, Prix Turing 1972

...mais contrairement `a la physique, les applications se sont construites plus vite que la th´eorie...

(6)

C’est aussi une science...

“Computer science is no more about computers than astronomy is about telescopes”

Edsger W. Dijkstra, Prix Turing 1972

...mais contrairement `a la physique, les applications se sont construites plus vite que la th´eorie...

(7)

Objectifs du cours

Apprendre `a programmer en Java (et comparaison avec Caml et C)

Comprendre les principes des langages de programmation (choix du au format du cours!):

programmation imp´erative, orient´e objet (Java...) programmation fonctionnelle (Caml, Haskell...) programmation r´eactive (Lustre...)

Commencer `a apprendre les outils de l’informatique math´ematique - calculabilit´e, complexit´e, s´emantique etc.

(plus : ann´ees 2 et 3)

(8)

Cursus

S O N D J F M A M J J

Ann´ee 1 TC (311/321)

Ann´ee 2 INF-421 INF-422/423 INF 431 L3

Ann´ee 3 PA1 PA2 Stage d’option M1

Ann´ee 4 Master (MPRI, COMASIC etc.) M2 Ann´ees 1 et 2

(9)

Organisation du cours

Pˆales...

Pˆale HC (12 juillet) D´el´egu´es

A ´elire d’urgence! (TD2, 1 d´elegu´e par groupe; 2 d´el´egu´es pour le cours)

Me tenir au courant r´eguli`erement, probl`eme ou pas

(10)

Les TDs

TD: mise en application pratique des concepts de base

suivi de chaque ´el`eve: les ´el`eves chargent leurs programmes sur un serveur, accessible aux MdC (pri`ere de se souvenir de son mot de passe au TD1! - mot de passeenex)

(11)

Les TDs

TD: mise en application pratique des concepts de base

suivi de chaque ´el`eve: les ´el`eves chargent leurs programmes sur un serveur, accessible aux MdC (pri`ere de se souvenir de son mot de passe au TD1! - mot de passeenex)

Fig.1 Les TDs sont avant tout fun

(12)

Architecture des ordinateurs

A l’origine, architecture de von Neumann (1940) (voire d’Harvard)

En vrai

unit´e arithm´etique et logique (ALU): op´erations de base, aid´e d’une unit´e flottante (FPU)

unit´e de contrˆole: s´equen¸cage des op´erations m´emoire cache, registres du processeur

bus de donn´ees et d’instructions, entr´ees/sorties...

(13)

Architecture, en bref...

Et en un peu plus moderne

plusieurs coeurs, plusieurs FPU, plusieurs niveaux de cache (L1, L2...)

ex´ecution sp´eculative, pipelines d’instructions etc.

(14)

Le tout dans un syst` eme

Vision “logique” d’une architecture:

Des applications programm´ees - g´en´eralement dans un langagede haut niveau, compil´e

Au dessus d’un syst`eme d’exploitation...

permettant de tirer partie du mat´eriel

(15)

Syst` eme d’exploitation (OS)

Le syst`eme d’exploitation permet de manipuler le mat´eriel, au travers d”’abstrations”

Diff´erents composants

noyau: ordonnance les processus, leur accorde de la m´emoire pilotes (drivers): g`ere le(s) mat´eriel(s) - sont souvent activ´es

par des interruptions

interface utilisateur: textuelle (dans unterminal, oushell) ou graphique (syst`eme de fenˆetrage, menus etc.)

processus utilisateurs

(16)

Syst` eme d’exploitation

G`ere g´en´eralement

la m´emoire vive, entre les diff´erentsutilisateurset les diff´erentsprocessus

la m´emoire de masse(disques...) entre les diff´erents utilisateurs, voire groupes d’utilisateurs

communications avec le monde ext´erieurs: ports physiques, sockets r´eseau etc.

Exemple: en salle TD

Network File System (NFS): tous les fichiers sont accessibles pour un utilisateur depuis n’importe quel ordinateur

Organisation arborescente des fichiers: r´epertoires et fichiers,

mais aussi liens symboliques etc.

(17)

Quelques syst` emes d’exploitation

MacOS (1984-)

Windows et variantes (1981-) Unix (1969-1973-)

BSD (Berkeley), SunOS (Stanford), Bell-Labs etc.

Linux 1991

On utilise ici Linux, qui est utilis´e aussi bien dans les t´el´ephones portables (Android...) que dans les super-calculateurs (plus de 90%

en utilisent une variante ou une autre).

(18)

Langages de programmation

Les langages de programmation sont `a la crois´ee de la linguistique et des math´ematiques car:

ils doivent ˆetre bien d´efinis formellement (syntaxe non ambigue, s´emantique claire) pour ˆetre traitables par une machine

ils doivent ˆetre lisibles par un ˆetre humain...

Permettent de programmer des processus, applications, voire mˆeme des syst`emes d’exploitation (ex. Unix, en C).

On peut faire appel `a des librairies qui communiquent

directement avec le syst`eme d’exploitation (appels syst`emes), pour contrˆoler au mieux, ou exploiter, le mat´eriel sous-jacent.

Exemple: affichage en JAVA (package System) System . o u t . p r i n t ( x ) ;

System . o u t . p r i n t l n ( ) ; System . o u t . p r i n t l n ( x ) ;

Mais aussi en d’autres domaines! latex pour ce document, VHDL/System C pour les circuits ´electroniques, SBML pour les

18

(19)

Un tour d’horizon des langages

Imp´eratifs

Algol (1958-60-78), Cobol (1959), Fortran (1954-77-90-...), PL/I (1964), Basic (1965), Pascal (1970), C (1970), Java (1995), Ada (1983, 1995...)...

Assembleur(s)...

Objet

C++ (1983)...

Java: aussi imp´eratif

OCAML (1996): aussi fonctionnel R´eactifs

Lustre (1983)

(20)

Un tour d’horizon des langages

D´eclaratifs Fonctionnels

LISP/Scheme (1958/1975)

CAML (1985), SML/NJ (1990/1997), Haskell (1990), OCAML (1996)...

Programmation Logique Prolog (1972)..

Programmation par contraintes etc.

Curieux...

APL 1957-67, Forth 1960 etc.

Le tout pouvant avoir des extensions ou des traits parall`eles, distribu´es etc.

On verra dans ce cours des traitsimp´eratifs(cours 1 en

particulier),orient´es objets (cours 4 en particulier),fonctionnels (cours 8, 9 en particulier),r´eactifs (cours 10).

(21)

Un peu de vocabulaire utile par la suite...

Syntaxe

Les symboles, et la grammaire utilis´ee pour programmer.

S´emantique

Le mod`ele d’ex´ecution (concret), mais aussi de fa¸con plus abstraite, n’importe quel “mod`ele” math´ematique, donnant un

“sens” `a la syntaxe.

Algorithmique

Mani`ere de calculer afin de r´esoudre un probl`eme; l’impl´ementation d’un algorithme dans un langage est le programme d´eduit de l’algorithme. Notions de complexit´e algorithmique.

Le cours est centr´e sur ces trois concepts

(22)

Compilateurs, interpr´ eteurs

Un langage de haut-niveau doit, pour ˆetre ex´ecut´e, soit ˆetre compil´e c.-a.d. transform´e en code ex´ecutable, binaire, ou venir avec un interpr´eteur

i n t main ( ) { i n t x ; x = 0 ; r e t u r n x ; }

gcc -S

−→

. t e x t . g l o b l m a i n

m a i n : LFB2 :

p u s h q %r b p LCFI0 :

movq %r s p , %r b p LCFI1 :

. . .

. a s c i i ”zR\0 ” . b y t e 0 x1

gcc -o −→

0 0 0 0 0 0 0 f a c f f e e d 0007 0100 0003 8000 0002 0000

0 0 0 0 0 2 0 000 b 0000 05 b0 0000 0085 0000 0000 0000

0 0 0 0 0 4 0 0019 0000 0048 0000 5 f 5 f 4150 4547 455 a

0 0 0 0 0 6 0 4 f 5 2 0000 0000 0000 0000 0000 0000 0000

. . .

Compilation: binaire d´ependant de l’architecture! (mais optimis´e)

(23)

Compilation s´ epar´ ee, librairies etc.

Compilation s´epar´ee

Un programme peut-ˆetre d´ecompos´e en de multiples fichiers (.java,.c),

On compile les fichiers un `a un (avec les d´eclarations des fonctions utiles, mais pas forc´ement avec le code) Edition de liens (”link”)

Permet de prendre le r´esultat de la compilation s´epar´ee et d’en faire un fichier unique ex´ecutable (en C, pas en Java o`u les fonctions externes sont charg´ees dynamiquement)

Moteur d’ex´ecution (”Runtime”)

Tout l’environnement pour ex´ecuter le programme compil´e (libc en C,JREincluant la JVM en Java)

(24)

En Java

Compilation en bytecode

javac fichier.java produit un bytecodeProg.class, ex´ecutable dans une machine virtuelle Java (JVM), par java Prog:

c l a s s Prog { p u b l i c s t a t i c

v o i d main ( . . . i n t x ;

x = 0 ; } }

javac

−→

C o m p i l e d f r o m ” f i c h i e r . j a v a ” c l a s s s i m p l e e x t e n d s . . . P ro g ( ) ;

Code : 0 : a l o a d 0

1 : i n v o k e s p e c i a l . . . 4 : r e t u r n

p u b l i c s t a t i c v o i d main ( . . . Code :

0 : i c o n s t 0 1 : i s t o r e 1 2 : r e t u r n }

Possibilit´e de compiler ´egalement en binaire (natif) - de mˆeme en Caml (ocamlc/ocamlopt)

(25)

Structure simplifi´ ee des programmes (Java)

c l a s s Prog {

s t a t i c T1 x1 = t 1 ; . . .

s t a t i c Tn xn = t n ; s t a t i c . . . f 1 ( . . . ) . . . s t a t i c . . . f p ( . . . ) . . .

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { . . . } }

main

fonction sp´eciale: c’est celle qui estle point d’entr´ee`a l’ex´ecution.

en argument, elle contient tous les arguments pass´es`a la ligne de commande:

java Prog premierarg deuxiemearg troisiemearg

(26)

Le noyau imp´ eratif

Dans pratiquement toutes les approches, cinq constructions

D´eclaration Affectation S´equence Test Boucle

(27)

Notion de variable

Avant de d´emarrer

Notion informatique un peu diff´erente de la notion math´ematique:

Math´ematiques: variables quantifi´ees, le nom importe peu (∀x,P(x),∃x,P(x)), seul le lien avecP importe...

Informatique: abstraction d’unelocation emoire (ou adresse emoire)

x: 8 y: 1 z: 6 t: 3

Permet en premier lieu de stocker des calculs interm´ediaires, de les r´eutiliser etc.

Plus profond que cela: pour effectuer certaines tˆaches en un temps raisonnable, il est n´ecessaire d’occuper de la m´emoire (complexit´e en temps et en espace...).

(28)

Types

Notion de type

D´ecrit et structure un ensemble de valeurs possibles (comme R,N,R2 etc.)

Types ´el´ementaires (valeurs simples), types compos´es (tableaux, enregistrements etc.)

Bien plus profond que cela (cours 2, 3, 4, 8...) Types ´el´ementaires

int: nombres entiers compris entre −231 et 231−1; types similaires, byte,short,long, (et en C: long long...) boolean (false,true) - pas en C

float, type similaire double char: ex. ’g’

(29)

Une premi` ere remarque sur le codage

Codage et affichage des entiers

Unint est cod´e sur 32 bits, donc en base 2...(signe cod´e par compl´ementation)

Doncx=19 est cod´e par le mot sur 32 bits:

00000000000000000000000000010011

On peut jongler avec la repr´esentation binaire, d´ecalage `a gauche: 19<<1 (...100110=38), `a droite 19>>1 (...1001=9), masquage (&,|) etc.

Affichage possible (System.out.print()) en d´ecimal, octal ou hexad´ecimal

(30)

Codage

Codage et affichage des flottants

Diff´erent des r´eels! pr´ecision finie: mantisseen base 2, exposant en base 2, sur un nombre fini de bits... (cf. norme IEEE 754)

Attention: pas associativit´e de l’addition, multiplication etc.

(erreurs d’arrondi), absorptions, cancellations...:

f l o a t x , y ; x = 1 . 0 f ;

y = x + 0 . 0 0 0 0 0 0 0 1 f ; −→ x et y ont la mˆeme

valeur!

(31)

Un grand classique (Kahan-Muller)

f l o a t x0 , x1 , x2 ; x0 = 1 1 . / 2 ;

x1 = 6 1 . / 1 1 ;

f o r ( i =1; i<=N ; i ++) { x2 =111

(1130−3000/ x0 ) / x1 ; x0=x1 ;

x1=x2 ; }

Produit la suite: 5.5902;

5.6333; 5.6721; 5.6675;

4.9412; -10.5622; 160.5037;

102.1900; 100.1251; 100.0073;

100.0004; 100.0000; 100.0000;

100.0000; ...(stable)

La vraie limite dans les r´eels est 6!

(32)

Ou beaucoup plus simple...!

f l o a t x0 , x1 ; x0 = 7 . / 1 0 ;

f o r ( i =1; i<=N ; i ++) { x1 = 11∗x0 7 ; x0 = x1 :

}

Produit la suite 0.7000;

0.7000; 0.7000; 0.6997;

0.6972; 0.6693; 0.3621; - 3.0169; -40.1857; -449.0428;

-4946.4712; -54418.1836;

-598607.0000; -6584684.0000;

diverge vers −∞...

Alors que dans les r´eels c’est la suite constante ´egale `a 0.7!

(33)

Variables et expressions

Variable: mot d’une ou plusieurs lettres (r`egles syntaxiques...), ex.

x,y,resultat1 etc.

Expression: form´ee `a partir de constantes et de variables avec des op´erations (+, -, *, / etc.). R`egles de priorit´e.

Ex. d’expression en Java 3+y5 ;

(34)

En C et Caml

C

x=3+y∗5 ;

(en fait, presque pas de diff´erence pour le noyau imp´eratif, entre C et JAVA)

Caml

x :=3+(! y )∗5

(`a part la syntaxe, notion de ! plus tard!)

(35)

D´ eclaration

D´eclaration/allocation/affectation

Avant de pouvoir utiliser une variable, pour faire des calculs, il faut pouvoir la d´eclarer

d´eclarer = donner un nom, et un type (´eventuellement) puis r´eserver un emplacement m´emoire

On peut g´en´eralement d´eclarer, allouer et initialiser en mˆeme temps une variable (attention en C n´eanmoins, quelques r`egles syntaxiques)

(36)

Exemples simples

Java i n t x =3;

C

i n t x =3;

Caml

l e t x= r e f 3 i n p ; ;

Plus compliqu´e car notion de port´ee: xconnu uniquement dans p

(37)

Variables locales/globales, notion de port´ ee

Les langages de programmation (“haut-niveau”) sont structur´es, notion de bloc.

Une variable peut ˆetre connue dans un bloc, mais pas `a l’ext´erieur...

Permet d’appliquer une m´ethodologie saine de codage;

structurer le code, et cloisonner les informations.

Plus en cours 2...

(38)

Instructions

Une instruction est un mot simple dans un langage de programmation

Qui fait une action;6= expression

Exemples (qui suivent): affectation, test, boucle etc.

Pour la clart´e, en TD, utilisez l’indentationautomatique et

´

ecrivez une seule instruction par ligne!

(39)

S´ emantique de l’affectation

x = e x p r ; Par exemple:

x = 3+y5 ;

Lit les valeurs de variables dont d´epend l’expression (en partie, et en g´en´eral dans les registres du processeur)

Calcule l’expression (avec ou sanseffet de bord) Remplace la valeur contenue dans xpar celle calcul´ee Remarque importante

L’affectation est aussi une expression...doncx=expr a une valeur, celle de l’expression...

(40)

S´ emantique ´ el´ ementaire (premi` ere approximation)

Etat m´emoire et fonctions de transfert

A chaque variable v ∈Var, on veut associer une valeur:

ρ: Var→Val

o`u Val est l’ensemble des valeurs machines (Zici pour simplifier)

Env est l’ensemble des environnements (“concrets”)

A chaque expression arithm´etique e ∈AExpr, on veut associer une valeur:

[[e]]ρ∈Val de l’expression e dans l’environnementρ

A chaque instruction du programmep (et donc au programme lui-mˆeme), on veut associer un environnement [[p]]ρ, apr`es ex´ecution, dans l’environnementρ

(41)

S´ emantique ´ el´ ementaire des expressions

R`egles inductives

Constantes n∈Val: [[n]]ρ=n Variables v ∈Var: [[v]]ρ=ρ(v)

Addition de deux sous-expressions a0,a1 ∈AExpr:

[[a0+a1]]ρ= [[a0]]ρ+ [[a1]]ρ [[a0−a1]]ρ= [[a0]]ρ−[[a1]]ρ [[a0∗a1]]ρ= ([[a0]]ρ) ([[a1]]ρ) etc.

On l’appelle s´emantique d´enotationnelle (ou compositionnelle)

(42)

Exemple

Dans l’environnementρ o`u ρ(y) = 3:

[[3∗y+ 5]]ρ = [[3∗y]]ρ+ [[5]]ρ

= [[3∗y]]ρ+ 5

= ([[3]]ρ) ([[y]]ρ) + 5

= 3∗3 + 5

= 14 Ouf!

(43)

Attention: tout ceci sans effet de bord !

Effet de bord Permis en JAVA:

i n t x = ( y =1)+1;

Renvoie l’environnement: ρ avecρ(y) = 1, ρ(x) = 2.

Pas permis dans notre s´emantique ´el´ementaire...

(44)

S´ emantique ´ el´ ementaire, suite

Affectation

Pour v ∈Var; e ∈AExpr, etρ∈Env:

[[v =e]]ρ=ρ[[[e]]ρ/v]

O`u, pouru,v∈Var etn ∈Val:

ρ[n/v](u) =

ρ(u) si u 6=v

n si u =v Plus (d’instructions) plus tard!

(45)

Exemple

Interpr´etation d’une affectation simple

Consid´eronsx = 3∗y+ 5 dans l’environnement ρtel queρ(y) = 3 etρ(x) = 1, on obtient l’environnementσ avec

σ(u) =

ρ(u) = 3 si u =y

[[3∗y+ 5]]ρ= 14 si u =x

(46)

Cas des tableaux

Tableaux?

Cas particulier de type produit(cours 2)

Ensemble de variables index´e par des indices, 1D, 2D, ...

Dans ce cours, juste 1D (=vecteur) D´eclaration

La taille n’est pas connue, aucun ´el´ement n’est encore allou´e i n t[ ] t a b ;

tab

(47)

Tableaux, suite

Allocation

On fixe la taille une fois pour toute, les ´el´ements sont allou´es

t a b = new i n t[ 1 0 ] ;

tab

? |? |. . .|? (en fait, valeurs par d´efaut en Java, ici ?=0)

(48)

Tableaux, fin

Affectation

Lesindices vont de 0 `a 9 (=tab.length-1) ici

t a b [ 0 ] = 3 ;

tab

3|? |. . . |?

D´eclaration/allocation/affectation On peut aussi faire les deux en mˆeme temps! :

i n t[ ] t a b = {3 , 4 , 5 , 6 , 7 , 8 , 9 , 1 0 , 1 1 , 1 2};

(49)

Variables finales

Variables ne pouvant ˆetre affect´ees qu’une fois (constC) f i n a l i n t x =4;

y=x +3;

Correct

f i n a l i n t x =4;

x =3;

Incorrect

(50)

Variables mutables

Caml

Explication du ! en Caml:

l e t x=4 i n y=x+3

Version finale

l e t x= r e f 4 i n y =! x+3

Version mutable

(51)

S´ emantique ´ el´ ementaire, suite

N´ecessit´e d’ajouter les “locations” m´emoire

tabest en fait unpointeur(our´ef´erence, ouadressem´emoire) De mˆeme on veut distinguer variables mutables et finales...

Il nous faut un environnement un peu plus compliqu´e...:

Soit Loc l’ensemble des adresses m´emoires (num´erotation des mots 32 ou 64 bits dans la m´emoire de quelques Go de votre ordinateur...), sous-ensemble deN

(52)

S´ emantique ´ el´ ementaire, suite

N´ecessit´e d’ajouter les “locations” m´emoire

tabest en fait unpointeur(our´ef´erence, ouadressem´emoire) De mˆeme on veut distinguer variables mutables et finales...

Il nous faut un environnement un peu plus compliqu´e...:

Soit Loc l’ensemble des adresses m´emoires (num´erotation des mots 32 ou 64 bits dans la m´emoire de quelques Go de votre ordinateur...), sous-ensemble deN

Les environnements sont maintenantρ: Var(ValLoc)

(53)

S´ emantique ´ el´ ementaire, suite

N´ecessit´e d’ajouter les “locations” m´emoire

tabest en fait unpointeur(our´ef´erence, ouadressem´emoire) De mˆeme on veut distinguer variables mutables et finales...

Il nous faut un environnement un peu plus compliqu´e...:

Soit Loc l’ensemble des adresses m´emoires (num´erotation des mots 32 ou 64 bits dans la m´emoire de quelques Go de votre ordinateur...), sous-ensemble deN

En fait, plutˆotρ: (VarLoc)(ValLoc), ou mˆeme ρ: (VarLoc)(ValVarLoc) plus tard

Var repr´esente les adresses allou´ees statiquement, enpile (les eclarations de variables scalaires...), Loc repr´esente les adresses allou´ees dynamiquement, en g´en´eral sur letas(on y vient plus tard)

On noteraadrt pour l’adresset (pas de confusion avec Val!)

(54)

Pourquoi?

En premi`ere approximation

l e t x=4 i n y=x+3

Environnement final: ρ(x) = 4, ρ(y) = 7

l e t x= r e f 4 i n y =! x+3

Environnement final: ρ(x) = adru,ρ(adru) = 4,ρ(y) = 7 Dans le cas mutable,x contient une valeur de type “adresse”

(dans Loc) dans le cas final,x contient une valeur “scalaire”

On revient la-dessus (pointeurs C/r´ef´erences Caml/objets Java) `a partir du cours 3

(55)

Retour sur les tableaux

En Java D´eclaration:

i n t [ ] t a b ; ρ(tab) =⊥

pas de valeur connue! (c.a.d. d’adresse allou´ee au tableau) Allocation:

t a b = new i n t[ 1 0 ] ; ρ(tab) =adrt

adrt est moralementl’adresse de la premi`ere case m´emoire allou´ee pourtab

Sont cr´ees ´egalement les adressesadrt+1,adrt+2,. . .,adrt+9, mais pas les valeurs correspondantes: ρ(adrt) =⊥,

ρ(adrt+1) =⊥,. . .,ρ(adrt+9) =⊥

(56)

S´ emantique de l’affectation de tableaux

Tableaux 1D!

Pourtab∈Var,i ∈N,e∈AExpr, etρ∈Env:

[[tab[i] =e]]ρ=ρ[[[e]]ρ/(ρ(tab) +i)]

Calcul dans une expression e ∈AExpr

Il faut rajouter dans les expressions arithm´etiques le fait de lire une entr´ee d’un tableau:

[[tab[i]]]ρ=ρ(ρ(tab) +i)

(on lit l’adresse detab, on la d´ecale de i, puis on lit la valeur `a cette adresse - ici on suppose qu’on n’a que des tableaux 1D de valeurs scalaires!)

(57)

S´ emantique de l’affectation de tableaux

Exemple

i n t [ ] t a b = new i n t[ 1 0 ] ;

t a b [ 0 ] = 0 ; t a b [ 1 ] = 1 ; t a b [ 2 ] = 2 ; . . . t a b [ 9 ] = 9 ;

L’environnement

Ont ´et´e cr´ees les adresses adrt `aadrt+9 et ρ(tab) =adrt

On termine avec en plus ρ(adrt+i) =i pour i = 0, . . . ,9

(58)

La s´ equence d’instructions

Java

x =1; y=x +1;

On ex´ecute x=1puis y=x+1.

C

x =1; y=x +1;

Caml

l e t x=1 i n l e t y=x+1 i n p ; ; p ; q

(59)

S´ emantique ´ el´ ementaire, suite

Composition!

PourP et Q deux programmes compos´es s´equentiellement:

[[P;Q]]ρ= [[Q]] ([[P]]ρ)

C’est pr´ecis´ement cette r`egle qui fait qu’on appelle cette s´emantique,compositionnelle!

C’est ce que l’on a fait implicitement jusqu’`a pr´esent...

(60)

Conditionnelles

Java, C i f ( b )

p1 e l s e p2

i f ( x==0) y=−1;

e l s e y =1;

On calcule la valeur bool´eenne deb; si c’est true on ex´ecute p1, si c’estfalse on ex´ecute p2.

Attention erreur courante: if (x=true) p1 else p2fera

toujoursp1, alors qu’on voulait ´ecrire a priori if (x==true) ...!

Caml

i f b t h e n p1 e l s e p2

(61)

Tests bool´ eens

Java, C, Caml

&&, | | , ( e x p r 1==e x p r 2 ) , . . .

(62)

S´ emantique ´ el´ ementaire, suite

Les expressions bool´eenes permises forment l’ensemble BExpr; les valeurs Val sont suppos´ees comprendre ´egalement les bool´eens true,false:

S´emantique des expressions bool´eenes [[true]]ρ=true

[[false]]ρ=false

Si a0,a1∈AExpr, [[a0 ==a1]]ρ=

true si [[a0]]ρ= [[a1]]ρ false sinon

Si a0,a1∈AExpr, [[a0 <a1]]ρ=

true si [[a0]]ρ <[[a1]]ρ false sinon

De mˆeme poura0 <=a1 etc.

(63)

S´ emantique ´ el´ ementaire, suite

Conditionnelle

[[if b p1 else p2]]ρ=

[[p1]]ρ si [[b]]ρ=true [[p2]]ρ si [[b]]ρ=false

(64)

It´ eration - la boucle

Java, C w h i l e ( b )

p

w h i l e ( x<1000) x=x +2;

Caml

w h i l e b do p ;

best lacondition de terminaison

(65)

S´ emantique

La boucle est unraccourci pour tous ses d´eroulements finis (approximations successives):

w h i l e ( b ) p

i f ( b ) { p }

(66)

S´ emantique

La boucle est unraccourci pour tous ses d´eroulements finis (approximations successives):

w h i l e ( b ) p

i f ( b ) { p

i f ( b ) { p } }

(67)

S´ emantique

La boucle est unraccourci pour tous ses d´eroulements finis (approximations successives):

w h i l e ( b ) p

i f ( b ) { p

i f ( b ) { p

i f ( b ) { p } } }

(68)

S´ emantique

La boucle est unraccourci pour tous ses d´eroulements finis (approximations successives):

w h i l e ( b ) p

i f ( b ) { p

i f ( b ) { p

i f ( b ) { p

i f ( b ) { p } } } }

. . .et ainsi de suite. . .

(69)

Terminaison

Les approximations successives forment une suite finie quand la condition de terminaison devient vraie en un temps fini.

Toutes les boucles ne sont pas finies:

i n t x =3;

w h i l e ( x<=1000) x =2;

Ne termine pas!

(70)

Prouver la terminaison

Difficile en g´en´eral!

Par exemple: la terminaison du code suivant reposerait sur une preuve de la conjecture de Syracuse:

w h i l e ( x > 1 ) { i f ( x % 2 == 0 )

x = x / 2 ; e l s e

x = 3x +1; }

3, 10, 5, 16, 8, 4, 2, 1 4, 2, 1

5, 16, 8, 4, 2, 1

6, 3, 10, 5, 16, 8, 4, 2, 1 ...

(71)

S´ emantique ´ el´ ementaire, suite

Valeur ind´efinie

Toutes les boucles ne terminent pas!

w h i l e (t r u e) { . . . }

[[P]]ρ ne peut donc toujours renvoyer unσ ∈Env; seulement fonction partielle ou fonction totale `a valeur dans Env∪ {⊥}!

En fait...les ´el´ements de Env sont d´ej`a des fonctions partielles ρ: (Var∪Loc)→(Val∪Loc) - on note

Env={ρ: (Var∪Loc)→(Val∪Loc∪ {⊥})}; par abus de notation ⊥ ∈Env l’environnement t.q. ∀x,⊥(x) =⊥ [[P]]ρ=⊥si P ne termine pas dans l’environnementρ!

S´emantique par approximations finies des boucles Principe...: limite d’une suite [[Pn]] des it´er´ees ni`eme de la boucle...

(72)

Pourquoi des fonctions?

Java, C

/∗ C a l c u l de x ∗/

. . .

i f ( x<0) s g n x =−1;

i f ( x==0) s g n x =0; e l s e s g n x =1;

. . .

/∗ C a l c u l de y ∗/

i f ( y<0) s g n y =−1;

i f ( y==0) s g n y =0; e l s e s g n y =1;

Et?

Pas pratique, redite, cause potentielle d’erreur

→ Structurer par des appels `a des fonctions!

Plus profond que cela...: r´ecursion et langages fonctionnels (Caml): “Functions as first-class citizens” (Christopher Strachey, ∼1960)

(73)

Fonctions et proc´ edures

Une fonction peut:

prendre en compte des donn´ees: arguments retourner une valeur: le retour de la fonction

effectuer une action (afficher quelque chose, modifier la m´emoire): effet de bord

Dans la plupart des langages, on indique le type des arguments et du retour de fonction (sauf en g´en´eral dans Caml, o`u il y a inf´erence de types - on y revient plus tard), par exempleint, floatetc.

Proc´edure: fonction sans retour de valeur

Ne pas retourner de valeur = retourner valeur dans un type vide

en Java, et C, mot cl´e void en Caml, type sp´ecial unit

(74)

Passage d’arguments

Java, (C)

s t a t i c i n t s i g n e (i n t x ) { i f ( x<0) . . .

(retour de fonction, apr`es...) Caml

l e t s i g n e x = i f ( x<0) t h e n . . .

Aussi fonctions pr´ed´efinies, par exemple paquetage(“module”,

“librairie”) de fonctions math´ematiques Math, en particulier, fonction racine carr´ee: Math.sqrt(...)

(75)

Appel de fonction/proc´ edure

Java, C

/∗ C a l c u l de x ∗/

. . .

s g n x = s i g n e ( x ) ; /∗ C a l c u l de y ∗/

. . .

s g n y = s i g n e ( y ) ; . . .

Remarque: les arguments d’une fonction sont ´evalu´es avant de d´emarrer le codede la fonction (on aurait pu faire signe(expr donnant x)): “passage par valeur”

Caml

. . . i n

l e t s g n x = s i g n e x i n . . . ; ;

(76)

Le retour de fonction

Java

s t a t i c i n t s i g n e ( [ f i n a l] i n t x ) {

i f ( x<0) r e t u r n −1;

i f ( x==0) r e t u r n 0 ; r e t u r n 1 ; }

(on revient surstatic plus tard) C

i n t s i g n e ( [c o n s t] i n t x ) { i f ( x<0) r e t u r n −1;

i f ( x==0) r e t u r n 0 ; r e t u r n 1 ; }

Caml

l e t s i g n e x = i f ( x<0) t h e n −1.0 e l s e i f ( x==0) t h e n 0 . 0 e l s e 1 . 0 ; ;

(pas besoin de d´efinir le type: inf´erence de types!)

(77)

S´ emantique de l’appel/retour de fonction

Java

s t a t i c i n t s i g n e (i n t x ) {

i f ( x<0) r e t u r n −1;

i f ( x==0) r e t u r n 0 ; r e t u r n 1 ;

}

return interrompt le d´eroulement de la fonction

(78)

S´ emantique de l’appel/retour de fonction

returninterrompt le d´eroulement de la fonction:

call signe(-3) signe(x)

return -1 x<0

return 0 x==0

return 1 yes

no yes

no

(79)

C’est tout pour aujourd’hui

La s´emantique des fonctions uniquement trait´ee dans le cours sur les langages fonctionnels (8, 9)

La prochaine fois

Passage par valeur/par r´ef´erence dans les fonctions Types produits

Bon TD!

(et pour ceux qui veulent approfondir, voir `a la biblioth`eque: “The formal semantics of programming languages, an introduction”, Glynn Winskel, MIT Press, 1993)

(80)

C’est tout pour aujourd’hui

La s´emantique des fonctions uniquement trait´ee dans le cours sur les langages fonctionnels (8, 9)

La prochaine fois

Passage par valeur/par r´ef´erence dans les fonctions Types produits

Bon TD!

(et pour ceux qui veulent approfondir, voir `a la biblioth`eque: “The formal semantics of programming languages, an introduction”, Glynn Winskel, MIT Press, 1993)

Références

Documents relatifs

BioFix PR est un ciment pour application manuelle présenté dans un emballage contenant un sachet avec 40 g de poudre radio-opaque stérilisé à l'oxyde d'éthylène et une ampoule

Probl` eme Si on veut utiliser les listes de tout type librement dans PCF, il faut pouvoir parler du type list(α) o` u α est une variable de type. Comment avoir des termes de

Le syst` eme de types de PCF avec r´ ef´ erences ne respecte plus le th´ eor` eme de progression. Aussi le cas de l’h´ eritage dans Eiffel, ou des tableaux

1) On compare tout d’abord les temps de d´ etection observ´ es dans la situation NA et ceux observ´ es dans la condition AN. A l’aide d’un test bilat´ eral de comparaison

Une approche na¨ıve pour aborder cette question consiste ` a inf´ erer un r´ eseau diff´ erent dans chacune des conditions et ensuite de comparer les deux r´ eseaux mais cette

En vous souhaitant une bonne réception de ce document important pour la poursuite des études de votre enfant et en vous demandant de nous faire parvenir pour le 25 mars 2019 au

En vous souhaitant une bonne réception de ce document important pour la poursuite des études de votre enfant et en vous demandant de nous faire parvenir avant le 25 mars 2019 le

3. Tout intervalle [a, b] ne rencontrant pas A ne contient qu’un nombre fini des u n. grande) valeur d’adh´ erence. de la suite (u