Jam (langage)

Un article de Wikipédia, l'encyclopédie libre.

Le langage Jam est une extension de la spécification du langage Java incluant la surcharge des opérateurs pour les types mathématiques et particulièrement le type complexe et matriciel.


[modifier] Spécification

  • Le nouveau langage est une extension de Java v5. Toutes les fonctionnalités de ce langage ne sont ni bridées ni supprimées.
  • Le fichier source doit avoir l'extension jam
  • Le compilateur jam doit produire soit un fichier .java soit directement un .class. Dans ce deuxième cas, toutes les options de java doivent être supportées telles qu'elles.
  • Le langage doit supporter un nouveau mot clef î qui correspond au nombre complexe unitaire.
  • Tous les littéreaux numériques (int, float, double, byte...) peuvent désormais êtres suffixés avec î , auquel cas il y a conversion automatique correspondant à une multiplication implicite par le nombre complexe unitaire î.
  • Le langage doit supporter nativement les conversions implicites suivantes:
De Vers Exemple
int Complex Complex x=3+(5î*2) ;
double Complex Complex x=3.0+(5.0E-98î*2);
float Complex Complex x=3f+(5î*2);
byte Complex Complex x=((byte)3)+(5î*2);
int[][] CMatrix CMatrix m={{1,2},{3,4}};
double[][] CMatrix double d=1;CMatrix m={{1,d},{d,2E-3î}};
float[][] CMatrix float x=1;CMatrix m={{x,x},{x,x}};
byte[][] CMatrix byte x=1 ;CMatrix m={{x,x},{x,x}};
Complex[][] CMatrix CMatrix m={{1,î},{3î,2E-3î}};
  • Surcharge des opérateurs
Opérateur Opérande Gauche (a) Opérade Droite (b) Code équivalent
+ - * / int/double/float/byte Complex b.add(a) ;b.negate().add(a) ; b.multiply(a); b.divide(a);
+ - * / Complex int/double/float/byte a.add(b) ; a.substract(b) ; a.multiply(b); a.divide(b);
+ - * / Complex Complex a.add(b) ; a.substract(b) ; a.multiply(b); a.divide(b);
* / CMatrix int/double/float/byte a.multiply(b) ;a.divide(b);
* / int/double/float/byte CMatrix b.multiply(a) ;b.inv().multiply(a);