(Courriels de diversion: <looping@ridaient-incomplets.com> <cloisonnerent@intervertirons-moquera.com> <formaliseront@attachants-immisceriez.com> <cessibles@engraisses-provisionnes.com> <affaisserent@empaquetiez-barricada.com> <trepanent@reglementaire-langee.com> <communierez@manipulez-interdirais.com> <trafiquera@galvanisaient-trublions.com> <entrouvririons@transcodees-edifie.com> <encombres@clarte-tenaillee.com> )
>> Quels sont les langages qui passent par une traduction en >> C/C++? A ce que je sache la plupart des langages de script >> ont leur propre interpreteur: Perl, Python, Ruby, Java... Java n'est pas un language interprété, c'est un language à bytecode. A ma connaissance, aucun language interprete ou meme qui peut passer par un bytecode (type java) n'utilise gcc en backend. gcj fait de la compilation, mais est loin d'être parfait (il y a des projets qui ne passent pas encore). Une exception notable est le compilateur Perl (qui fait du C me semble-t-il), mais vu qu'il marche extrèmement mal... > si on veut approfondir, la notion de compilateur/interpréteur > est très complexe car il y a des interpréteurs purs (?), des > semi-compilateurs, des cross compilateurs... et des ovnis > comme forth que je ne saurais pas vraiment classer. En gros, je pense qu'on peut classer l'exécution des languages de programmation en trois type: les languages compilés(C, C++), les languages interprétés (Perl, bash) et les languages à bytecode (java, python). Avec des solutions hybrides telles que python qui permettent plusieurs choses à la fois. Les languages à bytecode sont des languages qui sont traduits dans un sous-language, plus proche des instructions machines et deja éventuellement un peu optimisé, qui est ensuite exécuté sur une machine virtuelle. C'est ce que fait Java, et ce que fera Perl 6 avec Parrot. Il faut bien se rendre compte que vu ce que coute les analyse lexicales et syntaxiques (comprendre: une grande partie du temps de compilation), le fait d'utiliser un bytecode est un réel gain. D'autant plus que ca permet apres de plus facilement ecrire des compilos JIT (je m'égare, je m'égare ...) > au delà du compilateur lui-même, il y a aussi celui des > librairies, j'ai souvenir (en un temps ou linux n'existait pas > :-) avoir eu des problèmes pour lier des librairies pascal > avec du C (je ne sais plus trop si c'était un problème indien > ou autre chose du même genre) Ce genre de problèmes arrive principalement pour plusieurs raisons: - un format binaire pas standardisé. Sous linux, tout le monde utilise maintenant l'ELF. - des conventions d'appel non homogenes. Il y a moyen que ce soit le probleme que tu avais avec le Pascal. Gcc utilise les memes conventions pour tous les languages qu'il compile (comprendre: celle du C). - un mangling (la facon de traduire les noms exportes par le language en un nom utilisable pour tout ce qui est edition de liens) different. Typiquement, c'est le probleme qu'il existe en C++ entre gcc < 3, 3 <= gcc < 3.2 et gcc >= 3.2 -- Sylvain Joyeux -------------------------------------------------------------------- Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>