(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/>