jeudi 14 janvier 2010

Les ponts entre les langages et les environnements RIA

J'ai tenté de faire le tour des projets intéressants concernant la cross-compilation et de manière plus générale les ponts entre les différents environnements technologiques (plutôt orienté RIA).
Je tenterai peut être dans le futur de faire une représentation sous forme de matrice.
Si vous pensez qu'un projet intéressant manque à la liste ou souhaitez apporter des précisions/corrections, n'hésitez pas à laisser un commentaire !





NestedVM
http://nestedvm.ibex.org/
Type : ahead-of-time (AOT) compiler
Entrée : Binaire MIPS (gcc)

Sortie : Java bytecode
Permet de compiler n'importe quel language dit "unsafe" supporté par GCC (comme C, C++, Fortran, ...) en bytecode java par l'intermédiaire d'une compilation GCC pour une architecture MIPS.
L'espace mémoire est converti en un grand tableau statique. Utilisé par exemple dans ce driver Sqlite : http://www.zentus.com/sqlitejdbc/


XMLVM
http://xmlvm.org

Type : ahead-of-time (AOT) compiler
Entrée : .NET CIL, Java Bytecode, Ruby YARV
Sortie :  .NET CIL, Java Bytecode, ObjectiveC, C++, Javascript, Python
Passe par une représentation intermédiaire en XML.
APIs de l'environnement d'origine traduites :
JVM vers ObjectiveC : sous ensemble de Cocoa, api iphone

JVM vers Javascript : sous ensemble d'AWT
CLR vers Javascript : sous ensemble de Winforms
CLR vers Java : par de generics, sous ensemble de winforms


GCJ
http://gcc.gnu.org/java/

Type : ahead-of-time (AOT) compiler
Entrée : Source Java ou Bytecode
Sortie : Bytecode ou natif


GWT
http://code.google.com/webtoolkit/
Type : ahead-of-time (AOT) compiler
Entrée : Source Java
Sortie : Javascript
Pas de réflexion. Optimisation forte à la compilation. Compilation relativement longue.

APIs de l'environnement d'origine traduites :  Sous ensemble de J2SE

Java2Script Pacemaker
http://java2script.org/
Type : ahead-of-time (AOT) compiler
En entrée : Source Java
En sortie : Javascript
Réflexion, annotations.

APIs de l'environnement d'origine traduites : Sous ensemble de J2SE, SWT


SwingWeb
http://swingweb.sourceforge.net/swingweb/

Type : translation à la volée coté serveur
Implémentation d'un Toolkit AWT en HTML et un toolkit avec rendu coté serveur (voir démos). Utilise la session coté serveur pour sauvegarder l'état de l'application.

WebOnSwing
http://webonswing.sourceforge.net

Similaire au précédent.

JSC
http://zproxy.wordpress.com/jsc/
Type : cross-compilation ?

Entrée : MSIL (C#, VB.net)
Sortie : javascript, actionscript, php, java


Pyjamas
http://pyjs.org/
Type : cross compilation

Entrée : Python
Sortie : Javascript
Se veut être le portage de GWT en python.


Microsoft Volta
http://lgmorand.developpez.com/dotnet/volta/part1/

Type : cross compilation ?

Entrée : .NET  CLR
Sortie : Javascript


Gordon
http://ajaxian.com/archives/gordon-flash-runtime-implemented-in-javascript
Type : machine virtuelle coté client (conversion au runtime)
Lecture en javascript de fichier SWF (Adobe Flash), affichage à l'aide de SVG.

iSpectrum
http://www.flexycore.com
Entrée : Java
Sortie : Natif iPhone.

Autres
OpenLaszlo http://www.openlaszlo.org/ Conversion coté serveur de LZX/XML + javascript -> Javascript/dhtml ou flash

Propriétaire vers Javascript : http://www.milescript.org/
Propriétaire vers Javascript : http://www.flapjax-lang.org