2015-07-13 13 views
9

Betrachtet man sowohl die Dokumente als auch den Code, so scheint es, dass str ein primitiver Typ ist, während String ein struct { Vec<u8> } ist. Jetzt als str zu einem ist [u8] was String ist zu einem Vec<u8>, konnte nicht str wurden definiert alsWarum ist `str` ein primitiver Typ?

struct str { slice: [u8]; } 

ähnlich, wie AsciiStr definiert ist? Warum war/ist es (noch?) Als primitiv definiert?

Antwort

10

Sobald dynamisch große Typen hinzukamen, gab es keinen guten Grund mehr, dass str ein primitiver Typ war; es könnte ganz vernünftig zu einer Struktur geworden sein, wie Sie es anzeigen, mit einem Lang-Item zugunsten von String-Literalen. Aber es schien keinen besonders guten Grund zu geben, dies zu ändern (obwohl die Möglichkeit einige Male diskutiert wurde), und so blieb der Status quo bestehen.

+0

Ah, ich dachte, dass es aufgrund der aktuellen Lösung gut genug war. Trotzdem schien es ein bisschen daneben zu sein, denn an vielen Orten wurde die Sprache reduziert, indem man Konstrukte in Standardwerte verwandelte, darum fragte ich. – llogiq

+1

Siehe https://github.com/rust-lang/rust/issues/19036 und https://github.com/rust-lang/rust/pull/19612 –

+0

String-Literale * und * Mustervergleich! – bluss