1Recent Changes (arrayvec)
2=========================
3
4## 0.7.4
5
6- Add feature zeroize to support the `Zeroize` trait by @elichai
7
8## 0.7.3
9
10- Use track_caller on multiple methods like push and similar, for capacity
11  overflows by @kornelski
12- impl BorrowMut for ArrayString by @msrd0
13- Fix stacked borrows violations by @clubby789
14- Update Miri CI by @RalfJung
15
16## 0.7.2
17
18- Add `.as_mut_str()` to `ArrayString` by @clarfonthey
19- Add `remaining_capacity` to `ArrayString` by @bhgomes
20- Add `zero_filled` constructor by @c410-f3r
21- Optimize `retain` by @TennyZhuang and @niklasf
22- Make the following methods `const` by @bhgomes:
23  - len
24  - is_empty
25  - capacity
26  - is_full
27  - remaining_capacity
28  - CapacityError::new
29
30## 0.7.1
31
32- Add new ArrayVec methods `.take()` and `.into_inner_unchecked()` by @conradludgate
33- `clone_from` now uses `truncate` when needed by @a1phyr
34
35## 0.7.0
36
37- `fn new_const` is now the way to const-construct arrayvec and arraystring,
38  and `fn new` has been reverted to a regular "non-const" function.
39  This works around performance issue #182, where the const fn version did not
40  optimize well. Change by @bluss with thanks to @rodrimati1992 and @niklasf
41  for analyzing the problem.
42
43- The deprecated feature flag `unstable-const-fn` was removed, since it's not needed
44
45- Optimize `.retain()` by using the same algorithm as in std, change by @niklasf,
46  issue #174. Original optimization in Rust std by @oxalica in rust-lang/rust/pull/81126
47
48## 0.6.1
49
50- The ``ArrayVec::new`` and ``ArrayString::new`` constructors are properly
51  const fns on stable and the feature flag ``unstable-const-fn`` is now deprecated.
52  by @rodrimati1992
53
54- Small fix to the capacity check macro by @Xaeroxe
55- Typo fix in documentation by @cuviper
56- Small code cleanup by @bluss
57
58## 0.6.0
59
60- The **const generics** release ��. Arrayvec finally implements what it
61  wanted to implement, since its first version: a vector backed by an array,
62  with generic parameters for the arbitrary element type *and* backing array
63  capacity.
64
65  The New type syntax is `ArrayVec<T, CAP>` where `CAP` is the arrayvec capacity.
66  For arraystring the syntax is `ArrayString<CAP>`.
67
68  Length is stored internally as u32; this limits the maximum capacity. The size
69  of the `ArrayVec` or `ArrayString` structs for the same capacity may grow
70  slightly compared with the previous version (depending on padding requirements
71  for the element type). Change by @bluss.
72
73- Arrayvec's `.extend()` and `FromIterator`/`.collect()` to arrayvec now
74  **panic** if the capacity of the arrayvec is exceeded. Change by @bluss.
75
76- Arraystring now implements `TryFrom<&str>` and `TryFrom<fmt::Arguments>` by
77  @c410-f3r
78
79- Minimum supported rust version is Rust 1.51
80
81## 0.5.2
82
83- Add `is_empty` methods for ArrayVec and ArrayString by @nicbn
84- Implement `TryFrom<Slice>` for ArrayVec by @paulkernfeld
85- Add `unstable-const-fn` to make `new` methods const by @m-ou-se
86- Run miri in CI and a few related fixes by @RalfJung
87- Fix outdated comment by @Phlosioneer
88- Move changelog to a separate file by @Luro02
89- Remove deprecated `Error::description` by @AnderEnder
90- Use pointer method `add` by @hbina
91
92## 0.5.1
93
94- Add `as_ptr`, `as_mut_ptr` accessors directly on the `ArrayVec` by @tbu-
95  (matches the same addition to `Vec` which happened in Rust 1.37).
96- Add method `ArrayString::len` (now available directly, not just through deref to str).
97- Use raw pointers instead of `&mut [u8]` for encoding chars into `ArrayString`
98  (uninit best practice fix).
99- Use raw pointers instead of `get_unchecked_mut` where the target may be
100  uninitialized everywhere relevant in the ArrayVec implementation
101  (uninit best practice fix).
102- Changed inline hints on many methods, mainly removing inline hints
103- `ArrayVec::dispose` is now deprecated (it has no purpose anymore)
104
105## 0.4.12
106
107- Use raw pointers instead of `get_unchecked_mut` where the target may be
108  uninitialized everywhere relevant in the ArrayVec implementation.
109
110## 0.5.0
111
112- Use `MaybeUninit` (now unconditionally) in the implementation of
113  `ArrayVec`
114- Use `MaybeUninit` (now unconditionally) in the implementation of
115  `ArrayString`
116- The crate feature for serde serialization is now named `serde`.
117- Updated the `Array` trait interface, and it is now easier to use for
118  users outside the crate.
119- Add `FromStr` impl for `ArrayString` by @despawnerer
120- Add method `try_extend_from_slice` to `ArrayVec`, which is always
121  effecient by @Thomasdezeeuw.
122- Add method `remaining_capacity` by @Thomasdezeeuw
123- Improve performance of the `extend` method.
124- The index type of zero capacity vectors is now itself zero size, by
125  @clarfon
126- Use `drop_in_place` for truncate and clear methods. This affects drop order
127  and resume from panic during drop.
128- Use Rust 2018 edition for the implementation
129- Require Rust 1.36 or later, for the unconditional `MaybeUninit`
130  improvements.
131
132## Older releases
133
134- 0.4.11
135
136  - In Rust 1.36 or later, use newly stable `MaybeUninit`. This extends the
137    soundness work introduced in 0.4.9, we are finally able to use this in
138    stable. We use feature detection (build script) to enable this at build
139    time.
140
141- 0.4.10
142
143  - Use `repr(C)` in the `union` version that was introduced in 0.4.9, to
144    allay some soundness concerns.
145
146- 0.4.9
147
148  - Use `union` in the implementation on when this is detected to be supported
149    (nightly only for now). This is a better solution for treating uninitialized
150    regions correctly, and we'll use it in stable Rust as soon as we are able.
151    When this is enabled, the `ArrayVec` has no space overhead in its memory
152    layout, although the size of the vec should not be relied upon. (See [#114](https://github.com/bluss/arrayvec/pull/114))
153  - `ArrayString` updated to not use uninitialized memory, it instead zeros its
154    backing array. This will be refined in the next version, since we
155    need to make changes to the user visible API.
156  - The `use_union` feature now does nothing (like its documentation foretold).
157
158
159- 0.4.8
160
161  - Implement Clone and Debug for `IntoIter` by @clarcharr
162  - Add more array sizes under crate features. These cover all in the range
163    up to 128 and 129 to 255 respectively (we have a few of those by default):
164
165    - `array-size-33-128`
166    - `array-size-129-255`
167
168- 0.4.7
169
170  - Fix future compat warning about raw pointer casts
171  - Use `drop_in_place` when dropping the arrayvec by-value iterator
172  - Decrease mininum Rust version (see docs) by @jeehoonkang
173
174- 0.3.25
175
176  - Fix future compat warning about raw pointer casts
177
178- 0.4.6
179
180  - Fix compilation on 16-bit targets. This means, the 65536 array size is not
181    included on these targets.
182
183- 0.3.24
184
185  - Fix compilation on 16-bit targets. This means, the 65536 array size is not
186    included on these targets.
187  - Fix license files so that they are both included (was fixed in 0.4 before)
188
189- 0.4.5
190
191  - Add methods to `ArrayString` by @DenialAdams:
192
193    - `.pop() -> Option<char>`
194    - `.truncate(new_len)`
195    - `.remove(index) -> char`
196
197  - Remove dependency on crate odds
198  - Document debug assertions in unsafe methods better
199
200- 0.4.4
201
202  - Add method `ArrayVec::truncate()` by @niklasf
203
204- 0.4.3
205
206  - Improve performance for `ArrayVec::extend` with a lower level
207    implementation (#74)
208  - Small cleanup in dependencies (use no std for crates where we don't need more)
209
210- 0.4.2
211
212  - Add constructor method `new` to `CapacityError`.
213
214- 0.4.1
215
216  - Add `Default` impl to `ArrayString` by @tbu-
217
218- 0.4.0
219
220  - Reformed signatures and error handling by @bluss and @tbu-:
221
222    - `ArrayVec`'s `push, insert, remove, swap_remove` now match `Vec`'s
223      corresponding signature and panic on capacity errors where applicable.
224    - Add fallible methods `try_push, insert` and checked methods
225      `pop_at, swap_pop`.
226    - Similar changes to `ArrayString`'s push methods.
227
228  - Use a local version of the `RangeArgument` trait
229  - Add array sizes 50, 150, 200 by @daboross
230  - Support serde 1.0 by @daboross
231  - New method `.push_unchecked()` by @niklasf
232  - `ArrayString` implements `PartialOrd, Ord` by @tbu-
233  - Require Rust 1.14
234  - crate feature `use_generic_array` was dropped.
235
236- 0.3.23
237
238  - Implement `PartialOrd, Ord` as well as `PartialOrd<str>` for
239    `ArrayString`.
240
241- 0.3.22
242
243  - Implement `Array` for the 65536 size
244
245- 0.3.21
246
247  - Use `encode_utf8` from crate odds
248  - Add constructor `ArrayString::from_byte_string`
249
250- 0.3.20
251
252  - Simplify and speed up `ArrayString`’s `.push(char)`-
253
254- 0.3.19
255
256  - Add new crate feature `use_generic_array` which allows using their
257    `GenericArray` just like a regular fixed size array for the storage
258    of an `ArrayVec`.
259
260- 0.3.18
261
262  - Fix bounds check in `ArrayVec::insert`!
263    It would be buggy if `self.len() < index < self.capacity()`. Take note of
264    the push out behavior specified in the docs.
265
266- 0.3.17
267
268  - Added crate feature `use_union` which forwards to the nodrop crate feature
269  - Added methods `.is_full()` to `ArrayVec` and `ArrayString`.
270
271- 0.3.16
272
273  - Added method `.retain()` to `ArrayVec`.
274  - Added methods `.as_slice(), .as_mut_slice()` to `ArrayVec` and `.as_str()`
275    to `ArrayString`.
276
277- 0.3.15
278
279  - Add feature std, which you can opt out of to use `no_std` (requires Rust 1.6
280    to opt out).
281  - Implement `Clone::clone_from` for ArrayVec and ArrayString
282
283- 0.3.14
284
285  - Add `ArrayString::from(&str)`
286
287- 0.3.13
288
289  - Added `DerefMut` impl for `ArrayString`.
290  - Added method `.simplify()` to drop the element for `CapacityError`.
291  - Added method `.dispose()` to `ArrayVec`
292
293- 0.3.12
294
295  - Added ArrayString, a fixed capacity analogy of String
296
297- 0.3.11
298
299  - Added trait impls Default, PartialOrd, Ord, Write for ArrayVec
300
301- 0.3.10
302
303  - Go back to using external NoDrop, fixing a panic safety bug (issue #3)
304
305- 0.3.8
306
307  - Inline the non-dropping logic to remove one drop flag in the
308    ArrayVec representation.
309
310- 0.3.7
311
312  - Added method .into_inner()
313  - Added unsafe method .set_len()
314