C'est surtout une coïncidence.
Les langages de programmation ont évolué au fil du temps et la technologie des compilateurs et des interprètes s'est améliorée. L'efficacité du traitement sous-jacent (c'est-à-dire le temps de compilation, le temps d'interprétation, le temps d'exécution, etc.) est également moins importante car les plates-formes informatiques traditionnelles ont gagné en puissance.
La syntaxe du langage n'avoir un impact - par exemple, Pascal a été très soigneusement conçu de sorte qu'il pourrait utiliser un seul compilateur passe - à savoir une passe sur la source et vous avez le code machine excutable. Ada, d'autre part, n'y a pas prêté attention, et les compilateurs Ada sont notoirement difficiles à écrire - la plupart nécessitent plus d'un passage. (Un très bon compilateur Ada que j'ai utilisé il y a de nombreuses années était un compilateur à 8 passes. Comme vous pouvez l'imaginer, il était très lent.)
Si vous regardez des langues anciennes comme Fortran (compilées) et BASIC (interprétées ou compilées), elles ont / avaient une syntaxe et des règles sémantiques très strictes. [Dans le cas de BASIC, ce ne sont pas des anciens factures de BASIC, vous devez revenir avant cela à l'original.]
D'un autre côté, en regardant d'autres choses plus anciennes comme APL (un tas d'amusement), cela avait une sorte de typage dynamique. Il a également été généralement interprété, mais pourrait également être compilé.
La syntaxe indulgente est difficile - si cela signifie que vous avez des choses facultatives ou que vous pouvez en déduire, cela signifie que le langage a une richesse suffisante pour pouvoir être éliminé. Là encore, BASIC a eu cela il y a de nombreuses années lorsque l'instruction "LET" est devenue facultative!
Bon nombre des idées que vous voyez maintenant (par exemple, la frappe sans type ou dynamique) sont en fait très anciennes - apparues pour la première fois dans les années 1970 ou au début des années 1980. La façon dont elles sont utilisées et les langues dans lesquelles ces idées sont utilisées ont changé et se sont développées. Mais fondamentalement, une grande partie de ce qui est nouveau est en fait de vieilles choses habillées de nouveaux vêtements.
Voici quelques exemples du haut de ma tête:
- APL: typage dynamique. Généralement interprété. Venu des années 60/70.
- BASIC: typage fort ou dynamique. Interprété ou compilé. 1970 et bien au-delà.
- Fortran: typage fort. Compilé. Années 1960 ou antérieures.
- Algol68: typage fort. Compilé. Années 60.
- PL / 1: typage fort. Compilé. Années 60.
- Pascal: typage fort. Compilé. Années 1970. (Mais dans les années 1980, il y avait des compilateurs P-System très similaires aux compilateurs JIT!)
- Certaines implémentations de Fortran et d'autres par DEC dans les premiers jours ont été partiellement compilées et partiellement interprétées.
- Smalltalk: frappe dynamique. Compilé en bytecode qui est interprété. Années 80.
- Prolog: plus d'étrangeté. Fonctionnel. Compilé (Turbo Prolog, n'importe qui?). Années 80.
- C: typage fort (ha ha). Compilé. Des années 60 ... aujourd'hui.
- Ada: typage ultra-fort. Compilé. Années 80.
- Perl: typage dynamique. (Syntaxe forte). Interprété. Années 1990 (?).
Je pourrais continuer.
- Coin Nitpickers: De nombreux langages interprétés sont tokenisés ou "compilés en octets" au moment où la source est chargée / lue. Cela rend l'opération suivante de l'interpréteur beaucoup plus simple. Parfois, vous pouvez enregistrer la version compilée en octets du code. Parfois, vous ne pouvez pas. C'est toujours interprété.
Mise à jour: parce que je n'étais pas assez clair.
La saisie peut varier considérablement.
Le typage statique fixe à la compilation est courant (par exemple, C, Ada, C ++, Fortan, etc.). C'est là que vous déclarez une CHOSE d'un TYPE et c'est ainsi pour toujours.
Il est également possible d'avoir une frappe dynamique, où la chose récupère le type qui lui est assigné. Par exemple, PHP et certains premiers BASIC, et APL, où vous assigneriez un entier à une variable et à partir de ce moment-là c'était un type entier. Si vous lui avez ensuite attribué une chaîne, il s'agissait d'un type de chaîne. Etc.
Et puis il y a un typage lâche, par exemple PHP où vous pouvez faire des choses vraiment bizarres comme assigner un entier numérique (entre guillemets, donc c'est une chaîne) à une variable et ensuite y ajouter un nombre. (par exemple, «5» + 5 donnerait 10). C'est le pays du bizarre, mais aussi parfois du très très utile.
CEPENDANT, ce sont des fonctionnalités conçues dans une langue. L'implémentation rend cela possible.