Code issus de deux langages de programmation

toyo2020 Messages postés 58 Date d'inscription jeudi 15 octobre 2020 Statut Membre Dernière intervention 5 avril 2024 - Modifié le 16 janv. 2024 à 08:29
mamiemando Messages postés 33084 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 avril 2024 - 25 janv. 2024 à 20:14

Bonjour y a t-il des pertes coté rapidité et/ou sécurité lorsqu'un logiciel est constitué de code issus de deux langages de programmation. Par exemple depuis DELPHI ou depuis JAVA on fait appel à un module écrit en C++.

De façon plus générale un langage de programmation qui est comparativement à C++ plus gourmand en énergie et plus lent et moins sécurisé comme DELPHI VisualBasic JAVA  ... va t-il rendre le logiciel plus lent et énergivore et moins sécurisé lors de l'appel du module C++.

Bien sur DELPHI VisualBasic JAVA  ... rend le logiciel plus lent et énergivore et moins sécurisé quand il n'y a pas d'appel a C++. La question est de savoir si c'est le cas lors de cet appel.

A voir également:

3 réponses

yg_be Messages postés 22734 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
16 janv. 2024 à 10:48

bonjour,

Comment se fait cet appel d'un code à l'autre?  En général, c'est l'appel qui est pénalisant, le code c++ étant ensuite exécuté comme d'habitude.

0
toyo2020 Messages postés 58 Date d'inscription jeudi 15 octobre 2020 Statut Membre Dernière intervention 5 avril 2024
17 janv. 2024 à 07:41

Comment se fait cet appel d'un code à l'autre?  En général, c'est l'appel qui est pénalisant

Que faudrait-il faire pour que ces appel ne soient pas pénalisant, des travaux sont réalisés de ce coté là en recherche fondamentale ou dans les labo R&D de grandes entreprises ?

le code c++ étant ensuite exécuté comme d'habitude

Voila une bonne nouvelle, c'est ce que je présentais sans en avoir la confirmation.

0
yg_be Messages postés 22734 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
Modifié le 17 janv. 2024 à 09:25

Les processeurs, les ordinateurs, les systèmes d'exploitation, les langages, ainsi que les compilateurs, sont conçus pour réduire la pénibilité des appels.

Pour chacun de ces domaines, il y a bien sûr des travaux en permanence, dans les universités et les entreprises.

0
mamiemando Messages postés 33084 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 avril 2024 7 749
25 janv. 2024 à 20:14

Bonjour

Réponse alternative : selon le langage utilisé, les instructions sont plus ou moins coûteuse. C'est inhérent à la manière dont fonctionne ce langage.

Prenons un langage purement interprété comme du shell ou du javascript. Chaque instruction est lue consécutivement, puis "comprise", puis exécutée.

Pour éviter d'avoir à "comprendre" chaque instruction à la suite, certains langage passent par une phase de compilation, soit explicite (Java, C, C++) soit implicite (par exemple python). Selon le langage utilisé, ce peut-être :

  • soit directement du code machine (C, C++) et donc spécifique à l'architecture de la machine pour laquelle il a été compilé ;
  • soit un binaire portable, spécifique à un langage (Java, C#) et qui ne peut être utilisé qu'au travers d'une machine virtuelle propre à ce langage (e.g. JVM pour Java)

Par ailleurs, tu n'es pas toujours condamné à faire des appels systèmes, en particulier quand il s'agit d'appeler du C ou du C++.

Si on considère des langages comme python, il existe plein de techniques pour l'accélérer et le rendre plus efficace et moins énergivore, notamment :

  • cython (enveloppe du C dans du python)
  • numba
  • boost (librairie C++ permettant d'envelopper du code C++ dans des objets python)

Il existe selon le langage des techniques ressemblantes (par exemple JNI en java).

Toutes ces techniques permettent d'utiliser des librairies (implémentées en C ou en C++) en python pour un surcoût modique (puisque l'essentiel se fait dans lesdites librairies). C'est le cas notamment de librairies telles qu'OpenCV (librairie de computer vision), torch (machine learning), tensorflow (machine learning), numpy (calcul numérique) pandas (manipulation de données) et bien d'autres.

Un autre argument pour accélérer du code est de déporter son exécution sur le GPU (si l'ordinateur en a) plutôt que le CPU. C'est particulièrement pertinent pour des librairies machine learning mais pas que. Ainsi, la plupart des modules python que je viens d'évoquer ont un équivalent développé par Nvidia et optimisé pour tourner sur des GPU nvidia (à l'aide de CUDA).

De moins en moins de gens apprennent et savent correctement coder en C/C++ (et encore moins avec CUDA). En effet, le C et le C++ requièrent beaucoup de rigueur (notamment pour gérer la mémoire), sont parfois un peu verbeux et/ou peu pratique. Par exemple, il n'y a pas nativement de liste, d'ensemble ou de dictionnaire à proprement parler en C, juste des fonctions pour se raccrocher aux branches. Pour toutes ces raisons, les gens se tournent souvent vers des langages plus simple d'utilisation, mais plus énergivores et moins performants (genre python), quitte à utiliser les optimisations que j'évoquais auparavant.

Bonne chance

0