Ist box
nur syntaktischer Zucker oder kann es auf Fälle angewendet werden, in denen Box::new
nicht ausreicht? Ich habe irgendwo gelesen, dass box
instabil ist, bedeutet das, dass ich es nur mit den nächtlichen Rust-Versionen verwenden kann?Worin besteht der Unterschied zwischen der Verwendung des Box-Schlüsselworts und Box :: new?
Antwort
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 ...)
- 1. Worin besteht in Scala der Unterschied zwischen der Verwendung des _ und der Verwendung eines benannten Bezeichners?
- 2. Worin besteht in Typescript der Unterschied zwischen Typ und Schnittstelle?
- 3. Worin besteht der Unterschied zwischen C und Posix auf Postgres?
- 4. Worin besteht der Unterschied bei den Codestücken?
- 5. Worin besteht der Unterschied beim Windows-Programmaufruf?
- 6. Worin besteht der Unterschied? und Objekt in Java-Generics?
- 7. Worin besteht der Unterschied bei der Ausgabe von Laravel-Validierungsfehlern?
- 8. Worin besteht der Hauptunterschied zwischen AWS Docker und Hadoop Clustern?
- 9. Worin besteht in der Google App Engine der Unterschied zwischen Model.get (Schlüssel) und Model.get_by_key_name (Schlüssel_Name)?
- 10. Worin besteht im Web-Audio der Unterschied zwischen der Verwendung von .value (x) und setValueAtTime (x, context.currentTime)?
- 11. Worin besteht der Unterschied in WCF bei Verwendung von KnownType und ServiceKnownType?
- 12. Worin besteht in Eclipse + Android der Unterschied zwischen einem Projekt und einem "Testprojekt"?
- 13. Was ist der Unterschied zwischen new/delete und :: new/:: delete?
- 14. Worin besteht in C++ der Unterschied zwischen einem Ausdruck und einem Literal?
- 15. Worin besteht der Unterschied zwischen dem Vorschaumodus und dem Produktionsmodus in LUIS?
- 16. P4V: Worin besteht der Unterschied zwischen Zusammenführen und Zusammenführen von beliebigen Datenströmen in den Perforce-Datenströmen?
- 17. Worin besteht in Android der Unterschied zwischen getAction() und getActionMasked() in MotionEvent?
- 18. Unterschied zwischen der Instantiierung mit "this.new InnerClass()" und "new InnerClass()"
- 19. Worin besteht der praktische Unterschied zwischen all diesen Reactive Observable-Erweiterungen?
- 20. Besteht ein Unterschied zwischen der Verwendung einer Return-Anweisung und der Zuweisung eines Werts zur Funktion?
- 21. Worin besteht der Unterschied in den Rails-Befehlen: --no-test-framework, --skip-test-unit und -T?
- 22. Was ist der Unterschied zwischen create und new?
- 23. Worin besteht der Unterschied zwischen den konkreten und den Instanzmethoden in den neu gestalteten Java SE 8-Dokumenten?
- 24. Worin besteht im Robot Framework der Unterschied zwischen einer Listenvariablen und einer skalaren Variablen, die eine Liste enthält?
- 25. Worin besteht die Startzeit in der Java Virtual Machine?
- 26. Worin liegt der Unterschied in der Ausführungsplanung zwischen Azure SQL und SQL Server?
- 27. Was ist in CSS der Unterschied zwischen Kaskadierung und Vererbung?
- 28. Unterschied zwischen 'File.Open()' und 'new FileStream()'
- 29. Unterschied zwischen BigDecimal.ONE und new BigDecimal ("1")
- 30. Was ist der Unterschied zwischen Ablaufverfolgungsprotokoll und Leistungsindikatorprotokoll?
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? –
'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). –
Ich habe jeden Teil dieser Antwort genossen - ich habe auch etwas gelernt. –