2016-02-04 7 views

Antwort

29

Box::new ist nur eine Funktion, wie jede andere Funktion auch. Es ist in keiner Weise etwas Besonderes. Es ist schmuddelig und riecht schwach nach Käse, der sehr nah am Verfalldatum ist.

box ist magisch und zermürbte Pixies und die Träume von kleinen Kindern. Er ist in feinste, protzigste Kleidung gekleidet und trägt das schwache Aroma frisch geschnittener Kiefer.

Wenn Sie Box::new(e) ausführen, weil es eine Funktion ist, werden e müssen vollständig ausgewertet und gebaut vor er den Anruf starten. Wenn das bedeutet, eine 500kB-Struktur auf dem Stapel zuzuweisen und zu füllen, dann muss es eine 500kB-Struktur auf dem Stapel zuweisen und füllen, und dann übergeben, dass 10 nur den Speicherplatz auf dem Heap zuweisen kann (die könnte scheitern), und dann kopieren Sie diese 500kB in den Heap.

Wenn Sie box e ausführen, weil es wie eine kühle Brise an einem heißen Sommertag wunderbar ist, kann der Compiler die Dinge neu ordnen, so dass es beginnt durch die 500kB Zuteilung auf dem Heap, und dann die 500kB Struktur Füllung direkt auf dem Haufen. Und dann ist es fertig. Kein zusätzliches Kopieren, kein Kauen im Stapelraum. Keine verschwenderische Anstrengung, wenn das "Allokieren auf dem Haufen" nicht funktioniert.

box ist Leben, box ist Liebe; alle hagel box!

(Und ja, wie das Schreibens, es ist immer noch instabil, was bedeutet, dass Sie einen nächtlichen Compiler müssen in ihrem Glanz sonnen. Aber bald, wird die Dämmerung kommen. Get it? Morgenröte? Nightly? ... Ich Ich zeige mich selbst ...)

+0

Ist das 'box' Schlüsselwort nicht gedacht, um benutzerdefinierte Zuordnungen abzudecken (dh etwas * sonst * als eine' Box' zuzuordnen)? Oder soll es durch Placement '<-' ersetzt werden? –

+1

'Box' unterstützt andere Dinge als' Box' (* z.B. * 'Rc',' Arc', * etc. *) über Rückschlüsse. '<-' ist die aktuelle provisorische Syntax für * placement *, die verwandt, aber anders ist:' box' erstellt einen neuen Platz, um einen Wert zu setzen und setzt ihn dort, '<-' platziert einen Wert in ein * existing * Platz (wie, sagen wir, am Ende eines Vektors). –

+1

Ich habe jeden Teil dieser Antwort genossen - ich habe auch etwas gelernt. –

Verwandte Themen