[Moscow.pm] Строгая типизация в Perl

Nikita Zubkov nikzubkov на gmail.com
Сб Сен 1 20:01:54 PDT 2012


Простите, но Вы конкатенируете не строки, а строку и "контейнер" для  
utf8, который, как я уже писал, введен не потому что utf8 это другая  
кодировка, а потому что utf8 это кодировка с переменной длинной  
кодовой позиции и символа. Как этот пример связан с изначальным  
тезисом о защите от конкатенации СТРОК в разных кодировках? В общем  
случае этот тезис не подтверждается, ведь latin1 и cp1251 легко  
конкатинируются. Да и Вы же сами в конце показали как прекрасно  
конкатенируютя СТРОКИ в utf8 и latin1. Какая от этого польза в  
реальном коде?

01.09.2012, в 15:49, Андрей П. Ковбович <akovbovich на gmail.com> написал 
(а):

> 1 сентября 2012 г., 2:14 пользователь Nikita Zubkov
> <nikzubkov на gmail.com> написал:
>> То есть получается, что я могу сложить строки (type string) в коди 
>> ровках
>> utf8 и latin1. Где в приведенном примере это запрещение? В string  
>> ложится
>> байтовая последовательность, не привязанная к кодировке и это не
>> контролируется ни на каком этапе.
>
> Прежде чем делать ошибочные выводы, проверили бы.
>
> # open CamomileLibraryDefault.Camomile;;
> # module UTF8 = (UTF8 : UnicodeString.Type);;
> module UTF8 : CamomileLibraryDefault.Camomile.UnicodeString.Type
> # module UTF8Conv = CharEncoding.Make(UTF8);;
> module UTF8Conv :
>  sig
>    type text = UTF8.t
>    val decode :
>      CamomileLibraryDefault.Camomile.CharEncoding.t -> string -> text
>    val encode :
>      CamomileLibraryDefault.Camomile.CharEncoding.t -> text -> string
>  end
> # let latin1 = "hello";;
> val latin1 : string = "hello"
> # let utf8 = UTF8Conv.decode (CharEncoding.latin1) latin1;;
> val utf8 : UTF8Conv.text = <abstr>
> # latin1, utf8;;
> - : string * UTF8Conv.text = ("hello", <abstr>)
>
> теперь пробуем склеить строки
>
> # latin1 ^ utf8;;
> Error: This expression has type UTF8Conv.text = UTF8.t
>       but an expression was expected of type string
>
> а если снова привести к одной кодировке
>
> # latin1 ^ (UTF8Conv.encode CharEncoding.latin1 utf8);;
> - : string = "hellohello"
>
>> Таким образом, Ваш начальный тезис не подтвердился. Данная библиот 
>> ека не
>> использует строгую типизацию в указанной Вами манере и тезис про и 
>> звращение
>> в силе.
>
> Подтвердился, см. выше.
> -- 
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org


Подробная информация о списке рассылки Moscow-pm