Département d'informatique
Laboratoire des Méthodes de Programmation (LAMP)

Compilation     semestre d'hiver 2002-2003
Ecole Polytechnique Fédérale de Lausanne

Utilisation de Scala



Qu'est-ce que Scala ?

Pour ceux qui ne le savent pas encore, Scala est un langage de programmation développé par le LAMP (le laboratoire du Prof. Odersky et des assistants du cours de compilation).

http://lamp.epfl.ch/scala/

Scala en INF 3

Scala est disponible sur les machines de la salle INF 3. Chaque fois qu'une nouvelle version est disponible, nous l'installons sur le compte iclamp dans le répertoire /home/iclamp/local/packages. Le répertoire ci-dessous contient des liens vers les différents exécutables dont vous aurez besoin.

/home/iclamp/soft/bin

Afin de pouvoir lancer ces exécutables sans devoir chaque fois entrer le chemin complet, ajoutez le répertoire ci-dessus à votre variable d'environement PATH.

Scala à la maison

Si vous désirez utiliser Scala à la maison, vous pouvez télécharger la dernière distribution ici. Les versions .tar.gz sont pour les systèmes UNIX (Linux, MacOS X, Cygwin, Solaris, ... ) et les versions .zip pour les systèmes Windows. Les versions normales de la distribution requièrent un jdk 1.4.x. Les versions marquées jdk-1.3 devraient fonctionner avec un jdk 1.3.x. Si vous avez un jdk 1.2.x ou antérieur, il vous faudra le mettre à jour.

Pour installer la distribution UNIX, décompressez l'archive et ajoutez le répertoire bin à votre PATH. Avec la distribution Windows, la procédure est la même, mais il faut en plus définir une variable SCALA_HOME de façon à ce qu'elle pointe sur le répertoire racine de la distribution. Pour plus d'informations, lisez le README

