La frontière entre un type fondamental et un objet est floue et souvent introduite artificiellement. Par exemple, en C, une structure n'est qu'un groupe d'enregistrements, juste un type non-objet dérivé. En C ++, une structure est une classe avec tous les champs publics, un objet. Pourtant, C ++ est presque totalement rétrocompatible avec C ... la frontière est vraiment douce ici.
Pour la programmation basée sur des prototypes, vous devez avoir des objets modifiables au moment de l'exécution. Ils DOIVENT être typés en douceur car chacun change au moment de l'exécution, une classe d'un type se change en un autre - son type change.
Vous pouvez cependant conserver les types non-objets fondamentaux et dérivés comme statiques. Mais cela introduit une disparité étrange, les objets sont de type doux, les non-objets sont de type statique et une barrière rigide doit être établie entre les deux. Devriez-vous être capable de transformer une structure? Un string? Number devrait-il être une classe ou un type fondamental, ou un ensemble de types fondamentaux, int / float / bignum / etc?
Il est juste plus naturel et facile à apprendre, à utiliser et à écrire pour avoir cet uniforme, tous les types sont mutables ou aucun type n'est mutable au moment de l'exécution. Si vous déclarez qu'un seul type (objet) est mutable, vous vous retrouvez avec des maux de tête et des problèmes des deux mondes.
Le type statique est:
- plus facile à mettre en œuvre
- plus rapide / plus efficace
- plus sûr
- plus facile à entretenir / documenter les gros systèmes grâce à l'abstraction.
Le typage dynamique est:
- plus rapide à écrire,
- plus concis
- langue plus facile à apprendre
- plus indulgent pour les erreurs de conception.
En mélangeant les deux, vous sacrifiez beaucoup.
- La mise en œuvre devient plus difficile que n'importe laquelle des deux précédentes.
- la vitesse dépend si vous utilisez les types doux ou non ... Si vous le faites, c'est faible, si vous ne le faites pas, pourquoi choisir la langue?
- la sécurité de type est hors de la fenêtre pour tous les types d'objets.
- suivre comment un type se transforme en un autre est une tâche assez difficile. Le documenter - très dur.
- Vous devez toujours faire toute la comptabilité avec des types fondamentaux, ce qui tue la concision et la vitesse d'écriture
- La complexité du langage est plus élevée (plus difficile à apprendre) que n'importe laquelle des langues "spécifiques",
- le "pardon" d'un type dynamique est remplacé par une tendance à des erreurs très délicates au niveau des types d'attributs incompatibles.