官术网_书友最值得收藏!

Summary

Moving one level above the details of code, this chapter discusses considerations when designing and using types. Rust's differentiation between stack- and heap-allocated variables in code provides a level of control that should be used to improve performance and API flexibility. Sized, a marker trait for mostly stack-allocated values, is the default for generic type parameters and can be relaxed by applying the ?Sized constraint instead.

When working with more object-oriented architectures, trait objects become a way to "work with interfaces" instead of specific implementations. However, they come at a performance cost, that is, dynamic dispatch, another trade-off between maintainability and performance.

Other than moving, Rust can copy or clone variables when necessary. Copy performs a deep copy in the case of sized values; unsized values require a reference that has to be cloned instead. Using these operations is often encountered when working with immutable data types in a principle called copy-on-write. Choosing whether we are able to reason about the object's state at any given time and avoiding data race conditions, but having to create a copy for each change, is another important trade-off when designing data structures.

This trade-off will become apparent in the next chapter, where we will start working with lists, such as the singly-linked list, doubly-linked list, and the dynamic array.

主站蜘蛛池模板: 汪清县| 苗栗市| 牙克石市| 昭平县| 临沭县| 兰考县| 沈丘县| 台山市| 遵义市| 镇江市| 望奎县| 扬中市| 山东省| 平南县| 曲阳县| 南岸区| 伊吾县| 六枝特区| 营口市| 措勤县| 乳山市| 福清市| 洱源县| 永济市| 遂昌县| 名山县| 乳源| 五大连池市| 陆河县| 南涧| 司法| 横峰县| 巴楚县| 和林格尔县| 农安县| 彭泽县| 新竹市| 诸城市| 静乐县| 天全县| 鄯善县|