Comme Scala est encore en plein développement, nous sortons assez régulièrement de nouvelles distributions, parfois plus d'une par semaine. Souvent, il s'agit de corrections de bugs. Si vous voulez profiter de toutes ces corrections, il vous faudra souvent réinstaller Scala. Afin de ne pas devoir à chaque fois redéfinir votre PATH (et votre SCALA_PATH si vous êtes sous Windows) nous vous conseillons donc de renommer le répertoire scala-YYYYMMDD-hhmmss en scala (ou, si c'est possible, de créer un lien symbolique de scala vers le répertoire de la dernière distribution) et de rajouter scala/bin au lieu de scala-YYYYMMDD-hhmmss/bin à votre PATH.

Ce qui a changé

Durant les vacances, un compilateur (générant du bytecode Java) a été ajouté à la distribution Scala. Son nom est socos. Pour écrire un programme en Scala qui puisse être compilé, il vous faut déclarer un module contenant une méthode main prenant en argument un tableau de String et retournant Unit. Ci-dessous, le programme HelloWorld écrit en Scala.

module HelloWorld with {

  def main(args: Array[String]): Unit = {
    System.out.println("HelloWorld");
  }

}

Pour compiler ce programme, utilisez la commande suivante :

socos -d ./classes HelloWorld.scala

Cette commande compile le fichier HelloWorld.scala et place les classes générées dans le répertoire classes. L'option -d classes n'est pas obligatoire, si vous l'omettez, les classes générées seront placées dans le répertoire courant. Pour exécuter le programme, il faut utiliser la commande java, mais il faut ajouter au classpath les classes du runtime Scala. Celles-ci se trouvent dans l'archive scala.jar. Cette archive se trouvent dans le répertoire lib de la distribution. Sur les machines de la salle INF 3, elle se trouve ici :

/home/iclamp/local/packages/scala/lib/scala.jar

Pour exécuter le programme HelloWorld il faudrait donc utiliser la commande suivante :

java -classpath ./classes:/home/iclamp/local/packages/scala/lib/scala.jar HelloWorld

Bugs

Le compilateur Scala est actuellement encore en plein développement et nous trouvons régulièrement des bugs et vous tomberez très probablement aussi sur certains bugs. Dans ce cas, n'hésitez pas à nous les signaler.

Comment détecte-t-on un bug ?

Un bug peut se manifester de différentes manières, en voici quelques exemples :

  • L'exécution du compilateur provoque une exception. Cela indique clairement un bug; un compilateur ne devrait jamais planter.
  • Le compilateur affiche un message d'erreur qui n'a pas lieu d'être. Certains bugs on pour effet de faire croire au compilateur que certain programme ne sont pas corrects. Mais, il arrive aussi assez fréquemment que le programmeur croit à tort que son programme est correct. Dans un tel cas de figure, ne criez donc pas trop vite au bug, car c'est peut-être bien vous qui avez tort et non le compialteur.
  • Le cas de figure inverse existe aussi : un bug peut avoir pour effet de faire accepter des programmes incorrects. Dans ce cas, l'erreur ne se manifeste qu'au moment de l'exécution du programme. Elle peut se traduire par une exception inattendue (ClassFormatError, AbstractMethodError, etc), mais parfois aussi simplement par un résultat erroné. Il peut aussi arriver que l'erreur ne se manifeste que dans certaines circonstances particulières. Ces bugs sont particulièrement difficiles à trouver, car souvent, lorsque le résultat est erroné, on va vérifier et revérifier l'algorithme du programme sans penser à un bug du compilateur. Donc, si vous êtes intimement convaincu que votre code est correct mais que le programme s'obstine à donner le mauvais résultat, pensez à l'éventualité d'un bug dans le compilateur.
  • Quand faut-il signaler un bug ?

    Les bugs les plus durs à détecter sont aussi ceux qui devraient être signalés à tous prix, mais tout bug devrait être signalé, même ceux qui vous paraissent les plus anodins. En effet, même si un bug vous paraît anodin, vous êtes peut-être la première personne à l'avoir détecté. Parfois, certains bugs passent longtemps inaperçus parce qu'ils ne se manifestent qu'avec certains styles de programmation ou lorsque l'on utilise certains concepts en même temps. Ainsi si vous avez un style de programmation très personnel ou que vous êtes la première personnes à combiner certains concepts, vous pouvez parfois faire apparaître de nouveaux bugs avec des programmes très simples et/ou très courts. N'hésitez donc pas à nous signaler tous les bugs que vous rencontrez.

    Comment signaler un bug ?

    Pour signaler un bug, envoyez un mail à l'un des assistants du cours. Pas besoin de faire de grands discours, vous pouvez simplement inclure votre code source et la ou les lignes de commandes qui déclenchent le bug. Si votre programme se compose de plusieurs fichiers sources, envoyer-nous les tous afin que nous puissions reproduire le bug.

    Si vous avez un peu de temps, et que vous avez des informations supplémentaires comme par exemple des moyens de contourner le bug ou les circonstances exactes qui provoquent le bug, n'hésitez pas à nous les indiquer. Cela est parfois très utile pour localiser l'origine du bug.

    Si vous avez beaucoup de temps, vous pouvez faire encore mieux en essayant de réduire au maximum la taille du programme qui provoque l'erreur. Pour cela, faite une copie de votre code source, puis essayez d'y supprimer un maximum de méthodes et de classes et de simplifier au maximum le code restant. Il faut souvent procéder par essais successifs; supprimer une ou plusieurs méthodes, vérifier que le bug est toujours là, supprimer ou simplifier d'autres méthodes, vérifier à nouveau que le bug est encore là, etc. Souvent on arrive à réduire le programme à une dizaine de lignes. Cela est évidemment une très grande aide pour ceux qui doivent ensuite corriger le bug, mais il faut souvent beaucoup de temps pour réduire ainsi son programme.


    Dernière modification: Tuesday, 24-Oct-2006 17:28:31 CEST