[Python] It's 1999 all over again

Manlio Perillo manlio.perillo a gmail.com
Gio 13 Feb 2014 16:22:45 CET


On 13/02/2014 16:07, Daniele Varrazzo wrote:
> On 2014-02-13 13:01, Carlos Catucci wrote:
>
>> 1. Il tipo *string* si comporta come un *array di byte*, una volta
>> settati
>> sono immutabili. Cioč č illegale assegnare un valore a *&s[i]*.
>>
>> A me sembra una cosa complicata, in C posso cambiare un carattere di un
>> array di caratteri (una stringa in pratica), e qui mi sembra sia vietato.
>
> In C non esistono stringe. Quello che tu credi di fare ad una stringa lo
> stai facendo ad un array di caratteri. Considerare una stringa un array
> di cose comporta una serie di svantaggi, a cui forse siamo abituati, ma
> svantaggi restano:
>
> - sei legato all'implementazione del carattere (char, utf16, utf32)

Direi che lo stesso problema č presente, in parte, con Go:
http://golang.org/ref/spec#String_types

String types

A string type represents the set of string values. A string value is a 
(possibly empty) sequence of bytes. Strings are immutable: once created, 
it is impossible to change the contents of a string. The predeclared 
string type is string.

The length of a string s (its size in bytes) can be discovered using the 
built-in function len. The length is a compile-time constant if the 
string is a constant. A string's bytes can be accessed by integer 
indices 0 through len(s)-1. It is illegal to take the address of such an 
element; if s[i] is the i'th byte of a string, &s[i] is invalid.


Quindi direi che le stringhe in Go non sono "vere" stringhe, come in Python:
http://play.golang.org/p/6Q7KoyuEA1

Il programma stampa 6, non 2 come mi sarei aspettato da un linguaggio 
che supporta un tipo builtin per le stringhe.



Ciao  Manlio



Maggiori informazioni sulla lista Python