- Components
- General
- Compiled data updated to CLDR 45 and ICU 75 (#4782)
icu_calendar
icu_collections
icu_normalizer
icu_datetime
icu_experimental
icu_locale
- New crate
- Allow
LocaleDirectionality
to wrap aLocaleExpander
with user-controlled storage (#5704) - Allow
LocaleCanonicalizer
to wrap aLocaleExpander
with user-controlled storage (#5718) - Split
canonicalize()
onLocale
andLanguageIdentifier
intocanonicalize()
andcanonicalize_utf8()
, and have it return aCow
(#5727)
icu_locale_core
- New crate, renamed from
icu_locid
- Removed
Ord
andPartialOrd
impl fromextensions::unicode::Unicode
(#5617)
- New crate, renamed from
icu_locid_transform
icu_plurals
icu_properties
icu_segmenter
icu_timezone
- General
- Data model and providers
icu_datagen
icu_provider
icu_provider_blob
icu_provider_adapters
- Replace
AnyPayloadProvider
withFixedProvider<M>
- Replace
- FFI:
- All languages
- JS
- C++
icu_harfbuzz
- Utilities
calendrical_calculations
:databake
fixed_decimal
icu_pattern
litemap
yoke
zerofrom
zerotrie
zerovec
- This release has multiple changes that affect the bit representation of various types. Do not update to this release if you wish to retain stable data formats.
- Change the
VarZeroVecFormat
values shipped by default to use the same index and length width. This breaks data layout for allVarZeroVec
s. (#5594) - Change the
VarZeroVec
format to not store a superfluous 0 index at the beginning of the index array. This breaks data layout for allVarZeroVec
s (#5601) - Optimize
MultiFieldsULE
to not store a length anymore. This breaks data layout for any#[make_varule]
-using struct with multiple variable-sized fields. (#5593)
- Change the
- Remove
FlexZeroVec
(#5604)
- This release has multiple changes that affect the bit representation of various types. Do not update to this release if you wish to retain stable data formats.
writeable
icu_calendar
icu_datetime
- (1.5.1) Fix incorrect assertion in week-of-year formatting (#4977)
icu_casemap
- (1.5.1) Enforce C,packed, not just packed, on ULE types, fixing for incoming changes to
repr(Rust)
(#5049)
- (1.5.1) Enforce C,packed, not just packed, on ULE types, fixing for incoming changes to
icu_capi
- (1.5.1) Fix situations in which
libc_alloc
is specified as a dependency (#5119)
- (1.5.1) Fix situations in which
icu_properties
- (1.5.1) Enforce C,packed, not just packed, on ULE types, fixing for incoming changes to
repr(Rust)
(#5049)
- (1.5.1) Enforce C,packed, not just packed, on ULE types, fixing for incoming changes to
zerovec
zerovec_derive
- (0.10.3) Enforce C,packed, not just packed, on ULE types, fixing for incoming changes to
repr(Rust)
(#5049)
- (0.10.3) Enforce C,packed, not just packed, on ULE types, fixing for incoming changes to
- Components
- General
- Compiled data updated to CLDR 45 and ICU 75 (#4782)
icu_calendar
- Fix duration offsetting and negative-year bugs in several calendars including Chinese, Islamic, Coptic, Ethiopian, and Hebrew (#4904)
- Improved approximation for Persian calendrical calculations (#4713)
- Fix weekday calculations in negative ISO years (#4894)
- New
DateTime::local_unix_epoch()
convenience constructor (#4479) - Add caching for all islamic calendars (#4785)
- Add caching for chinese based calendars (#4411, #4468)
- Switch Hebrew to faster keviyah/Four Gates calculations (#4504)
- Replace 2820-year with 33-year cycle in Persian calendar, with override table (#4770, #4775, #4796)
- Fix bugs in several calendars with new continuity test (#4904)
- Fix year 2319 in the Chinese calendar (#4929)
- Fix ISO weekday calculations in negative years (#4894)
icu_collections
- Switch from
wasmer
towasmi
inicu_codepointtrie_builder
(#4621)
- Switch from
icu_normalizer
- Make UTS 46 normalization non-experimental (#4712)
icu_datetime
- Experimental "neo" datetime formatter with support for semantic skeleta and fine-grained data slicing (#1317, #3347)
Writeable
andDisplay
implementations now don't returnfmt::Error
s that don't originate from thefmt::Write
anymore (#4732, #4851, #4863)- Make
CldrCalendar
trait sealed except with experimental feature (#4392) FormattedDateTime
andFormattedZonedDateTime
now implementClone
andCopy
(#4476)
icu_experimental
- New home for all experimental components. This supersedes the published
icu_compactdecimal
,icu_displaynames
,icu_relativetime
,icu_transliterate
, andicu_unicodeset_parse
crates (#4564) - New experimental component
personnames
(#4050) - New experimental component
dimension
- Added
CurrencyFormatter
, which can format any currency based on the locale and the width (short and narrow are supported for now).
- Added
- New experimental component
units
(#4605)- Added
UnitsConverter
, which can convert any single or compound units (such asmeter
andsquare-meter-per-second
) to any compatible single or compound units.
- Added
- New home for all experimental components. This supersedes the published
icu_locid
- Added
total_cmp
functions toLocale
and other types to make them easier to use inBTreeSet
(#4608)
- Added
icu_locid_transform
- Add
LocaleExpander::minimize_favor_script
(#4752)
- Add
icu_plurals
- Added support for
CompactDecimal
(#4828)
- Added support for
icu_properties
icu_segmenter
- Fixed line segmenter, using Unicode 15.0 (#4389)
- Fixed grapheme cluster segmenter and updated it to Unicode 15.1 (#4536)
- Updated sentence segmenter rules to Unicode 15.1 (#4625)
- Updated word segmenter rules to Unicode 15.1 (#4625)
- Fixed
word_type()
andis_word_like()
onWordBreakIterator
for the last segment in complex script (#4903)
icu_timezone
- Added
TimeZoneIdMapper
to replaceIanaToBcp47Mapper
(#4774)
- Added
- General
- Data model and providers
icu_datagen
- Add new API structure to
DatagenDriver
to better express the different aspects ofFallbackMode
(#4629) - Datagen shows elapsed time for keys that are slow to generate (#4469)
- Datagen performance improvement by caching supported locales (#4470)
- Never use fallback for baked segmentation data (#4510)
- Propagate extension keywords and auxiliary keys to explicit locales (#4533)
- Add baked data macros to generate
IterableDataProvider
(#4800, #4868) - Add an option to generate data from an existing
DataProvider
, instead of from sources (#4814) - Implement
DeduplicationStrategy::RetainBaseLanguages
(#4836)
- Add new API structure to
icu_provider
- (Small breakage)
DataPayload::new_owned()
is no longerconst
, this was a mistake (#4456) - Add
NeverMarker
to allow for DataProvider bounds that never return data (#4186) - Add
BoundProvider
to allow temporal separation between key and request (#4877) - Add
DataPayloadOr
for more efficient memory layout to reduce stack size (#4463)
- (Small breakage)
icu_provider_blob
- Blob v2 no longer allocates (#4383)
- FFI:
- All languages
- JS
- Fixed a bug where slice length is computed incorrectly (rust-diplomat/diplomat#372)
- Changed file extensions for better compatibility with nodejs modules (rust-diplomat/diplomat#387)
- C++
- Fixed a bug where a result header defines a struct that shadows the class' name (rust-diplomat/diplomat#394)
- Add
explicit
keyword to internal constructors (rust-diplomat/diplomat#386) - Small breakage: some functions that used to return
diplomat::Result<T, std::monostate>
now returnstd::optional<T>
(#4635)
icu_harfbuzz
- Switch to harfbuzz funcs (#4794)
- Utilities
calendrical_calculations
:- Add Keviyah/Four Gates based optimized calculations module for the Hebrew calendar. (#4504)
- Expose
Hebrew
as a unit struct, addDate::try_new_hebrew_date()
,DateTime::try_new_hebrew_datetime()
. (https://github.com/unicode-org/icu4x/pulls/4532) - Deprecate
Hebrew::new_always_precomputing()
,Date::try_new_hebrew_date_with_calendar()
,DateTime::try_new_hebrew_datetime_with_calendar()
. The new implementation of the Hebrew calendar is faster and we do not need APIs for precomputation. (https://github.com/unicode-org/icu4x/pulls/4532)
databake
- Add
impl Bake for PhantomData<T>
(#4663)
- Add
fixed_decimal
icu_pattern
- Complete re-write of crate with support for multiple backends and better integration with ZeroVec and Writeable (#4610)
litemap
- Add
impl IntoIterator for LiteMap
by splittingStoreIterableMut
trait (#4359)
- Add
yoke
- Remove
StableDeref
bound fromYoke<Y, Option<C>>
methods (#4457) - Added
CartableOptionPointer
and function to convert fromYoke<Y, Option<C>>
(https://github.com/unicode-org/icu4x/pull/4449)\
- Remove
zerofrom
- Support
?Sized
type parameters which must beSized
to implementZeroFrom
(#4657)
- Support
zerotrie
zerovec
writeable
- Remove icu_datagen's dep on
fractional
- Fix normalization of character whose decomposition contains more than one starter and ends with a non-starter followed by a non-starter with a lower Canonical Combining Class than the last character of the decomposition. (#4530)
- Stricter version dependency on data crates
- Enforce C,packed, not just packed, on ULE types, fixing for incoming changes to
repr(Rust)
(#5049)[email protected]
,[email protected]
- A full fix also needs
[email protected]
,[email protected]
-
General
- MSRV is now 1.67
-
Components
- Compiled data updated to CLDR 44 and ICU 74 (#4245)
icu_calendar
- Expose if a date is in a leap year (#4273)
icu_locid
- Canonicalize transform extensions to lowercase (#4134)
icu_plurals
- Experimental
PluralRulesWithRanges
for selecting the plural category for ranges (#3012)
- Experimental
icu_properties
icu_segmenter
- Fix Unicode 15.0 sentence segmentation (#4213)
icu_unicodeset_parse
- Add support to parse UAX#29 properties (#4175)
-
Data model and providers
icu_provider
- Implement Any/BufferProvider for some smart pointers (#4255)
icu_provider_blob
- New V2 serialization schema (#4207)
icu_datagen
- New CLI option
--format=blob2
(#4207) - CLDR 44 compatibility fixes (#4134, #4156, #4158)
- Fix
supported_locales
for collator keys (#4169) - CLI: Fix behavior of
--segmenter-lstm-root
such that it does not overrideicuexportdata-root
(#4277) - Make datagen work without
CARGO_PKG_RUST_VERSION
environment variable (#4292)
- New CLI option
-
Utilities
Some crates received additional 1.3.x patch releases:
- Fix #4165, locale "vi" not working in Collator:
- Fix #4232, some locale data being improperly deduplicated:
1.3.2 was released to clean up the range dependency on zerovec
deliberately introduced in 1.3.0. It includes all previous 1.3.x changes
A subset of crates received a 1.3.1 patch release, to incorporate documentation fixes (#4096, #4097, #4099, #4101). These crates were: icu_calendar
, icu_casemap
, icu_datetime
, icu_locid_transform
, icu_provider
.
- General
- All updated crates:
- License updated to the new Unicode license
- MSRV is now 1.66
- Components now have the option to use
compiled_data
, an efficient default set of data baked in to the component. This is now recommended over using a data provider unless you have specific needs driving it.
- All updated crates:
- Data model and providers
icu_provider
:icu_datagen
:- Completely revamped API (#3705, #3861, #3951, #4008, #4041, #3669)
- The old API is still available behind the
legacy_api
default Cargo feature
- The old API is still available behind the
- Updated baked data output to be usable by
compiled_data
(#3449, #3493, #3549, #3500, #3847) - Add recommended locale set and expand regions in datagen (#3586)
- Make datagen faster by caching more things (#3625)
- Consume CLDR-JSON resources keyed with default script (#3772, #3786)
- (cli) Warn for
--locales all
(#3691)
- Completely revamped API (#3705, #3861, #3951, #4008, #4041, #3669)
icu_provider_adapters
:- Deprecated
LocaleFallbacker
, use throughicu_locid_transform
- Deprecated
icu_provider_blob
:icu_provider_fs
:- Correct error types for
icu_provider_fs
(#3682)
- Correct error types for
icu_testdata
:- This crate has been superseded by
compiled_data
and is now deprecated. - Data for new components will not be added, and it will not be updated for ICU4X 2.0.
- This crate has been superseded by
- Components:
- Cross component:
- All component crates now have a default
compiled_data
feature that enables constructors that do not require data providers, instead using data compiled into the library
- All component crates now have a default
icu_calendar
- Support for new non-Gregorian calendars: Persian (Solar Hijri), ROC, Hebrew, Chinese, Korean (Dangi), and Islamic (civil, observational, tabular, and Umm al-Qura). Lunar calendars are not yet fully optimized.
- Add
Ord
andPartialOrd
toicu_calendar
types (#3468) - Add cyclic year to
FormattableYear
(#3581)
icu_casemap
- Newly stabilized crate
icu_collator
- No additional changes
icu_collections
- Fixed JSON serialization of unpaired surrogates (#3892)
icu_datetime
- Formatting for the new calendars added in
icu_calendar
- Includes preview formatting for Chinese and Korean with cyclic years and leap months
- Hardening of edge cases surrounding the
Calendar
trait TimeZoneFormatter::load_*_format
functions:- Those with a provider argument gain an equivalent
TimeZoneFormatter::load_*_format
gated bycompiled_data
- Those without a provider argument renamed to
TimeZoneFormatter::include_*_format
with deprecation warning
- Those with a provider argument gain an equivalent
- Formatting for the new calendars added in
icu_decimal
- No additional changes
icu_list
- No additional changes
icu_locid
- Declarative macros are now re-exported from their own modules; old exports are deprecated; for example,
use icu::locid::extensions::unicode::value
now works, instead ofuse icu::locid::extensions_unicode_value
- Declarative macros are now re-exported from their own modules; old exports are deprecated; for example,
icu_locid_transform
- New home of
LocaleFallbacker
andfallback
module previously found inicu_provider_adapters
- New
LocaleDirectionality
to access the right-to-left status of locales
- New home of
icu_normalizer
- No additional changes
icu_plurals
- No additional changes
icu_properties
- Compiled data functions added to
sets
andmaps
withoutload_
prefix:icu::properties::sets::basic_emoji()
- Compiled data functions added to
icu_segmenter
- Algorithmic bug fixes such as #3392
icu_timezone
- New
IanaToBcp47Mapper
for converting between IANA time zone names and BCP-47 time zone names (#2909)
- New
- Cross component:
- Utils:
calendrical_calculations
: New crate: 0.1.0crlify
: 1.0.2 -> 1.0.3databake
anddatabake_derive
: 1.0.5 -> 1.0.6::
paths changed (#3450)
deduplicating_array
: 0.1.4 -> 0.1.5fixed_decimal
: 0.5.3 -> 0.5.4litemap
: 0.7.0 -> 0.7.1- Add const litemap getter functions for common types (#3416)
icu_pattern
: 0.1.4 -> 0.1.5tinystr
: 0.7.1 -> 0.7.2tzif
: 0.2.1 -> 0.2.2writeable
: 0.5.2 -> 0.5.3yoke
andyoke_derive
: 0.7.1 -> 0.7.2zerofrom
andzerofrom_derive
: 0.1.2 -> 0.1.3zerovec
andzerovec_derive
: 0.9.4 -> (0.9.6)- Add
ZeroTrie
, an efficient string-to-int collection (#2722) - Handle incorrect
VarZeroVec
bytes representation (#3883) - Better soundness under stacked borrows (#3513, #3524, #3515, #3509)
- Deserialization for
VarZeroVec<VarZeroSlice>
, take 2 (#3649) - Fix
MultiFieldsULE
(#3642) - Add initial
zeroslice!
andzerovec!
macros #3453, Updatezerovec!
/zeroslice!
macro syntax to nested arrays (#3611) - Add support for custom varule fields in #[make_varule] (#3580)
- Add
UnvalidatedChar
(#3444) get_copied_by
API (#3351)
- Add
zerovec
andzerovec_derive
: 0.9.6 -> 0.10.0:- Adding
T: Bake
bound onZeroVec
'sBake
(#3451)
- Adding
- FFI:
- Feature support
- Case mapping exports:
ICU4XCaseMapper
ICU4XCaseMapCloser
ICU4XTitlecaseMapper
ICU4XTrailingCase
- Other new exports:
ICU4XCodePointSetBuilder
ICU4XLocaleDirection
ICU4XLocaleDirectionality
ICU4XLocaleFallbackSupplement
ICU4XIanaToBcp47Mapper
- Enum variants added for calendar types and errors
- Case mapping exports:
- C++
- Don't use
std::move
for inline arguments (rust-diplomat/diplomat#336)
- Don't use
- Feature support
- Experimental:
bies
- No additional changes
icu_compactdecimal
- Convenience functions for formatting
f64
andFixedDecimal
(#3699)
- Convenience functions for formatting
displaynames
harfbuzz
- No additional changes
ixdtf
- No additional changes
relativetime
- No additional changes
transliterate
: New crate: 0.1.0unicodeset_parse
: New crate: 0.1.0zerotrie
: New crate: 0.1.0
Note: A subset of crates received patch releases in the 1.2 stream.
-
databake
: 0.1.5- Fixed #3356, adding
allow
for clippy false-positives
- Fixed #3356, adding
-
icu_capi
1.2.1- Fixed #3344,
buffer_provider
feature accidentally pulling in extra crates
- Fixed #3344,
-
icu_capi
1.2.2- Use
intptr_t
instead ofssize_t
for portability (diplomat #326)
- Use
-
icu_datagen
1.2.1- Fixed #3339, incorrect Cargo features
-
icu_datagen
1.2.3 -
icu_datagen
1.2.4- Remove dependency on
clap
's"cargo"
feature to better support non-Cargo users (#3388)
- Remove dependency on
-
icu_datagen
1.2.5- Remove runtime dependency on segmenter data pulled from the cargo cache (#3391)
-
icu_locid_transform
1.2.1- Fixed #3332, missing
+?Sized
bound
- Fixed #3332, missing
-
icu_segmenter
1.2.1- Fixed #3341, incorrect results on some strings with mixed scripts
-
icu_provider
1.2.1- Do not autoenable
postcard/use-std
(#3376)
- Do not autoenable
-
icu_datetime
1.2.1- Remove superfluous
JapaneseEraV1
provider bounds onTypedZonedDateTimeFormatter
#3379
- Remove superfluous
- General
- All updated crates:
- Add missing
Debug
impls (#3206) - Update Rust edition to 2021 (#3075)
- Internal clippy fixes
- Unless otherwise specified, all crate updates are to version 1.2.
- Out-of-cycle releases do not get their own changelog entries, so some entries may span multiple patch or pre-1.0 minor versions.
- Add missing
- All updated crates:
- Data model and providers
icu_provider
:- Add support for silencing expected
DataError
s (#3262) - Removing
dhat
dependency (#3138) - Make trait
DataMarker: 'static
(#3137)
- Add support for silencing expected
icu_datagen
: (includes patch updates 1.1.1 and 1.1.2)- (lib) Add
Out::Baked
andBakedOptions
; deprecateOut::Module
(#3130) - (cli) Bump clap to 4.0, move to using derive (#3149)
- Pare down datagen deps (#3160)
- Support changes from CLDR 43 (#3182, #3201, #3204, #3205)
- Add support for complemented range iterators (#3198)
- Using byte string literals in databake (#3040)\
- Datagen support for all new component features
- (performance) Less
ZeroMap
mutation in datagen (#3098)
- (lib) Add
icu_provider_adapters
: No other changesicu_provider_blob
: No other changesicu_provider_fs
:- Remove sha2 dep (#3160)
icu_provider_macros
: No other changes
- Components:
- Cross component: No additional cross-component changes
icu_calendar
- Document the bounds of
IsoSecond
,Minute
andHour
(#3156)
- Document the bounds of
icu_collator
: No other changesicu_collections
:- Add
to_u32
for TrieValue (#3222) - Add
CPT::try_alloc_map_value
(#3207) - Add support for coalescing range iterators (#3198)
- Allow inversion lists to be built from ranges that include
char::MAX
(#3203)
- Add
icu_datetime
: No other changesicu_decimal
- Add
From<GroupingStrategy>
forFixedDecimalFormatterOptions
(#3045)
- Add
icu_list
ListJoinerPattern::from_parts_unchecked()
is nowfrom_parts()
and panics when necessary (#3052)
icu_locid
- Reduce size of internal
ShortVec
abstraction (#3200) - Use
Box
in place ofVec
inShortVec
(#3220)
- Reduce size of internal
icu_locid_transform
- The default set of likely subtags is now only the subset of languages that have a basic or greater CLDR coverage level; the full set is much larger in CLDR 43 and can be accessed via new constructors (#3148, #3158, #3197)
icu_normalizer
: No other changesicu_plurals
: No other changesicu_properties
- Add ability to obtain enumerated property value names from enum values (#3222, #3276)
- Add ability to obtain enumerated property values from their names (#3103, #3152)
- Add support for runtime-selected property lookup (#3169)
- Add support for complemented range iterators (#3198)
- Support data for Bidi properties with combined data structure (#3026, #3258)
icu_segmenter
- Graduated from experimental
- Add "auto" feature, enable "lstm" feature, establish new data key structure, improve error handling, and revise word and line segmenter constructors (#3010, #3267, #3270)
- Rename
icu_segmenter
enums (#3285) - Allow access to rule status via word_type in WordSegmenter and over FFI (#3139, #3275)
- Upgrade segmenter to Unicode 15.0.0 (#3273)
- Return a line break at index 0 (#3289)
- Improve the LSTM code and data model to be zero copy, improve error handling, be future-proof, and vectorize more operations (#3210, #3217, #3233, #3250, #3254, #3264, #3291)
- Remove ndarray dependency (#3192)
- Silencing expected
DataError
s (#3262) - Fix SB10 rule (#3126)
- Polished docs and examples
icu_timezone
: No other changes
- Utils:
crlify
: No change (still at 1.0.1)databake
: 1.1.3 -> 1.1.4- Using byte string literals in databake (#3040)
deduplicating_array
: 0.1.3 -> 0.1.4fixed_decimal
: 0.5.2 -> 0.5.3litemap
: 0.6.1 -> 0.7.0- Move FromIterator impl to new
StoreFromIterable
trait, allowing constructingLiteMap
s with different backing stores (#3220)
- Move FromIterator impl to new
pattern
: 0.1.3 -> 0.1.4tinystr
: No change (still at 0.7.1)tzif
: No change (still at 0.2.1)writeable
: 0.5.1 -> 0.5.2yoke
: 0.7.0 -> 0.7.1yoke-derive
: 0.7.0 -> 0.7.1zerofrom
: 0.1.1 -> 0.1.2zerofrom-derive
: 0.1.1 -> 0.1.2zerovec
: 0.9.2 -> 0.9.4- Add initial ZeroHashMap (#2579)
- Add
ZeroSlice::get_as_array()
(#3192) - Add range dep of yoke to zerovec (#3089)
zerovec-derive
: 0.9.2 -> 0.9.4- Add
#[zerovec::derive(Hash)]
(#2579) - Avoid using derive on autogenerated packed types (#3069)
- Add
- FFI:
- Feature support
- Property value-to-name mappings (#3196)
UnicodeSets
(including exemplar chars) (#3177)- Runtime-selected property lookup (#3169)
- Property lookup ranges and GeneralCategoryGroup (#3230)
- LocaleExpander: Add extended and non-extended constructors (#3197)
- Fill in
BreakIterator
API (#3275) - Bidi reorder_visual (#3183)
- (experimental) Strongly typed display names API (#3190, #3188)
- Add feature slicing to
icu_capi
(#3216) - Better FFI provider ownership (#3140)
- Feature support
- Experimental:
bies
: 0.2.0 -> 0.2.1icu_casemap
: 0.7.1 -> 0.7.2icu_compactdecimal
: 0.1.0 -> 0.2.0- Support configurable grouping separators in CompactDecimalFormatter (#3045)
icu_displaynames
: 0.8.0 -> 0.10.0- Add ScriptDisplayNames (#3317)
- Add LanguageDisplayNames with support for variants (#3058, #3113)
- Add stronger typing (#3190)
icu_harfbuzz
: New experimental port: Harfbuzz integration for ICU4X (v0.1.0)icu_relativetime
: 0.1.0 -> 0.1.1
-
icu_calendar
- Fix bug in
simple_week_of()
around unit size (#2951) - Fix math in calendar (#2714)
- Add
div_rem_euclid
and use it in icu_calendar (#2704) - Fix Time::from_minute_with_remainder_days to handle negatives (#2643) (#2702)
- doc improvements
- Fix bug in
-
icu_casemap
- doc improvements
-
icu_collator
- doc improvements
-
icu_collections
- Add APIs for returning exemplar characters data (#2812)
- Readable JSON inversion lists (#2855)
- Add
UnicodeSet
that supports strings (#2796) - Add documentation on
CodePointTrie
details and perf considerations (#2717)
-
icu_codepointtrie_builder
- internal improvements
-
icu_datetime
- internal and doc improvements
-
icu_decimal
- internal and doc improvements
-
icu_displaynames
- DisplayNames fixes (#2918)
- Rename
Territory
->Region
for display names component (#2895) - Transformer code for
Language
display names (#2871) - Adding a function to get display name for a region. (#2816)
- Transformer code for display names component. (#2635)
- doc improvements
-
icu_list
- Untangling list provider from logic and fixing big endian safety bug (#2994)
- Not allocating
Writeable
s for regex evaluation (#2991) - doc improvements
-
icu_locid
- Reject duplicated extensions (#2893)
- More borrowing in locid's
write_to_string
(#2693) - doc improvements
-
icu_locid_transform
- Clean up dependency specifications so
serde
isn't pulled in by default (#2696) - doc improvements
- Clean up dependency specifications so
-
icu_normalizer
- internal and doc improvements
-
icu_plurals
- doc improvements
-
icu_properties
- Add APIs for returning exemplar characters data (#2812)
- Add API and testdata for
Basic_Emoji
property (#2802) - Add
UnicodeSet
that supports strings (#2796) - Update
Script
property value enums (#2787) - doc improvements
-
icu_segmenter
- Make metacrate features more specific (#2932)
- Remove
serde
dependency from segmenter withlstm
feature. (#2904) - Simplify construction of grapheme cluster break iterators (#2870)
- Store grapheme cluster payload instead of grapheme cluster segmenter. (#2864)
#[no_std]
for LSTM segmenter (#2845)- icu_segmenter: enforce
clippy::indexing_slicing
. (#2325) - Use
GraphemeClusterSegmenter
inDictionarySegmenter
andLstmSegmenter
(#2716) - Rename
*BreakSegmenter
to*Segmenter
(#2707) - Remove unnecessary language check for East Asian language (SA property) (#2705)
- internal and doc improvements
-
icu_timezone
- Adds a bytes parsing API for
GMTOffset
forCustomTimeZone
and FFI (#2943, #2955) - doc improvements
- Adds a bytes parsing API for
-
icu_provider_adapters
- Add more
inner_mut
functions inicu_provider_adapters
(#2987) - Fix error propagation in
MultiForkByErrorProvider
(#2986) - Add mutation methods to
MultiForkByErrorProvider
(#2972)
- Add more
-
icu_provider_blob
- internal and doc improvements
-
icu_provider
- Setting correct
DataError
for.as_deserializing()
,.as_downcasting()
(#2993) - doc improvements
- Setting correct
-
icu_datagen
- Removing experimental feature from datagen (#3005)
- Fixing Spanish list regex (#2989)
- Datagen CLI improvements (#2950)
- Some reexports for datagen (#2958)
- Databake improvements (#2906)
- Exclude certain collations by default and add option to include them (#2789)
- Allowing no keys in datagen CLI (#2731)
- Fixing baked datagen for no keys and keys with no data (#2698)
- Internal and doc improvements
-
icu_provider_fs
- internal and doc improvements
-
icu_testdata
- stabilized metadata
- doc improvements
- CLDR 42 and ICU 72 data
-
bies
- Bumped
writeable
version
- Bumped
-
databake
- Doc improvements
-
fixed_decimal
- Treat strings starting with a decimal point as valid in
FixedDecimal::from_str()
(#2937) - The actual formatting part of compact decimal formatting (#2898)
- Allow noncompact
CompactDecimal
(#2889) CompactDecimal
andScientificDecimal
(#2847)- doc improvements
- Treat strings starting with a decimal point as valid in
-
icu_pattern
- internal improvements
-
litemap
- internal and doc improvements
-
tinystr
- Add
std
feature andError
impl forTinyStrError
(#3009) - internal and doc improvements
- Add
-
tzif
- internal and doc improvements
-
writeable
- Using
core
integer log when available (#3015) usize
andisize
implementation- internal and doc improvements
- Using
-
yoke
- Add
prove_covariance_manually
guard forCoerceUnsized
(#2936) - Allow
clippy::forget_copy
inderive(Yokeable)
impl (#2775) - Fix soundness issue in
Yoke::attach_to_cart()
around implied bounds #2949
- Add
-
zerovec
ZeroMap2d
cursors
- Made case level setting actually take effect (#2892)
- General
- Update license to Unicode-DFS-2016 (#2303)
- Major improvements to documentation, bechmarks, and examples
- Various performance and codesize improvements
- FFI for all non-experimental components
- Data model and providers
- Polished baked data provider (#2098, #2126, #2147)
- Data key extraction from binary (#1950)
- Add
LocaleFallbacker
with locale fallback algorithm (#2036, #2115, #2186, #2567) - Making
DataProvider: Sync + Send
(#1853) - Update to Postcard 1.0 (#2037, #2091, #2438)
- De-duplication in
BlobDataProvider
(#2062) - Move
map_project
to closures (#2185) - Renaming of many traits and functions in
icu_provider
(#2207, #2222, #2223) - Passing
DataLocale
by reference (#2224) - Fix feature specification in provider/fs (#2527)
- Rename
DataKey
methods and returnDataKeyPath
(#2565) - Add some useful data provider impls; refactor
AnyPayloadProvider
(#2564) - Removing
StaticDataProvider
(#2582) - Removing
InvariantDataProvider
(#2159) - Renaming load_payload, load_resource (#2222)
- Renaming
DataOptions
toDataLocale
(#2223) - Use an abstract predicate function in
ForkByKeyProvider
(#2249) - Add
UnvalidatedStr
and use it inLocaleFallbackParentsV1
(#2502) - Add some useful data provider impls; refactor
AnyPayloadProvider
(#2564)
- Components:
- Cross component:
Format
toFormatter
rename (#2184)- Uniform constructor style across all components, see #2573 (#2293, #2305, #2309, #2316, #2318, #2326, #2327, #2329, #2330, #2332, #2333, #2334)
- Remove
format_to_write
s (#2528) - Make error enums more consistent (#2649)
- More Copy arguments (#2654)
calendar
- Emit month codes from calendars (#2053)
- Add
Date::new_from_codes()
; fix up per-calendar constructor functions (#2255) - Fix iso-to-fixed conversion (#1898)
- Ethiopic calendars (#1831, #1902)
- Replace hour/minute/second constructors
new_unchecked()
with getternumber()
(#1922) - Improve and rename
types::Year
/types::Month
(#2157) - Add
japanext
calendar (#2181) - Replace unbounded arithmetic for calendar numeric types with bounded arithmetic. (#2273)
- Make
Japanext
its own calendar type (#2311) - Pick default calendar based off of locale in
AnyCalendar
- Make
offset_date
handle wraparounds for months (#2373) - Hide duration stuff, rename
IncludedInAnyCalendar
(#2426) week_of
refactoring (#2462)- Fix arithmetic in Indian calendar (#2479)
- Infallible
from_minutes_since_local_unix_epoch()
(#2646)
collator
- New component (#1706)
- Validate the length of last_primaries (#1916)
- Use a higher numeric value for
Strength::Identical
(#1942) - Move and unescape collator and normalizer tests (#1943)
- Tweak CollationMetadataV1 documentation and dead code (#1914)
- GIGO fix-ups for the normalizer and the collator (#1931)
- split_first_u16/split_first_u24 -> split_first (#2459)
- Create options bag for CollatorOptions (#2475)
- Clean up FFFD magic numbers in Collator with REPLACEMENT_CHAR (#2496)
- Add traditional spanish and plumbing to make it work (#2497)
collections
- New component (#2294, #2323, #2328, #2336)
- Rename
CodePointSet
toCodePointInversionList
(#2230) - Allow
CodePointTrie
to determineerror_value
at runtime from data (#2301) - Use GIGO with debug assertion in Char16Trie (#2537)
datetime
- Formatting for
AnyCalendar
s (#1987, #2146) - Renaming
DateTimeFormatter
(etc) toTypedDateTimeFormatter
andAnyDateTimeFormatter
toDateTimeFormatter
(#2298) - DateFormatter cleanups (#2304)
- Remove Calendar type parameter from
TimeFormat
(#2282) - Class Hierarchy for
DateTimeFormat
(split intoDateFormat
,TimeFormat
, etc) (#2133) - Making
time_granularity
public (#1867) - Add fractional seconds support to components bag (#1873)
- Use
FixedDecimalFormat
inDateTimeFormat
(#1952) - Include module name to disambiguate Pattern (#1889)
- Use month codes in formatting (#2071)
- Split date and time data keys. (#2093)
- Move
Formatted[Zoned]DateTime
over to preextracting the date time input info (#2138, #2205) - Remove
MockZonedDateTime
(#2231) - Add an offset_fallback field in
TimeZoneFormatV1
(#2253) - Remove
HourCycle
from the public Lengths API (#2331) - Move mock datetime parsing code to test modules (#2436)
- Stop returning error on mismatched locale and type calendar (#2477)
- Change default length to medium (#2596)
- Make expect_pattern GIGO (#2650)
- Formatting for
decimal
- Don't panic on invalid grouping sizes (#2042)
- Remove signum and sign display options (#2070)
- Add numbering system support (#2246)
list
- ListStyle -> ListLength and add _with_length (#2628)
locid
- Add
remove()
for vertical fallback (#1992) - Update
Locale
andLanguageIdentifier
comparison functions tostrict_cmp()
andnormalizing_eq()
(#2020) normalizing_eq()
,strict_cmp()
for LSRV subtags (#2048)- Add
strict_cmp_iter()
(#2111, #2114) - Removing auto-derived Ord impl for Locale/LangId (#2142)
- Enable
locale
macro to support single unicode key value pair extension (#2382) - Reducing
locid_id
API surface (#2484) private::Key
andother::Key
to::Subtag
(#2632)
- Add
locid_transform
- Rename from
icu::locale_canonicalizer
(#2381) LocaleCanonicalizer
/LocaleExpander
refactor (#2338)
- Rename from
normalizer
- Promoted from experimental (#2058)
- Add ComposingNormalizer for NFC, NFKC, and UTS 46 (#2039)
- GIGO fix-ups for the normalizer and the collator (#1931)
- Add support for NFKD and the decomposed counterpart of UTS 46 without ignored and disallowed (#1967)
- Simplify Hangul composition (#2200)
- Make sink-writing normalization methods non-experimental (#2201)
- Uses tries instead of inversion lists for normalization data (#2235)
- Consolidate the two auxiliary tries to the main NFD trie (#2371)
- Use
char
instead ofU24
in normalizer data (#2481) - Make NFKD and UTS 46 data store only the difference form NFD (#1984)
plurals
- Rename
select()
tocategory_for()
forPluralRules
(#2287) - Use From instead of TryFrom for signed integers (#2593)
from_tr35_string
->get_for_cldr_string
(#2633)- Make PluralOperands fields private, add static constructor (#2598)
- Rename
properties
- Better properties return values (#2112, #1990, #2277, #2555)
- Move properties data over to an (extensible) enum (#2140)
- Renaming unicode property data struct names (#2198)
timezone
- New component, split from
datetime
(#2265) - Add time period metazone to
TimeZonesProvider
(#1961) - Convert metazone period from string to i32 (#2085)
- Improvements to
MetaZoneCalculator
(#2274) - Add
TimeVariant
wrapper (#2289) - TimeVariant -> ZoneVariant with a few more docs (#2427)
- Assorted TimeZone fixes (#2478)
- New component, split from
- Cross component:
- Utils:
crlify
: No updatesdatabake
:- Moved over from
crabbake
(#2068) - Some databake improvements (#2150)
- Using static
LiteMap
s in databake (#2264)
- Moved over from
deduplicating_array
: No updatesfixed_decimal
:- Switch FixedDecimal to a trivaluate sign (#2025)
- Remove negate (#2060)
- Improve integer operations (#1924)
- Add
FixedDecimal::concatenate_right()
(#1953) - Implement
ceil()
,floor()
andtruncate()
functions (#1923) - Define "magnitude" and introduce "position" concept (#1981)
- Support for rounding modes (#2000, #2100, #2104, #2261)
- Make
multiply_pow10)_
be infallible (#2285)
litemap
:- Remove
serde_json
dep from zeromap/litemap and align features (#1939) LiteMap
of&'a [(K, V)]
(#2242)- Enable
ShortVec
as a backend forLiteMap
(#2356)
- Remove
pattern
: No updatestinystr
:- Make
Option<TinyAsciiStr>
be the same size asTinyAsciiStr
(#2430)
- Make
tzif
:- New crate (#2019)
- Parse POSIX time-zone strings using Combine (#1973)
- Parse TZif binary files using Combine (#1999)
writeable
:- Rename
write_len
(#2529)
- Rename
yoke
:- Deprecate yoke's
badly
methods (#1930) - Rename
Yoke::project()
functions to::map_project()
(#1955) - Remove stable_deref_trait/alloc from yoke's default feature set (#2094)
- Move
map_project()
to closures (#2185)
- Deprecate yoke's
zerofrom
: No updateszerovec
:- Make
VarZeroVec
format configurable (#2306) - Add
FlexZeroVec
(#1790) - Add
NicheBytes
trait andNichedOptionULE
(#2501) - Turn ZeroVec into a struct for optimization (#2599, #2622)
- Improve performance of VarZeroVec::deserialize and add provider benches (#2603)
- Add array impl for
ZeroMapKV
(#1875) - Remove lifetime from
ZeroVecLike
(#1901) ZeroVecLike
cleanup (#2024)- Remove
serde_json
dep from zeromap/litemap and align features (#1939) - Make various ZeroVec methods
const
(#1976) - Refactor ZeroMap2d and add get_by functions (#1876)
- Add more zerovec impls for
usize
andFlexZeroVec
(#2023) - Change charULE from 4 bytes to 3 bytes (#2015)
- More impls in zerovec crate (#2054)
- Add binary search and other utilities to
FlexZeroVec
(#2284) - Remove
KeyError
and renameget()
toget_2d()
(#2279) EncodeAsVarULE
forCow
(#2376)- Add
ExactSizeIterator
forFlexZeroVec::iter_*()
(#2580) - Add permutation to ZVL containers (#2605)
- Make
- FFI:
- All non-experimental components now covered by FFI
- Add FFI error strategy (#2045)
- Configurable DataProvider FFI (#2526)
- Experimental:
bies
:casemapping
:segmenter
:- Expose
RuleBreakIterator
as a public interface (#2408) - Merge
segmenter_lstm
with segmenter (#2087) - Use
CodePointTrie
in Segmenter (#1839) - Move language detection to language.rs (#1689)
- Simplify function in rule_segmenter (#1880)
- Use dictionary segmenter for word. (#1936)
- Remove std dependency from segmenter_lstm. (#2064)
- Add Lao and Khmer LSTM models (#2120)
- Use multiple dictionaries for line/word segmenter. (#2209)
- Add a feature option not to use unicode-segmentation (#2212)
- Remove two char types in line segmenter and polish utf8 iterator naming (#2269)
- Expose
- General data model
- Non-exhaustive errors for locid, calendar, decimal, plurals (#1792, #1793)
- Rename "serialize" feature to "serde" (#1797)
- Turn all errors into Copy types (#1657)
- Components
calendar
:- Coptic, Indian and Ethiopian calendars (#1660, #1715, #1779)
- Calendar arithmetic (#1614)
datetime
:- Formatting for fractional seconds (#1813, #1801)
- Support for day of week in month ('F') (#1770)
- Custom fallbacking for TimeZoneFormatter (#1591)
- Support for week-of-month (#1468)
- Bug fix to get_best_available_format_pattern skeleton matching logic (#1549)
decimal
: No updateslocale_canonicalizer
:- ZeroCopy support (#1760, #1777)
locid
:- Simplified language representation (#1695)
- Region, Script and Variant subtags ULE (#1696)
plurals
:- Update data model to use
ZeroVec
(#1240)
- Update data model to use
properties
:- Bidi support (#1716, #1784)
- Utilities
codepointtrie
:- Use 0 for error value for Rust out-of-bounds for primitive trie value types (#1804)
crlify
: New util for line ending conversionsdeduplicating_array
: No updatesfixed_decimal
:- Improvements to FixedDecimal f64 APIs (#1718)
litemap
:- Pluggable LiteMap backends (#1769)
pattern
: No updatesuniset
: No updateswriteable
: No updatesyoke
: No updateszerofrom
: No updateszerovec
:- ZeroVec derive improvements (#1780)
- Support non-Ord values in ZeroMap (#1743)
- Add OptionULE and OptionVarULE (#1736)
- Rename ZeroVec::from_slice and add new method for const-constructed ZeroSlice (#1728)
- Treat ZeroMap sort order as an optional invariant (#1727)
- Add ZeroMap::get_copied_by (#1722)
- Generalize PairULE to support longer tuples (#1721)
- Add more AsULE impls for primitives (#1672)
- Add cast methods to ZeroVec and ZeroSlice (#1651)
- Add RawBytesULE::slice_from_byte_slice (#1648)
- Create façades for ZeroVec types, hide internal code organization modules (#1629)
- Add zerovec::skip_kv and zerovec::skip_ord attributes, as well as generalized attribute handling framework (#1613)
- Rename as_unaligned to to_unaligned (#1619)
- FFI:
- Updating to Diplomat 0.3
- Making testdata an optional FFI dep (#1820)
- Split out capi targets: make separate freertos, staticlib, and cdylib crates as targets (#1747)
- Experimental:
crabbake
: Initial version of baked data provider (#1825)segmenter
:- Support production-ready data provider for segmenters (#1652)
- Implement dictionary based segmenter for line segmenter. (#1644)
- Wire DataProvider into UAX29 segmenters (#1627)
- Move UAX#14 defines to line.toml (#1568)
- Add segmenter factories to generate UAX29 iterators (#1602)
- General data model
DataPayload
no longer needs a lifetime (#1297, #1279)- Re-write DataKey (#1511)
- Rewrite ErasedDataProvider as AnyProvider (#1495)
- Add EitherProvider and rename IterableDataProviderCore to IterableProvider (#1455)
- Change DataRequest to be borrowed in BufferProvider (#1416)
- Replace SerdeDeDataProvider with BufferProvider (#1369, #1384)
- Components
calendar
:- Julian, Japanese, and Buddhist calendars (#1351, #1394, #1305)
DateTimeFormat
integration (#1339)- Bugfix around arithmetic (#1352)
datetime
:- Week-of-year support (#1206)
DateTimeFormat::resolve_components()
(#1362)- Era formatting (#1346)
TimeZoneFormatterConfig
(#1256)- New data model for organizing calendar data (#1300)
- Bugfix around missing localized strings in time zone data (#1405)
decimal
: No updateslocale_canonicalizer
:- Bugfix in maximization (#1171)
- Update data model to use
LiteMap
(#1275)
locid
: No updatesplurals
:- Update data model to use
ZeroVec
(#1240)
- Update data model to use
properties
:- Rename resource key category for properties (#1406)
- Rename enums for
General_Category
(#1355) - Implement the
Canonical_Combining_Class
property (#1347) - Implement
Script_Extensions
property (#1353) - Add
General_Category
predicate functions (#1310) - Implement
Grapheme_Cluster_Break
,Word_Break
, andSentence_Break
Unicode properties (#1233)
- Utilities
codepointtrie
: No changesdeduplicating_array
: New utility for efficient serialized representation of data with duplicatesfixed_decimal
:- Padding and truncation APIs (#1482, #1507, #1195)
- Add double-to-decimal via ryū (#1217)
- Handle exponents in
FixedDecimal::from_str()
(#1265)
litemap
:- Add
LiteMap::get_indexed()
andLiteMap::find_index()
- Handle serialization of tuples (etc) in litemaps (#1306)
- Add
pattern
: No updatesuniset
: No updateswriteable
:- Adding parts functionality to
Writeable
(#1438) - Change
Writeable::writeable_to_string
to return a Cow (#1452) - Implementing
Writeable
for all integers (#1408) - Making
writeable::LengthHint
a range (#1400) - Simplifying
assert_writeable_parts_eq
andassert_writeable_eq
(#1522, #1399)
- Adding parts functionality to
yoke
:- Remove
Yokeable::Output
fromZeroCopyFrom
trait (#1499) - Add
EitherCart
(#1484) - Remove
attach_to_option_cart()
(#1348) - Homogenize yoke generic impls to always work with
Yokeable
, addOwnedYokeable
(#1302)
- Remove
zerovec
:- Move over to a model where the vector types deref to
ZeroSlice
andVarZeroSlice
(#1418, #1371) - Simplify
ZeroVec
/VarZeroVec
error handling, consolidateULEError
type (#1389) - Simplify
ZeroMapKV
(#1334) - Add
ZeroMap2d
, a two-dimensional zero-copy map (#1432) - Add borrowed-only version of
ZeroMap
(#1238) - Add various helper functions to zerovec (#1430)
- Rename
PlainOldULE
toRawBytesULE
(#1413) - Improve
EncodeAsVarULE
(#1385) - Add
EncodeAsVarULE
forZeroVec
(#1274, #1407) - Various trait impls (#1332, #1330, #1328, #1287)
- Document ULE alignment guarantee; update all impls with checklists (#1294)
- Fix
PairULE
validation function (#1266)
- Move over to a model where the vector types deref to
- FFI:
- Updating to the latest Diplomat
- Add FFI for constructing Data Structs, including decimal data structs (#1497)
- Add padding/truncation to FFI (#1501)
- Add FFI for constructing fixed decimals from float (#1483)
- Properties FFI (#1269)
- Experimental:
- New ListFormatter experiment
- More progress on segmentation experiment
- Updated to CLDR 40 (#1216)
- Functional Unicode property APIs and data; moved to new crate
icu_properties
(#148) DateTimeFormat
optimization: memory usage cut by two-thirds and perf improved by 40% (#519)BlobDataProvider
allowing for dynamic, asynchronous data loading (#1084)- Major upgrades to the
zerovec
utility crate and new benchmarks forZeroMap
(#1082, #1087) - Initial support for time zones in
DateTimeFormat
components bag (#845) - Bug fixes in
LocaleCanicalizer
(#1189, etc.) - Week of month/year arithmetic (#918)
- Major improvements on code size across FFI (#962)
- Iterations on ICU4X Segmenter (#1045, #1165, etc.)
- Experimental
ListFormatter
(#1053) - ICU4X now requires Rust 1.56 (#1201)
- Static data provider without filesystem dependency (#78)
- Infrastructure around zero-copy deserialization, including
ZeroVec
andYoke
(#652, #667) - Most ICU4X components support
no_std
(#812) - Hour cycle preferences are used by DateTimeFormat (#671)
- Skeleton matching supports additional field widths (#584)
- Add canonicalize method to LocaleCanonicalizer (#747)
- Added range iterator on UnicodeSet (#836)
- Add PluralRules::categories() function (#789)
- Consolidated data generation tool into new binary
icu4x-datagen
- Updated CLDR to 39 (#640)
- Initial release of:
icu_decimal
(#590)icu_locale_canonicalizer
(#417)
DateTimeFormat
gets support for- day periods (#435)
- time zones (#418)
- components bag (#481)
UnicodeSet
gets preliminary support for L3a subset (#478)PluralRules
supportE
operand (#407)- New utilities:
Writeable
ZeroVec
LiteMap
FixedDecimal
Pattern
- Early prototype of C API -
icu_capi
- Initial release of ICU4X.
- Initial release of:
icu
icu_locid
icu_plurals
icu_datetime
icu_uniset
icu_provider
icu_provider_fs
icu_provider_cldr
icu_testdata
icu4x_ecma402
fixed_decimal