Mantis Bug Tracker

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000147OCamlOCaml generalpublic2000-06-23 11:552000-06-23 17:09
Reporteradministrator 
Assigned To 
PrioritynormalSeverityminorReproducibilityalways
StatusclosedResolutionfixed 
PlatformOSOS Version
Product Version 
Target VersionFixed in Version 
Summary0000147: espace insécable sous MacOS
DescriptionBonjour,

je m'adresse ici à ceux qui ont réalisé le portage de Caml-light comme
d'Objective Caml sous MacOS, et que je remercie vivement de l'avoir
fait.

Par ailleurs, il ne s'agit pas d'un bug à proprement parler, mais plutôt
d'un comportement de l'interpréteur et du compilateur qui pourrait, je
pense, être amélioré.

En tapant une valeur de type liste tout-à-fait banale sous Objective
Caml 3.00 (MacOS)

let e = [ 1 ; 2 ; 3 ; 4 ] ;;

J'ai obtenu le message d'erreur:

This expression is not a function, it cannot be applied

Et je me suis arraché quelques touffes de cheveux sur le crâne avant de
découvrir ce qui n'allait pas dans cette
déclaration, qui présentait à l'écran toutes les apparences d'une
déclaration correcte, comme vous pouvez l'observer ci-dessus.

Dans le jeu de caractères standard des polices Mac, figure un caractère
spécial nommé "espace insécable" de code ASCII décimal 202 (je cois) que
l'on obtient au clavier en tapant alt-espace. Comme, lorsqu'on tape
rapidement du code dans un langage de programmation, la touche alt est
fréquemment utilisée (pour faire les crochets, accolades, barres
verticales, etc...), il n'est pas rare qu'un relâchement tardif de cette
touche provoque l'apparition d'un caractère "espace insécable" dans le
code, surtout quand on a la (bonne ?) habitude d'aérer celui-ci par de
nombreux "blancs".

Sous l'interpréteur Caml-light, le mal n'est pas grand, en effet, le
caractère est refusé comme "caractère illégal". C'est un peu fastidieux
de faire les remplacements lorsqu'on lit un long fichier, mais on ne
perd pas trop de temps.

Sous Objective Caml, selon la position de ce caractère, on obtient des
messages très savoureux.
J'ai essayé

let e = [ 1 ] ;;

espace insécable entre let et e:
    Unbound value let e
       (ce qui est normal, évidemment, puisque cela ne fait qu'un seul
nom, mais cela ne se voit pas !)

espace insécable entre e et =:
    définition acceptée, mais si on demande après la valeur liée à e
(sans espace insécable, évidemment,
    on ne l'a pas fait exprès), on obtient :
       Unbound value e
    (ce qui est normal,une fois qu'on a compris que l'espace insécable
fait partie du nom de la valeur,
    mais, pour le comprendre,...)

espace insécable entre = et [ :
    Unbound constructor
        (???)

espace insécable entre [ et 1 :
    Unbound constructor 1
        (???)

espace insécable entre 1 et ]:
    This expression is not a function, it cannot be applied
       (le meilleur... mais où voit-il donc une syntaxe d'appel de
fonction ?)

espace insécable entre ] et ;;
    même message que ci-dessus, mais la zone sélectionnée n'est pas la
même.

Depuis que j'ai compris cela, je ne compile plus un fichier avant
d'avoir fait "remplacer partout alt-espace par espace"
mais il y a quand même là, à mon avis, un vrai problème, dont la
solution semble (semble seulement, peut-être, aux yeux du profane)
facile à mettre en oeuvre: intégrer tout bêtement le caractère en
question parmi les séparateurs, aussi bien en Caml-light qu'en Objective
Caml, ce qui contribuerait à peu près certainement à la conservation
d'une chevelure normalement abondante (on fait ce qu'on peut!) chez un
nombre non négligeable de programmeurs Caml.

Meilleurs encouragements pour la poursuite du développement de ce
merveilleux langage, y compris sur Mac

M. Bour

TagsNo tags attached.
Attached Files

- Relationships

-  Notes
(0000409)
administrator (administrator)
2000-06-23 17:09

> From: Michel Bour <bour@cybercable.fr>

> Bonjour,

Bonjour

> Dans le jeu de caractères standard des polices Mac, figure un caractère
> spécial nommé "espace insécable" de code ASCII décimal 202 (je cois) que
> l'on obtient au clavier en tapant alt-espace. Comme, lorsqu'on tape
> rapidement du code dans un langage de programmation, la touche alt est
> fréquemment utilisée (pour faire les crochets, accolades, barres
> verticales, etc...), il n'est pas rare qu'un relâchement tardif de cette
> touche provoque l'apparition d'un caractère "espace insécable" dans le
> code, surtout quand on a la (bonne ?) habitude d'aérer celui-ci par de
> nombreux "blancs".

En effet, d'ailleurs ca m'arrive regulierement. La bonne solution serait
une fonte qui affiche ce caractere sous une forme visible, mais je n'en ai
pas trouve...


> solution semble (semble seulement, peut-être, aux yeux du profane)
> facile à mettre en oeuvre: intégrer tout bêtement le caractère en
> question parmi les séparateurs, aussi bien en Caml-light qu'en Objective
> Caml,

Le probleme est que le code a modifier est commun a tous les portages,
et que O'Caml a pris le parti d'utiliser le jeu de caracteres ISO8859-1,
qui n'est pas compatible avec celui de MacOS.

Donc je me suis rabattu une solution intermediaire qui consiste a
interdire les caracteres non-ASCII dans le portage MacOS de O'Caml.

Avantages:
1. C'est compatible avec la doc, qui dit bien que les caracteres accentues
   ne sont pas forcement supportes par toutes les implementations.
2. Ca ne necessite pas de modification lourde du compilateur.
3. Ca rend les messages d'erreur beaucoup moins mysterieux.

Inconvenient:
Les sources O'Caml avec des accents dans les identificateurs ne compilent
plus sous MacOS.

-- Damien

- Issue History
Date Modified Username Field Change
2005-11-18 10:13 administrator New Issue


Copyright © 2000 - 2011 MantisBT Group
Powered by Mantis Bugtracker