- 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 Ethiopic 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 TimeZoneFormat (#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 ResourceKey (#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)
TimeZoneFormatConfig
(#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