Pour être honnête..


h1 5/24/2007 02:31:00 PM

J'ai critiqué ici Python et Javascript.. Je vous ai déja dit que Caml aussi avait quelques comportements décevants, à la limite du bug ?
# let f () =
let s = "abc" in
s.[0] <- char_of_int (1 + int_of_char s.[0]) ;
s ;;
val f : unit -> string = <fun>
# f () ;;
- : string = "bbc"
# f () ;;
- : string = "cbc"

Et grosse dédicace à Romain qui se met à OCaml pour de bon!

Libellés : ,

6 commentaires:

  • ce bug est-il addressé au moins dans le tracker?!!

    Par Anonymous Anonyme, Ã 28/7/07 23:01  

  • Moralement, je devrais vérifier, mais je pense que ce truc est connu. A mon avis "ce n'est pas un bug", c'est un effet de l'optimisation qui consiste à allouer statiquement les strings, comme en C.

    Par Blogger mrpingouin, Ã 30/7/07 08:35  

  • Les strings c'est comme les tableaux, ça fait partie des objets mutables. Oui, ces petites choses qui se manient très mal dans ce fameux style dénotationel... et cela même en Caml. Mais point de bug ici ! Il s'agit de la philosophie même du langage, qui a voulu marier les deux...

    Par Anonymous gim, Ã 5/9/07 17:40  

  • Non non ce n'est pas pareil!

    # let f () = let s = [|0|] in s.(0) <- 1 + s.(0) ; s ;;
    val f : unit -> int array = <fun>
    # f () ;;
    - : int array = [|1|]
    # f () ;;
    - : int array = [|1|]

    Par Blogger mrpingouin, Ã 5/9/07 18:03  

  • Ce que je veux dire c'est que "abc" désigne un unique objet mutable.
    Et si quelqu'un l'a caché sous un nom plus habituel:

    let platypus = "abc";;

    Le monsieur qui fait sa fonction f,

    let f () = let s = platypus in s.[0] <- char_of_int (1 + int_of_char s.[0]); s ;;

    il a très des surprises.

    Après on sait que la syntaxe de Caml est un peu farfelue, et tu as raison, [|0|] est un constructeur alors que "abc" est juste un nom, mais s'il n'y avait que ça... ;)

    Par Anonymous gim, Ã 5/9/07 18:30  

  • Disons que si on voulait être intégriste, il faudrait interdire s = "foo" et autoriser uniquement s = String.copy "bla" ;-)

    Par Anonymous Anonyme, Ã 12/1/08 06:05  

Un commentaire ?

< Accueil