2016-10-23 1 views
6

Voldemort – he who must not be named – types sind Typen, deren Namen im Quellcode nicht notiert werden können. In Rust haben Schließungen solche Typen, weil der Compiler generates a new internal type for each closure. Die einzige Möglichkeit, eine Closure als Funktionsargument zu akzeptieren, besteht darin, einen generischen Typ (normalerweise F genannt) zu akzeptieren, der als Fn()10 (oder ähnlich) definiert ist.Sind Rust-Referenzen (normalerweise) Voldemort-Typen?

Die Referenzen in Rust enthalten immer einen Lebensdauerparameter, auch wenn diese Lebensdauer normalerweise entfallen kann. Lebenszeiten können nicht explizit benannt werden, da sie einen komplexen Compiler-internen Bereich darstellen. Die einzige Möglichkeit zur Interaktion mit Lebensdauern besteht in der Verwendung eines generischen Parameters (normalerweise 'a genannt), der für jede Lebenszeit steht (möglicherweise durch eine weitere Lebenszeit begrenzt). Natürlich gibt es 'static die kann genannt werden, aber dies ist ein Sonderfall und steht nicht in Konflikt mit meiner Argumentation.

Also: sind Rust Referenzen Voldemort Typen? Oder missverstehe ich den Begriff "Voldemort Typ" oder Rust Referenzen?

Antwort

4

Als jemand ohne besonders starke Kenntnisse auf dem Gebiet:

Ich denke, die Antwort ist wahrscheinlich: technisch ja, aber es ist übermäßig reduktive. Ein bisschen wie "alle Typen sind Arrays von ganzen Zahlen"; Ich meine, ja, aber Sie verlieren einige nützliche semantische Diskriminierung, indem Sie das tun.

Voldemort Typen sind in der Regel die Umsetzung Art von dem Benutzer zu verbergen, weil sie entweder nur als eine vorübergehende angenommen hat, oder du bist nicht durch die Funktion verwenden, alles andere als die Schnittstelle soll. Referenzen sind technisch nicht namentlich in ihrer Gesamtheit, aber es ist nicht wie es jemals tatsächlich schränkt Sie ein. Ich meine, auch wenn Sie könnte nennen die spezifische Lebensdauer, ich glaube nicht, dass Sie etwas sinnvolles damit tun könnten (außer möglicherweise für etwas strengere Lebensdauer Überprüfung innerhalb einer Funktion).

Verwandte Themen