[PERL/C] Convertir du PERL en C

Convertir du PERL en C [PERL/C] - Programmation

Marsh Posté le 27-04-2001 à 16:07:43    

J'utilise PERL v5.6.0 built for MSWin32-x86-multi-thread (la version la plus récente) sous NT4, et je souhaiterai - pour des questions d'optimisations - convertir du PERL en C.
 
J'ai essayé de faire fonctionner perlcc, mais cela ne donne aucun résultat.
 
D'avance merci.

Reply

Marsh Posté le 27-04-2001 à 16:07:43   

Reply

Marsh Posté le 27-04-2001 à 16:19:50    

précision, lorque j'utilise perl, il me balance :  
 
E:\perl -MO=C test.pl -otest.c
 
Can't call method "can" without a package or object reference at E:/Perl/lib/B/C.pm line 1341.
CHECK failed--call queue aborted.

Reply

Marsh Posté le 27-04-2001 à 22:33:20    

j'ignorais que c'etait possible.
 
vu le msg d'erreur , cherche une autre lib (plus vieille / plus recente ?)


---------------
Do androïds dream of electric sheep ?
Reply

Marsh Posté le 30-04-2001 à 09:53:55    

Merci, je vais essayer.
Quelqu'un aurait-il une autre suggestion ?

Reply

Marsh Posté le 30-04-2001 à 10:07:21    

A mon avis ça doit pas donner des résultats extraordinaire de convertr le perl en c : perl est super-optimisé pour tout ce qui concerne les chaines de caractères, les expressions régulières ...

Reply

Marsh Posté le 30-04-2001 à 10:19:22    

Justement Non, mon programme utilise les expressions régulières et il les recompile à chaque fois.
 
Pour te donner un ordre d'idée, le programme recompile plusieurs milliards de fois les mêmes expressions régulières, c'est pourquoi j'aimerai le convertir en C afin qu'il ne les recompile pas systématiquement on the fly.

Reply

Marsh Posté le 30-04-2001 à 15:20:50    

.

Reply

Marsh Posté le 30-04-2001 à 15:33:30    

A mon avis, Perl est le must de l'expression réguliére c'est en en faisant un prog c que miracle ca sera mieux :)
 
et puis suivant ton opération (ton algorithme), ca va pas résoudre on pb!!


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 30-04-2001 à 15:38:53    

SI ! Car PERL recompile A LA VOLEE les expressions régulières.
 
Si tu as 150 000 fois la même expression régulière, il la recompilera 150 000 fois, car PERL est un langage interprété. Le programme C ne le fait qu'une fois puisqu'il est compilé.

Reply

Marsh Posté le 30-04-2001 à 15:43:33    

que tu passe 150000 fois dans une boucle ou que tu "compile" ton prog qui va exécuter 150000 fois la meme chose,
 
j'vois pas la différence !

Reply

Marsh Posté le 30-04-2001 à 15:43:33   

Reply

Marsh Posté le 30-04-2001 à 16:01:40    

PERL compile ET execute 150 000 fois l'expression régulière.
C compile 1 fois ET execute 150 000 fois l'ER.
 
Comme c'est la compilation qui prend le plus de temps ...
 
Mais merci de t'intéresser à mon problème.
En ce qui concerne le tien (configuration du port //), je suis désolé mais j'ai pas trouvé dans la doc PERL officielle. Tu devrais regarder du côté de :
http://www.perlmonks.org/index.pl?node=Library
ou  
http://www.activestate.com/

Reply

Marsh Posté le 30-04-2001 à 16:05:59    

merci pour la doc mais je suis dejà aller voir ;)
 
Pour ton prog, suivant pour koi c faire je te conseil quand meme de le laisser en Perl. lors de la conversion ca risque de poser des pb plus ou moins grave !!
 
Pour mon info perso i sert à koi ton prog (crytage, décrytage ou autre ??)

Reply

Marsh Posté le 30-04-2001 à 16:07:13    

g oublié la compile d'1 fichier Perl prend au plus 0,000000687 secondes :)

Reply

Marsh Posté le 30-04-2001 à 16:19:12    

0,000000687 secondes * 150 000 (car compilation à la volée!)  :cry: , ce qui fait beaucoup beaucoup.
 
Mon programme doit faire une sorte de MULTIGREP :  
 
En entrée :  
1 : les E.R. dans un fichier.
2 : les fichiers à analyser.
 
En Sortie :  
un fichier résultat stockant les lignes qui matchent avec les ER.

Reply

Marsh Posté le 30-04-2001 à 16:34:52    

g fais un script Perl ki traite 2000 annonces ki se trouvent dans bdd MySql, il les parse et les écrit dans 2 fichiers txt suivant le type de l'annonce.
 
il fait tous ca en 20,521 secondes ! montre en main ;)
c pour ca que je te dit tous.  
Le script est exécuté 1 fois donc est compilé 1 fois. par contre à l'intérieur il y a moulte d'expression réguliére pour faire le netoyage des annonces. Au vu de ce resultat et vu le temps de connexion à la bdd, le temps que le script met est tout a fait résonnable (pour ma part).
donc pour ton script en théorie il devrais mettre quelmque chose comme 2 mins ce qui est tout a fait correct. (à mon avis)

Reply

Marsh Posté le 30-04-2001 à 17:02:26    

Dans les faits, sur quelque chose comme 4 Milliards de lignes de fichiers COBOL traitées, il met 1h30, ce qui est beaucoup trop (cf. mon BOSS), c'est pourquoi j'aimerai le convertir en C, pour - j'espère - gagner du temps.
 
3 solutions :
1. un traducteur perl -> C (c'est la raison de mon TOPIC).
2. tout refaire en C++ (c'est chiant car plein de facilités PERL que n'a pas C++).
3. Mixer PERL / C (à l'étude, dès que le PROTO est fini (utilisation d'une Classe C++ gérant les ER.) appel d'un module C dans le code PERL).

Reply

Marsh Posté le 30-04-2001 à 17:09:45    

vu comme ça :(
 
g vu un jour sur le net un traducteur Perl => C mais je ne l'ai jamais esayé ni telechargé d'ailleur. Va voir sur le site http://www.telecharger.com/ peut-être trouvera tu ton bonheur


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 30-04-2001 à 17:15:31    

Comment fait-on pour appeler une lib c dans un script Perl?? ou Delphi (avec Delphi je sais envoyer et recevoir des informations à travers le port // :lol: )
 
(a vérifier mais je crois que les scripts perl ne se compile pas ??)


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 30-04-2001 à 17:35:40    

Dans la doc officielle, regarde du côté de  
how to embed perl in your C program ? section PREAMBLE.
 
J'ai trouvé un soft, Perl2Exe, mais il ne convertit pas en code exe (ou en C), il embarque l'interpréteur, ce qui ne m'intéresse pas du tout (aucun gain de perfs).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed