CM3 Flashcards
Typage dynamique
pendant l’exécution
langages: Lisp, PHP, Python, JavaScript
Typage statique
au moment de la compilation après le lexing et l’analyse syntaxique
langages: C, Java, OCaml
Hybride
permettre les annotations de typage sur les langages typés dynamiquement
Langages: Python avec Pyright et JS avec TypeScript
Objectif 1 du typage (décidable)
Le système de typage doit être décidable:
* doit être déterministe
* doit pouvoir inférer le type des expressions de manière prévisible
qu’est ce que le système de typage doit être capable de détecter ?
détecter et signaler les incompatibilités de types dès que possible, idéalement lors de la compilation ou avant l’exécution
le système de typage peut être conçu pour détecter quoi ?
différents types d’erreurs, en fonction des besoins spécifiques du langage de programmation et du contexte d’utilisation
qu’est ce qu’il est important que le système de typage devient?
Il est important que le système de typage soit suffisamment flexible pour permettre l’écriture de programmes expressifs tout en garantissant la sureté et la cohérence de typage
les règles de typage informelle pour Mini-While
- les expressions peuvent être de type int ou bool
- les conditions des instructions if et while doivent être de type booléen
- + prend des opérandes de type int et retourne des résultats de type int
- < prend des opérandes de type int et retourne un résultat de type bool
- = fonctionne pour les variables de type int et bool
- les constantes entières sont de type int
Comment règles les problèmes des règles de typage informelle de Mini-While?
on utilise la spécification formelle
* qui définit le comportement et le typage du langage à l’aide de règles précises et sans ambiguïté, ce qui facilite l’écriture de code et de tests , ainsi que la vérification de la conformité du code aux spécifications
Expressions hybrides
impliquent des opérations entre des valeurs de types différents, comme additionner un flottant et un int
Comment OCaml gère les expressions hybrides?
Il les rejette car OCaml est statiquement typé avec un système de types strict et dit que les opérations doivent se faire entre des valeurs de même type.
Comment d’autres langages comme C, Python, Java gèrent les expressions hybrides?
- ils vont faire de la conversion implicite
- du coercion type
- l’AST peut être modifier pour insérer les conversions de type nécessaires