Bonjour,
Désolé de mon retard sur un sujet aussi intéressant, mais je suis en vacances dans un camping qui a un internet plutôt défaillant...
Même en connaissant C et C++ ainsi qu'une douzaine d'autres langages, je vote, bien sûr, pour Python avec juste quelques limites.
Python rend le codage vraiment très facile et très rapide. On peut faire beaucoup de POO, et utiliser une quantité invraissemblable de modules divers dans plein de domaines très différents. Et la mise en oeuvre de ces modules est très aisée.
En tant qu'outil de développement, j'utilise pour ma part Eclipse + Pydev, ce qui me donne une liaison directe avec tous mes projets, ce qui facilite la réutilisation de morceaux ainsi que la gestion de fonctions de bibliothèque perso. Pydev dispose de toutes les facilités d'édition (coloration syntaxique, completion y compris avec PyQt4, encodages, fins de ligne, debugging, etc...). Il est de plus multiplateforme, ce qui me permet de travailler de la même façon sur Windows, Linux et Mac OS X. Il a aussi le gros avantage de ne pas être écrit en Python, ce qui évite les inévitables conflits avec, en particulier, les threads et les processus...
Les projets en Python + PyQt4 sont très rapides, ou plutôt "aussi rapide qu'il est nécessaire". Si une réponse de 1/10 de seconde convient, utiliser un langage plus complexe pour passer à 1/100 seconde est complètement inutile: ce n'est plus un critère de choix. En fait, si Python est un langage interprété, les instructions Python passent la main très rapidement au code écrit en C/C++, ce qui fait que 80 ou 90% s'exécutent en fait au même rythme que le C/C++ compilé.
Certaines routines critiques en temps d'exécution peuvent s'écrire en Cython, ce qui accèlère beaucoup à condition de ne pas utiliser trop d'objets spécifiques Python (les appels multiples à l'API Python font perdre du temps). Par contre, avec des données de type C/C++, on peut utiliser directement les bibliothèques C/C++.
Pour la distribution du code: rien de plus facile. J'utilise beaucoup cx_freeze sous Windows et sous Linux, et ça marche très bien (avec quelques tatonnements tout de même). Cela permet de distribuer un "exe" accompagné de toutes les bibliothèques nécessaires, y compris, bien sûr, de l'interpréteur Python. Compte tenu de la puissance des machines actuelles, le volume que ça représente n'est vraiment pas un problème.
Sous Windows, après traitement par cx_freeze, on peut utiliser un installeur comme innosetup, et on obtient un fichier qui s'installe comme n'importe quel logiciel Windows:
les utilisateurs ne sauront même pas que c'est du Python... Je n'ai pas essayé sous Linux, mais je sais qu'il est possible de fabriquer des paquets (.dev, .rpm) et de créer un dépot local personnalisé.
J'applique tout ça pour mes projets. Mon plus gros projet fait le traitement d'un concours internationnal de photos pour mon photo-club (en tant qu'amateur bénévole). Il est écrit en Python + PyQt4. Il contient plus de 20 fenêtres et plus de 25000 lignes de codes Python, avec:
- création d'étiquettes autocollantes avec codes barres
- lecture de codes barres avec pilotage du lecteur (sous Windows et Linux)
- formulaire de saisie avec des widgets personnalisés et de nombreuses vérifications. Les widgets personnalisés, écrits en Python, sont rendus utilisables par QtDesigner
- gestion complète d'une base de données relationnelle de 5000 articles, une quinzaine de tables avec contraintes de clés étrangères et mises à jour et destructions en cascade. J'utilise sqlite3 mais Postgresql ou Mysql sont possibles.
- consultation/modification dans la base de données avec des outils graphiques de PyQt4 (QTableView). On peut éditer des tables temporaires à partir de scripts sql écrits en interactif (QTextEdit). La recherche/filtrage peut s'effectuer avec les instructions sql, mais aussi par wildcard, expressions régulières et par mots similaires (avec ratio paramétrable). Le tri peut être fait avec l'ordre du dictionnaire français (script Python utilisé directement par sql)
- téléchargement ftp dans les 2 sens avec barre de progression et, si nécessaire, avec reprise
- compression/décompression zip
- une fenêtre éditeur de texte (QTextEdit)
- une fenêtre navigateur internet qui permet, entre autres, de lire les manuels d'utilisation écrits en html
- édition de résultats sous diverses formes: html, csv pour Excel, pdf, jpg, ... J'ai même un programme utilisant le module PyPdf pour regrouper plusieurs centaines de fichiers pdf en un seul pour faciliter l'impression.
- Traitement par cx_freeze pour obtenir un exe facilement transportable d'un pc à un autre, et qui s'exécute sans nécessiter d'installer Python et PyQt4.
- ...
Sincèrement, quand je vois avec quel facilité j'ai fait tout ça, je ne regrette pas d'avoir choisi Python. Et comme j'en suis le principal utilisateur, je peux confirmer que ça marche!
J'avais parlé tout au début de "quelques limites": les voici.
En tant que langage interprété, Python a quelques souplesses qui peuvent pousser à la faute. Trois exemples:
- une simple faute de frappe peut faire créer involontairement une nouvelle variable sans aucun message d'erreur puisqu'il n'y a pas de déclaration. Et l'importance de l'erreur ainsi commise ne sera visible qu'à l'exécution.
- certaines erreurs de codage n'apparaitront que lorsque la fonction concernée sera effectivement solicitée, c'est à dire le plus souvent après la distribution du logiciel.
- comme les variables, les arguments passés aux fonctions n'étant pas typés, on peut passer n'importe quoi, mais les conséquences se verront dans les traitements qui les utilisent: surprises possibles.
On peut aussi rencontrer des difficultés en cas d'exigence de temps de réponse, en particulier avec le ramasse miette qui peut se déclencher n'importe quand.
On peut, bien sûr, compenser en partie avec une (très très) solide méthode de développement,mais ce serait encore plus fiable si on ne pouvait pas faire autrement. Autrement dit, j'adore Python, mais si je devais coder pour Ariane ou pour le nucléaire, j'utiliserais un langage beaucoup plus contraignant... ADA?
5 |
0 |