Comment interpréter statiquement le typage dynamique compilé ?
Par Laurent, samedi 28 janvier 2006 à 18:21 :: TechnoloGeek :: #26 :: rss
(désolé pour le titre)
En gros :
Typage statique ou dynamique ?
Langage interprété ou compilé ?
Je n'ai pour l'instant que peu d'expérience du développement informatique, et étant encore jeune, j'aimerais faire des choix qui puissent me servir longtemps. Quoi de plus normal ?
Je fais majoritairement du Java qui est un langage de programmation orienté objet compilé à typage statique. C'est donc un langage qui doit être traduit pour une machine cible (ici la JVM) avant de pouvoir s'exécuter et chaque variable connaît le type de l'objet auquel elle fait référence.
Étant donné qu'il existe d'autres paradigmes que le modèle objet, qu'à la place de langages compilés il y a aussi des langages interprétés et qu'à la place de langages à typage statique il y a des langages à typage dynamique, je me suis donc demandé : "mais qu'elle est la meilleure solution ?". Je me doute fortement que suivant le problème, la meilleure solution n'est pas forcément la même. Mais certains choix sont plus souvent meilleurs que d'autres et certains sont plus pérennes que d'autres.
En ce qui concerne le modèle objet, actuellement il est le vainqueur indéniable, et pour le moment il n'y a pas grand chose pour le surpasser. En revanche en ce qui concerne le compilé/interprété et le typage statique/dynamique, c'est plus vague. Pour preuve, la dernière version de Java a amené un typage statique encore plus fort grâce à la généricité et pendant ce temps l'engouement vers des langages à typage dynamique est de plus en plus grands.
Pour pouvoir trouver la meilleure solution, il faudrait peut-être savoir quel est le problème. Le but d'un développeur est en général de réaliser un logiciel avec un minimum de bugs, en s'ennuyant un minimum et le plus rapidement possible (ça c'est surtout pour le patron ;-)). Pour réaliser un logiciel, nous avons besoin d'un langage de programmation (si quelqu'un veut inventer autre chose pour faire des logiciels, qu'il n'hésite pas, il n'y a pas beaucoup de concurrence dans le domaine). Cet outils doit nous permettre de nous focaliser sur le problème à résoudre (la conception du logiciel) et non sur "comment faire pour que ça marche dans ce putain de langage". Nous souhaitons donc avoir un langage simple, robuste nous assurant une bonne productivité.
Si vous aussi vous vous posez cette question, alors je vous conseille vivement de lire les deux articles suivants : tout d'abord cette comparaison C++/Java/Python/Ruby, cet article en site un autre sur le typage statique et les tests unitaires.
Pour ceux qui n'aiment pas l'anglais ou qui sont un peu trop fatigués, voici un résumé/conclusion :
-
C++ est plus rapide que Java qui est plus rapide que Python/Ruby. Avantage pour la compilation.
-
Le système de ramasse miette est un gros gain de productivité (mauvais point pour C++).
-
Le typage statique permet de lever certaines erreurs à la compilation, ces erreurs se produisent à l'exécution pour les langages à typage dynamique.
-
Le typage dynamique et les langages interprétés permettent un gain de productivité.
-
Et le meilleur pour la fin (et pour départager), la compilation permet uniquement de vérifier la cohérence syntaxique, le bon fonctionnement doit être vérifié par des tests unitaires dans tous les cas. Or on écrit plus vite un programme (et ses tests) dans un langage interprété à typage dynamique que dans un langage compilé à typage statique. Au final on a un logiciel tout aussi robuste mais écrit plus vite (encore faut-il faire des tests unitaires).
Je vous conseille vivement la lecture des deux articles mentionnés, le deuxième est d'une logique implacable (je répète encore que cette conclusion n'est pas LA solution, si vous avez un besoin critique de performances, le C++ sera le meilleur choix (parmi C++/Java/Python/Ruby)).
Forcément je me pose encore des questions. Ne serait-il pas possible d'avoir un langage avec une syntaxe simple et claire, permettant de faire du typage statique et dynamique suivant les habitudes du développeur (où le temps qu'il a) ? Et ce langage ne pourrait-il pas être interprété et compilé (interprété pour développer plus rapidement, compilé pour (peut-être) s'exécuter plus rapidement) ?
Certains langages se rapprochent pas mal de tout ça, mais y en a-t-il un qui sortirait du lot, avec une API bien fournie ? Ben oui, j'aimerais bien avoir une solution claire, nette et précise. J'en ai un peu marre de voir tel langage avoir bien implémenté tel truc mais avoir un autre truc merdique. Depuis le temps que l'on fait des langages de programmation, avec toute l'expérience acquise jusqu'à présent, n'y aurait-il personne pour apporter une solution ? Je dois avouer que les derniers langages "à la mode" s'approchent de ça, mais il y a toujours des choses affreuses à l'intérieur, le parfait n'existe-t-il réellement pas ? (ok, je m'éloigne du sujet là)


Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire