2008-09-26 4 views
10

Je considère la construction d'une application qui est un mélange d'un langage dynamique (python ou ruby) et d'un langage compilé et j'ai besoin d'aide pour me convaincre que c'est une bonne idée. Je pense que je peux utiliser un langage dynamique pour écrire beaucoup de code rapidement, puis passer à un langage compilé comme c/C++ pour implémenter le code critique de performance.Programmation Polyglotte: La création d'applications avec plusieurs langues est-elle une bonne pratique?

Je vois beaucoup d'avantages de cette approche:

  1. Augmentation de la productivité par un codage principalement dans le langage dynamique
  2. Disponibilité des bibliothèques des deux langues

Mais il y a aussi des côtés négatifs:

  1. Maintien d'un pont entre les deux langues
  2. Dépendance sur deux langues et la langue des bugs/bibliothèque au lieu d'un

Quels sont les autres avantages/inconvénients de cette approche? Est-ce que quelqu'un est au courant des ressources et/ou des meilleures pratiques à ce sujet?

Répondre

12

Je pense que votre approche est très judicieuse. La façon d'aborder les inconvénients est de découvrir à l'avance à quel point il est facile d'interfacer la langue dynamique avec C ou C++ avant de décider de l'utiliser ou non pour votre projet.

En outre, vous devez déterminer si vous souhaitez ou non que votre application soit multi-plateforme. Un langage dynamique est susceptible de dépendre beaucoup moins de la plate-forme que d'un langage compilé. Cela peut être un facteur pour décider quelles parties de l'application doivent être faites en C ou C++.

3

Oui. Beaucoup de programmes sont un mélange d'un langage de haut niveau, comme Python ou Ruby, et un langage de bas niveau comme C. Vous bénéficiez des avantages de la logique de codage dans un langage OO collecté par les ordures et pouvez gérer manuellement les registres dans des boucles internes serrées .

1

Je pense que c'est une bonne idée. Comme la plupart (presque tous?) OS sont écrits en C ou C++, chaque langage dynamique ou interprété est à un certain niveau retombant dans un langage optimisé compilé pour les bas niveaux.

5

Ja, bien sur, mein freund. C'est un'idea meravigliosa en effet. Boa sorte.

Je blague bien sûr. Un développeur web le fait tous les jours sans même s'en apercevoir: Java, JSP, EL/OGNL, HTML, CSS, Javascript, ant, XML, XSLT ...

Je pense que la programmation polyglotte est naturelle, puissante, efficace et plus que tout autre cool. Il doit être utilisé de la bonne façon bien sûr, pour exploiter le maximum de puissance de chaque langue, et ne pas confondre les autres membres de votre équipe.

+0

Exactement - la plupart des choses que j'écris sont en PHP, XML, XSLT, CSS, HTML et JS. Le développement Web utilise le meilleur outil pour le travail dans plusieurs endroits tout le temps. –

+0

XSLT? C'est comme le grec pour moi. Vous avez oublié SQL sur cette liste cependant. –

+0

@Christopher Mahan: Oui! Exactement, comme je l'ai dit, "sans même s'en apercevoir" :) –

2

Vous constaterez peut-être que vous n'avez pas besoin de mettre en œuvre des éléments critiques en termes de performances avant une date ultérieure. Donc, je me battrais durement contre l'entrée de l'un de ces changements majeurs critiques de performance jusqu'à ce que vous soyez vraiment sûr que vous avez besoin de le faire.

Sinon, il suffit de choisir un langage racine, perl et ruby ​​utilisent c, donc leur incorporation est assez simple. Vous pouvez également lancer python (jython) ou ruby ​​(jrunby) sur une machine virtuelle Java, ce qui vous donnerait le Java en tant que backend. Bien que cela puisse poser d'autres problèmes, je ne suis pas familiarisé avec le développement de ces versions des langues respectives. Tous les problèmes de performance ne vous obligeront pas à passer à un langage de bas niveau, alors essayez de vous attaquer d'abord dans un langugae, avant de passer rapidement à un autre.

Bonne chance,

2

Je suis en faveur de l'utilisation du meilleur outil pour le travail. Dans le cas de l'ingénierie logicielle, cela signifie être polyglotte. Vous ne vous attendez jamais à ce qu'un charpentier utilise seulement un marteau, peu importe ce qu'il construisait. Pourquoi devrait-il être différent pour nous?

0

C'est assez courant, mais assurez-vous de savoir pourquoi vous l'architecturez comme vous le faites.

Un exemple est dans la programmation de jeux. Dans de nombreux jeux, le moteur de jeu critique est écrit en C, tandis que les scripts de niveau sont en Python, Scheme, une langue locale ou autre. Cela signifie que les geeks de performance travaillent dans une langue qu'ils aiment et qui leur donne le contrôle de bas niveau dont ils ont besoin, tandis que les concepteurs de niveau peuvent travailler dans un langage de niveau supérieur où ils n'ont pas besoin de gérer la mémoire et ainsi de suite.

2

@Zorkerman

J'ai l'expérience avec les deux Jython et JRuby ... beaucoup plus avec JRuby. Je dois dire que ce sont de formidables plateformes, et que vous bénéficiez de l'énorme avantage des langages dynamiques, PLUS le support des bibliothèques tierces et tierces partielles de Java, PLUS un langage compilé de base indépendant de la plateforme, PLUS garbage collection dans les deux langues (il est important de comprendre la gestion de la mémoire, mais je suis du camp que vous feriez mieux de l'éviter à moins que vous en ayez vraiment besoin, comme si vous faites des pilotes ou des trucs au niveau du noyau, ou des choses qui ont besoin de performance.).

Je veux juste faire une petite anecdote. Je construisais récemment un script ruby ​​pour indexer une instance Solr, et j'avais besoin d'accéder à une base de données DB2 (la source de nos données à indexer). Straight Ruby échoué misérablement ... il a un support DB2 horrible, ce qui nécessite une installation complète de DB2 Express Edition ... qui ne fonctionnait toujours pas comme annoncé (je ne pouvais pas compiler les pilotes Ruby après avoir fini l'installation). La solution était de simplement passer à JRuby et d'utiliser JDBC du côté Ruby, en utilisant quelques jars faciles à installer (et beaucoup beaucoup plus petits fichiers que l'installation de DB2). Je recommande fortement d'envisager JRuby ou Jython au lieu d'utiliser C comme back end ... J'ai découvert que les performances des algorithmes et des ressources ont généralement un impact beaucoup plus important sur les performances des applications que le langage que vous choisissez, et la plate-forme Java a beaucoup à offrir (et elle a parcouru un long chemin depuis les débuts, quand les gens la décriaient comme beaucoup plus lente que le C/C++). À moins que vous n'effectuiez des calculs très lourds qui ne peuvent pas être refactorisés de manière algorithmique, vous n'aurez probablement pas besoin de descendre dans le langage compilé, quel que soit votre choix.


PS L'intégration avec Java dans JRuby est très transparente (du côté JRuby à Java de toute façon), afin de maintenir un pont est pas un problème. Jython, je pense est le même, mais encore une fois mon expérience avec elle est beaucoup moins.

6

Je viens de relire votre question - votre proposition d'utiliser C pour le code de performance critique. Tout langage dynamique digne de ce nom possède des outils pour vous permettre d'accéder au code natif de manière efficace. Commencez donc par écrire le tout dans le langage dynamique. Vous pouvez trouver que vous n'avez pas besoin de C après tout.

Mais si vous le faites, éclatez un profileur, choisissez soigneusement quelque chose à optimiser, et allez-y.

2

Il convient de noter que Gambit Scheme et poulet (et quelques autres mises en œuvre pour que la matière) fonctionnent dans un mode interprété, et peut être compilé en C

1

Certaines personnes affirment que nous les programmeurs doivent maîtriser aussi de nombreuses langues. Ils soutiennent que l'ajout d'une langue est une mauvaise chose.

L'ensemble de l'accès aux données en SQL, présentation en HTML/CSS semble irréversible. La chose XML est un peu fastidieuse: certaines personnes essaient de tout faire en XML, comme si XML avait des pouvoirs magiques pour améliorer le logiciel.

De plus, il y a une bonne quantité de redondance en raison des multiples langues. Toutes les liaisons inter-langues signifie que les choses sont écrites deux fois, une fois dans chaque langue.

Questions connexes