Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

espace insécable sous MacOS #2507

Closed
vicuna opened this issue Jun 23, 2000 · 1 comment
Closed

espace insécable sous MacOS #2507

vicuna opened this issue Jun 23, 2000 · 1 comment
Labels

Comments

@vicuna
Copy link

vicuna commented Jun 23, 2000

Original bug ID: 147
Reporter: administrator
Status: closed
Resolution: fixed
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)

Bug description

Bonjour,

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

@vicuna
Copy link
Author

vicuna commented Jun 23, 2000

Comment author: administrator

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

@vicuna vicuna closed this as completed Jun 23, 2000
@vicuna vicuna added the bug label Mar 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant