Migration de Perl TK => Java [Fermé]

Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
28 août 2018
- - Dernière réponse : [Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
- 4 juin 2018 à 12:37
Coucou à tous,

Alors voici la question que je me pose. Je développe depuis 2 ans un programme en Perl TK, que je viens de finaliser. Mon souci, c'est que Perl et Tk c'est super, mais pas adapté pour être lancé depuis n'importe quel système, depuis n'importe quelle machine qui n'a pas Perl et plein de packages déjà installés. Or mon but, c'est de déployer un exécutable de mon logiciel. Je peux bien créer un exe de mon programme Perl, mais il ne fonctionnera pas sur tous les systèmes. De plus, j'aimerais créer une licence de ce logiciel, et avec Perl, rien trouvé pour faire ça. Bref, avoir un logiciel exploitable partout, et pas en rester à un logiciel maison.
Alors je voyais 2 stratégies:
1) Recoder tout en Python ou en Java, et créer un exécutable avec installeur ou je ne sais quoi, qui puisse être déployé partout. Inconvénient: tout se retaper dans un autre langage, ce qui me décourage franchement
2) Faire depuis Java un espèce d' "Include" de mon programme Perl TK, me disant que si cette solution est possible, alors plus de problème de compatibilité, de librairies etc...vu que ça va tourner sur la JVM, donc sur n'importe quelle machine. Mais est-ce possible?
Sinon quelle solution la moins coûteuse pourrait être envisagée?

Merci pour vos retours et conseils :)



Afficher la suite 

1 réponse

Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786
0
Merci
Salut JamieMacUloth,

La partie interface utilisateur gérée par Tk est spécifique à la plateforme (en fait, une installation Perl avec Tk dessus utilisera une version de Tk comprenant du code C compilé pour la plateforme concernée : Windows, Linux,...).

Si tu crées des packages d'installation tu dois créer des packages pour chaque système d'exploitation. Tu peux faire cela avec PAR::Packer : http://search.cpan.org/dist/PAR-Packer/lib/PAR/Packer.pm qui te permet de packager tous les éléments nécessaires en un exécutable, qu'il soit pour Windows ou Linux (selon l'environnement dont tu te sert pour lancer PAR::Packer et ses outils.

on en parle là : https://djibril.developpez.com/tutoriels/perl/creer-executable-sources-perl/#LII-D

Il y a d'autres options pour faciliter la création d'environnements d'exécution Perl comme Carton : http://search.cpan.org/~miyagawa/Carton-v1.0.33/lib/Carton.pm qui nécessitera par contre que l'utilisateur dispose d'un Perl de base installé (Carton gérant la mise en oeuvre des dépendances).

Tu peux aussi créer des containers Docker. Là aussi, tu les créeras pour les différents environnements cible.

Tu auras le même problème avec Python qu'avec Perl, qui utilise Tk aussi. Il te faudra un environnement Python particulier pour chaque système d'exploitation.

Tu ne peux pas "résoudre" le problème en "incluant" ton programme Perl/Tk dans un programme Java si ce programme Java se contente de lancer l'interpréteur Perl, car lui même aura besoin de son environnement.

D'une certaines façon Java fonctionne un peu pareil. Pour faire fonctionner le programme Java, tu as besoin d'une machine virtuelle installée, particulière à ton système d'exploitation, avec laquelle l'interface utilisateur (entre autres choses) peut être gérée.

Il existe des modules disponibles sur CPAN permettant d'exécuter du code Perl au sein de Java, procédant de différentes façons :

http://search.cpan.org/~etj/Inline-Java-0.66/lib/Inline/Java.pod (avec une installation locale)
http://search.cpan.org/~mtshomsky/Alien-Jerl-1.03/lib/Alien/Jerl.pm (sans installation locale, Perl étant virtualisé dans la JVM, mais sans autres modules que les Core Modules)

Je n'ai jamais utilisé ce type de choses, mais cela pourrait te permettre de reprendre ton code Perl sans avoir à tout redévelopper pour tout ce qui relève de la logique du programme, et de laisser Java gérer l'interface graphique.

Cela me semble moins compliqué de packager avec PAR::Packer ou Carton.

Dal