Compilation : Processus qui transforme le code source en code machine avant l'exécution. Interprétation : Exécution directe du code source ligne par ligne.
- Identifier le processus d'exécution du langage
- Comparer les performances et la portabilité
- Évaluer les avantages et inconvénients
- Classer les langages selon leur méthode
| Compilation | Interprétation |
|---|---|
| Code source → Compilateur → Code objet → Exécution | Code source → Interprète ligne par ligne |
| Plus rapide à l'exécution | Plus lent à l'exécution |
| Moins portable | Plus portable |
| Erreurs détectées avant exécution | Erreurs détectées pendant exécution |
La compilation se fait en une phase distincte avant l'exécution
Les langages compilés sont généralement plus rapides à l'exécution
Les langages interprétés sont plus faciles à transporter sur différentes plateformes
Compilation : exécution rapide, portabilité limitée. Interprétation : portabilité élevée, exécution plus lente.
• Langages compilés : C, C++, Rust, Go
• Langages interprétés : Python, JavaScript, PHP
• Langages mixtes : Java (compilation vers bytecode puis interprétation)
Paradigme de programmation : Approche fondamentale pour structurer et organiser le code, définissant la manière de penser et de résoudre les problèmes.
| Paradigme | Caractéristiques | Exemples de langages |
|---|---|---|
| Impératif | Séquence d'instructions, état mutable | C, Python, JavaScript |
| Objet | Classes, objets, encapsulation | Java, C++, Python |
| Fonctionnel | Fonctions pures, immutabilité | Haskell, Lisp, OCaml |
| Logique | Raisonnement logique, faits et règles | Prolog |
Le paradigme impératif est le plus courant, basé sur des instructions séquentielles
Regroupe données et comportements dans des classes et objets
Met l'accent sur les fonctions et l'immutabilité
Chaque paradigme offre une approche différente pour résoudre les problèmes informatiques.
• Langages polyvalents : Supportent plusieurs paradigmes (Python, JavaScript)
• Choix du paradigme : Dépend du problème à résoudre et du contexte
• Flexibilité : Langages modernes combinent souvent plusieurs paradigmes
Typage : Système qui attribue des types aux données pour garantir la cohérence et la sécurité du programme.
| Typage statique | Typage dynamique |
|---|---|
| Types vérifiés à la compilation | Types vérifiés à l'exécution |
| Moins d'erreurs à l'exécution | Plus de flexibilité |
| Plus verbeux | Plus rapide à écrire |
| C, Java, C++, TypeScript | Python, JavaScript, Ruby |
Les types sont déclarés explicitement et vérifiés avant l'exécution
Les types sont déterminés pendant l'exécution
Le typage statique offre plus de sécurité, le dynamique plus de flexibilité
Le choix du système de typage affecte la sécurité, la performance et la flexibilité du développement.
• Typage fort : Restrictions strictes sur les conversions de types
• Typage faible : Conversions implicites autorisées
• Inférence de type : Le compilateur déduit les types automatiquement
Domaine d'application : Domaine spécifique pour lequel un langage est particulièrement adapté en raison de ses caractéristiques et bibliothèques.
| Domaine | Langages adaptés | Raisons |
|---|---|---|
| Web | JavaScript, PHP, Python, Ruby | Frameworks, intégration serveur |
| Système | C, C++, Rust | Contrôle bas niveau, performance |
| Data Science | Python, R, Julia | Bibliothèques spécialisées |
| Mobile | Swift, Kotlin, Java, Dart | SDK natifs, performance |
| Jeux vidéo | C++, C#, Lua | Performance, moteurs de jeu |
Chaque domaine a des exigences spécifiques (performance, sécurité, rapidité de développement)
Les langages sont choisis selon leurs forces dans chaque domaine
L'existence de bibliothèques et frameworks influence le choix
Le choix du langage dépend du domaine d'application et des contraintes spécifiques.
• Écosystème : Disponibilité de bibliothèques et outils
• Performance : Besoins en rapidité et ressources
• Expertise : Compétences de l'équipe de développement
Niveau d'abstraction : Degré de proximité avec le matériel, déterminant la complexité et le contrôle sur les ressources.
| Niveau | Caractéristiques | Exemples |
|---|---|---|
| Bas niveau | Proche du matériel, grand contrôle | Assembleur, C |
| Haut niveau | Abstraction importante, facilité d'usage | Python, Java, JavaScript |
| Intermédiaire | Équilibre abstraction/performance | C++, Rust |
Les langages bas niveau offrent plus de contrôle mais sont plus complexes
Plus d'abstraction signifie moins de contrôle mais plus de commodité
Le choix dépend des exigences en performance et de la complexité du projet
Le niveau d'abstraction influence la facilité d'utilisation et le contrôle sur le matériel.
• Langages système : Nécessitent un contrôle précis des ressources
• Applications rapides : Langages haut niveau pour développement rapide
• Équilibre : Langages modernes offrent des compromis entre abstraction et performance
- Performance : Besoin en rapidité et ressources
- Sécurité : Contraintes de sécurité et typage
- Portabilité : Nécessité de fonctionner sur plusieurs plateformes
- Facilité d'utilisation : Courbe d'apprentissage et productivité
- Écosystème : Disponibilité de bibliothèques et outils
- Il n'existe pas de langage universellement meilleur
- Le choix dépend du contexte et des contraintes spécifiques
- Les langages évoluent constamment avec de nouvelles fonctionnalités
- La polyvalence des développeurs est un atout précieux