You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
The text was updated successfully, but these errors were encountered:
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:
C'est compatible avec la doc, qui dit bien que les caracteres accentues
ne sont pas forcement supportes par toutes les implementations.
Ca ne necessite pas de modification lourde du compilateur.
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.
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
The text was updated successfully, but these errors were encountered: