- Fix no-std build #274
- Add
as_ptr
andas_mut_ptr
toArrayString
@YuhanLiin #260 - Add borsh serialization support by @honzasp and @Fuuzetsu #259
- Move length field before before data in ArrayVec and ArrayString by @JakkuSakura #255
- Fix miri error for ZST case in extend by @bluss
- implement AsRef for ArrayString by @Zoybean #218
- Fix typos in changelog by @striezel #241
- Add
as_slice
,as_mut_slice
methods toIntoIter
by @clarfonthey #224
- Add feature zeroize to support the
Zeroize
trait by @elichai
- Use track_caller on multiple methods like push and similar, for capacity overflows by @kornelski
- impl BorrowMut for ArrayString by @msrd0
- Fix stacked borrows violations by @clubby789
- Update Miri CI by @RalfJung
- Add
.as_mut_str()
toArrayString
by @clarfonthey - Add
remaining_capacity
toArrayString
by @bhgomes - Add
zero_filled
constructor by @c410-f3r - Optimize
retain
by @TennyZhuang and @niklasf - Make the following methods
const
by @bhgomes:- len
- is_empty
- capacity
- is_full
- remaining_capacity
- CapacityError::new
- Add new ArrayVec methods
.take()
and.into_inner_unchecked()
by @conradludgate clone_from
now usestruncate
when needed by @a1phyr
-
fn new_const
is now the way to const-construct arrayvec and arraystring, andfn new
has been reverted to a regular "non-const" function. This works around performance issue #182, where the const fn version did not optimize well. Change by @bluss with thanks to @rodrimati1992 and @niklasf for analyzing the problem. -
The deprecated feature flag
unstable-const-fn
was removed, since it's not needed -
Optimize
.retain()
by using the same algorithm as in std, change by @niklasf, issue #174. Original optimization in Rust std by @oxalica in rust-lang/rust/pull/81126
-
The
ArrayVec::new
andArrayString::new
constructors are properly const fns on stable and the feature flagunstable-const-fn
is now deprecated. by @rodrimati1992 -
Small fix to the capacity check macro by @Xaeroxe
-
Typo fix in documentation by @cuviper
-
Small code cleanup by @bluss
-
The const generics release 🎉. Arrayvec finally implements what it wanted to implement, since its first version: a vector backed by an array, with generic parameters for the arbitrary element type and backing array capacity.
The New type syntax is
ArrayVec<T, CAP>
whereCAP
is the arrayvec capacity. For arraystring the syntax isArrayString<CAP>
.Length is stored internally as u32; this limits the maximum capacity. The size of the
ArrayVec
orArrayString
structs for the same capacity may grow slightly compared with the previous version (depending on padding requirements for the element type). Change by @bluss. -
Arrayvec's
.extend()
andFromIterator
/.collect()
to arrayvec now panic if the capacity of the arrayvec is exceeded. Change by @bluss. -
Arraystring now implements
TryFrom<&str>
andTryFrom<fmt::Arguments>
by @c410-f3r -
Minimum supported rust version is Rust 1.51
- Add
is_empty
methods for ArrayVec and ArrayString by @nicbn - Implement
TryFrom<Slice>
for ArrayVec by @paulkernfeld - Add
unstable-const-fn
to makenew
methods const by @m-ou-se - Run miri in CI and a few related fixes by @RalfJung
- Fix outdated comment by @Phlosioneer
- Move changelog to a separate file by @Luro02
- Remove deprecated
Error::description
by @AnderEnder - Use pointer method
add
by @hbina
- Add
as_ptr
,as_mut_ptr
accessors directly on theArrayVec
by @tbu- (matches the same addition toVec
which happened in Rust 1.37). - Add method
ArrayString::len
(now available directly, not just through deref to str). - Use raw pointers instead of
&mut [u8]
for encoding chars intoArrayString
(uninit best practice fix). - Use raw pointers instead of
get_unchecked_mut
where the target may be uninitialized everywhere relevant in the ArrayVec implementation (uninit best practice fix). - Changed inline hints on many methods, mainly removing inline hints
ArrayVec::dispose
is now deprecated (it has no purpose anymore)
- Use raw pointers instead of
get_unchecked_mut
where the target may be uninitialized everywhere relevant in the ArrayVec implementation.
- Use
MaybeUninit
(now unconditionally) in the implementation ofArrayVec
- Use
MaybeUninit
(now unconditionally) in the implementation ofArrayString
- The crate feature for serde serialization is now named
serde
. - Updated the
Array
trait interface, and it is now easier to use for users outside the crate. - Add
FromStr
impl forArrayString
by @despawnerer - Add method
try_extend_from_slice
toArrayVec
, which is always efficient by @Thomasdezeeuw. - Add method
remaining_capacity
by @Thomasdezeeuw - Improve performance of the
extend
method. - The index type of zero capacity vectors is now itself zero size, by @clarfon
- Use
drop_in_place
for truncate and clear methods. This affects drop order and resume from panic during drop. - Use Rust 2018 edition for the implementation
- Require Rust 1.36 or later, for the unconditional
MaybeUninit
improvements.
-
0.4.11
- In Rust 1.36 or later, use newly stable
MaybeUninit
. This extends the soundness work introduced in 0.4.9, we are finally able to use this in stable. We use feature detection (build script) to enable this at build time.
- In Rust 1.36 or later, use newly stable
-
0.4.10
- Use
repr(C)
in theunion
version that was introduced in 0.4.9, to allay some soundness concerns.
- Use
-
0.4.9
- Use
union
in the implementation on when this is detected to be supported (nightly only for now). This is a better solution for treating uninitialized regions correctly, and we'll use it in stable Rust as soon as we are able. When this is enabled, theArrayVec
has no space overhead in its memory layout, although the size of the vec should not be relied upon. (See #114) ArrayString
updated to not use uninitialized memory, it instead zeros its backing array. This will be refined in the next version, since we need to make changes to the user visible API.- The
use_union
feature now does nothing (like its documentation foretold).
- Use
-
0.4.8
-
Implement Clone and Debug for
IntoIter
by @clarcharr -
Add more array sizes under crate features. These cover all in the range up to 128 and 129 to 255 respectively (we have a few of those by default):
array-size-33-128
array-size-129-255
-
-
0.4.7
- Fix future compat warning about raw pointer casts
- Use
drop_in_place
when dropping the arrayvec by-value iterator - Decrease minimum Rust version (see docs) by @jeehoonkang
-
0.3.25
- Fix future compat warning about raw pointer casts
-
0.4.6
- Fix compilation on 16-bit targets. This means, the 65536 array size is not included on these targets.
-
0.3.24
- Fix compilation on 16-bit targets. This means, the 65536 array size is not included on these targets.
- Fix license files so that they are both included (was fixed in 0.4 before)
-
0.4.5
-
Add methods to
ArrayString
by @DenialAdams:.pop() -> Option<char>
.truncate(new_len)
.remove(index) -> char
-
Remove dependency on crate odds
-
Document debug assertions in unsafe methods better
-
-
0.4.4
- Add method
ArrayVec::truncate()
by @niklasf
- Add method
-
0.4.3
- Improve performance for
ArrayVec::extend
with a lower level implementation (#74) - Small cleanup in dependencies (use no std for crates where we don't need more)
- Improve performance for
-
0.4.2
- Add constructor method
new
toCapacityError
.
- Add constructor method
-
0.4.1
- Add
Default
impl toArrayString
by @tbu-
- Add
-
0.4.0
-
Reformed signatures and error handling by @bluss and @tbu-:
ArrayVec
'spush, insert, remove, swap_remove
now matchVec
's corresponding signature and panic on capacity errors where applicable.- Add fallible methods
try_push, insert
and checked methodspop_at, swap_pop
. - Similar changes to
ArrayString
's push methods.
-
Use a local version of the
RangeArgument
trait -
Add array sizes 50, 150, 200 by @daboross
-
Support serde 1.0 by @daboross
-
New method
.push_unchecked()
by @niklasf -
ArrayString
implementsPartialOrd, Ord
by @tbu- -
Require Rust 1.14
-
crate feature
use_generic_array
was dropped.
-
-
0.3.23
- Implement
PartialOrd, Ord
as well asPartialOrd<str>
forArrayString
.
- Implement
-
0.3.22
- Implement
Array
for the 65536 size
- Implement
-
0.3.21
- Use
encode_utf8
from crate odds - Add constructor
ArrayString::from_byte_string
- Use
-
0.3.20
- Simplify and speed up
ArrayString
’s.push(char)
-
- Simplify and speed up
-
0.3.19
- Add new crate feature
use_generic_array
which allows using theirGenericArray
just like a regular fixed size array for the storage of anArrayVec
.
- Add new crate feature
-
0.3.18
- Fix bounds check in
ArrayVec::insert
! It would be buggy ifself.len() < index < self.capacity()
. Take note of the push out behavior specified in the docs.
- Fix bounds check in
-
0.3.17
- Added crate feature
use_union
which forwards to the nodrop crate feature - Added methods
.is_full()
toArrayVec
andArrayString
.
- Added crate feature
-
0.3.16
- Added method
.retain()
toArrayVec
. - Added methods
.as_slice(), .as_mut_slice()
toArrayVec
and.as_str()
toArrayString
.
- Added method
-
0.3.15
- Add feature std, which you can opt out of to use
no_std
(requires Rust 1.6 to opt out). - Implement
Clone::clone_from
for ArrayVec and ArrayString
- Add feature std, which you can opt out of to use
-
0.3.14
- Add
ArrayString::from(&str)
- Add
-
0.3.13
- Added
DerefMut
impl forArrayString
. - Added method
.simplify()
to drop the element forCapacityError
. - Added method
.dispose()
toArrayVec
- Added
-
0.3.12
- Added ArrayString, a fixed capacity analogy of String
-
0.3.11
- Added trait impls Default, PartialOrd, Ord, Write for ArrayVec
-
0.3.10
- Go back to using external NoDrop, fixing a panic safety bug (issue #3)
-
0.3.8
- Inline the non-dropping logic to remove one drop flag in the ArrayVec representation.
-
0.3.7
- Added method .into_inner()
- Added unsafe method .set_len()