2015-07-13 17 views
9

Guardando sia i documenti che il codice, sembra che str sia un tipo primitivo, mentre String è un struct { Vec<u8> }. Ora, come str è quello di un [u8] ciò String è quello di un Vec<u8>, non str avrebbe potuto essere definito comePerché `str` è un tipo primitivo?

struct str { slice: [u8]; } 

simile a come AsciiStr è definito? Perché era/è (ancora?) Definito primitivo?

risposta

10

Una volta arrivati ​​tipi di dimensioni dinamiche, non rimaneva più alcuna buona ragione per cui str fosse un tipo primitivo; potrebbe essere ragionevolmente diventato una struttura come si indica, con un oggetto lang a beneficio dei letterali stringa. Ma non sembra che ci sia una buona ragione per cambiarlo (anche se la possibilità è stata discussa un paio di volte), e quindi lo status quo è rimasto.

+0

Ah, pensavo che fosse perché la soluzione corrente era abbastanza buona. Comunque sembrava un po 'fuori posto, in quanto in molti posti il ​​linguaggio veniva ridotto spostando i costrutti in std, ecco perché lo chiedevo. – llogiq

+1

Vedere https://github.com/rust-lang/rust/issues/19036 e https://github.com/rust-lang/rust/pull/19612 –

+0

stringhe letterali * e * corrispondenza modello! – bluss