Les langages
Un langage n'est pas son implémentation
Un langage de programmation n'est pas couplé à son implémentation !
La plupart du temps, les gens qui font le langage publient une définition du langage,
qui est un document qui décrit précisément ce que les implémentations du langage doivent implémenter.
Par exemple, les specs de go, ou le manuel de ref de lua.
Puis les gens qui font le langage font une implémentation officielle du langage,
mais ça veut pas dire que c'est la seule implémentation qui existe ...
Différents langages pour différents usages
Certains langages de programmation sont dis "à usage général" (General-purpose programming language).
Ces langages permettent d'utiliser la machine à son plein potentiel, et on peut les utiliser pour faire tout ce qui est possible.
Ils sont :
- le golang,
- le python,
- le javascript (via nodejs),
- le php,
- le java,
- le perl,
- le ruby,
- le C,
- ...
D'autres langages sont dis "dédié" (Domain-specific language).
Ils sont limités à 1 usage particulier.
Ils sont :
- le css,
- le sql,
- ...
On se retrouve parfois avec des langages qui ne sont même pas des langages de programmation,
comme l'html (et l'xml en général) qui sont des langages de balisage (markup langages),
ou les fichiers de config qui sont généralement écrits dans des format de données lisibles par les langages de programmation
(le json, encore le xml, le yaml, ...)
Méthodes d'execution
Il y a 2 manières principales pour implémenter un langage et donc executer du code :
- en interprété,
- en compilé
interprété
Le code est simplement envoyé à un interpréteur qui execute le programme,
mais il faut donc avoir l'interpréteur d'installé sur la machine.
Des langages interprétés sont le JS, PHP, lua, bash, ...
compilé
Le programme est compilé en un executable binaire,
et peut donc être lancé sans interpréteur.
C'est la solution qui permet l'execution la plus rapide,
mais il faut que le programme ai été compilé pour l'architecture et l'os de la machine qui le fait tourner.
D'où le fait que quand t'installe un programme, comme par exemple un jeu sur itch,
il y a une version différente proposée au téléchargement pour chaque os et architecture ...
Des langages comme ça c'est le go, le c, ...
autres ...
Certains langage sont compilés en une forme intermédiaire qui se fait interpréter. Il n'y a que le java qui fonctionne vraiment comme ça, c'était apparemment une révolution à l'époque.
Il y a aussi la transcompilation (transpilation ?),
qui consiste à compiler un langage en un autre langage.
Le plus connu qui fait ça, c'est le typescript.
Si jamais t'entends parler de JIT,
c'est une technique qu'utilisent certain interpréteurs pour être plus rapides.
Du point de vue du programmeur, c'est la même chose qu'un langage interprété.
La bibliothèque standard et les builtins
Une bibliothèque standard, parfois abrégée en stdlib,
est une collection de modules qui sont toujours disponibles dans une implémentation du langage.
Ils sont quasi tout le temps utilisés, parce qu'ils implémentent des trucs basiques,
genre intéragir avec des fichiers, envoyer des trucs vers le std output, ...
Parfois, la "collection de modules qui sont toujours disponibles" s'appel pas une bibliothèque standard,
mais genre "api", par exemple l'api de nodejs,
mais le concept reste toujours le même.
Les builtins sont comme la librairie standard,
mais les packages de la librairie standard doivent être importés explicitement dans le code,
tandis qu'un builtin peut être directement appelé sans importation, puisqu'il est built-in.
Les package managers
Disons que t'as besoin d'un truc qu'est pas implémenté dans la stdlib.
C'est là qu'un package manager intervient !
Ca permet d'installer et gérer des packages.
Un package peut être un peu n'importe quoi,
genre des librairies, l'entièreté de mobydick de Herman Melville, ...
Quasi tout les langages ont leurs propres package manager. npm pour node, composer pour php, go get pour go, ...
Les distros linux ont aussi tous un package manager,
mais ceux des langages permettent plus d'installer des librairies pour un projet,
et ceux des distros permettent plus de gérer le système et d'installer des programmes à part entière.
Frameworks et librairies
Les packages sont quasi tout le temps soit des frameworks soit des librairies.
La différence entre framework et librairie est celui qui appel l'autre.
Une framework appel ton code.
Ca peut être via un callback, une fonction variable que tu passes à la framework, ...
Ton code appel un librairie.
Une librairie ça peut être par exemple quelques fonctions pratiques,
mais c'est toi qui appel les fonctions, pas l'inverse.
Techniques
On peut généralement retrouver les mêmes concepts et techniques de programmation à travers tout les langages !
Par exemple, les fonctions anonymes ou fonctions variables, les closures, la récursivité,
des structures de données comme les maps, les listes, ...
Ce qui change vraiment à travers les langages,
c'est la syntaxe, l'api de la librairie standard,
l'approche sur certains concepts comme l'oop ou la programmation concurentielle,
le typage strict ou dynamique ...
Ressources
Tout les langages ont un site web.
Sur ce site web, il y aura toujours une documentation,
qui décrit la syntaxe du language et l'api de sa stdlib.
Cette documentation est simplement vitale pour programmer.
Si tu galère à la trouver, va sur la page wikipédia du language,
puis regarde à droite, il y a toujours un champ "website".
Tu va sur leur site, puis tu cherches là ou il y a marqué "doc", "reference", "manuel", "api" ...