Releases: NightOwl888/ICU4N
Release list
v60.1.0-alpha.354
Change Log
- BUG: Fixed infinite recursion issue when using the locales
zh-CN,zh-HK,zh-MO,zh-SG,zh-TW(Fixes #29). - Added
Lazy<T>to make GetOrAdd() method calls atomic (Fixes #31). - Added test targets for x86 on all target frameworks.
- Upgraded to J2N 2.0.0-beta-0012
- Upgraded to Nerdbank.GitVersioning 3.3.37
- Added tests for .NET 5.0
- Removed support for .NET Standard 1.3
- Downgraded Microsoft.Extensions.Caching.Memory to 2.0.0
v60.1.0-alpha.353
Change Log
- apache/lucenenet#343: Fixed configuration of NuGet package so the
LICENSE.txtand icon files are in the root of the NuGet package, not in thecontentdirectory
v60.1.0-alpha.352
This release contains impactful performance improvements.
Change Log
ICU4N.Support.Collections: Factored outListExtensionsand movedCopyTomethod to J2N- PERFORMANCE: Swapped in J2N's optimized
ICollection<T>.ToArray()method where appropriate - PERFORMANCE:
ICU4N.TestFramework: FixedTestBoilerplate.GetSet()method so it doesn't lookup a value in every loop from the same dictionary it is iterating over - PERFORMANCE:
ICU4N.Text.UTF16Extension::CharAt(): FixedStringBuilderoverload to copy out the characters it is analyzing to an array, since the indexer of the .NETStringBuilderis extremely slow. - PERFORMANCE: Replaced
BitArraywithBitSetinBreakIteratorandNormalizer - PERFORMANCE: Fixed
HashSet<T>capacity allocation with J2N'sHashSet<T>, which has a capacity constructor overload on all target platforms - PERFORMANCE:
ICU4N.Impl.ICUResourceBundle: Removed extraHashSetfor tracking unique values, since the existing list can be utilized for that without the extra memory allocations and operations - PERFORMANCE: Swapped in J2N's
HashSet<T>in other appropriate places ICU4N.TestFramework: Added implicit operator support forCharacter,Integer,Long, andDoubleclasses- PERFORMANCE: Factored out
IDictionary<TKey, TValue>.Get(TKey)extension method in favor ofIDictionary.TryGetValue(TKey, out TValue)where a performance advantage can be gained - PERFORMANCE: Added asserts overloads for generic collection types and
UnicodeSet - PERFORMANCE:
ICU4N.Tests.Transliterator: OptimizedUnicodeMapTestby replacingIntegerreference type withint - PERFORMANCE:
ICU4N.Text.UTF16Extension.tt: Updated code generation to create a special case overload forStringBuilder, whose indexer is extremely slow in .NET - PERFORMANCE: Changed
ICU4N.Text.ReplaceableStringimplementation to cache a copy of the string in theStringBuilder, since theChar32At()method needs to index into the characters and astringis much faster thanStringBuilder. The cached string is updated whenever a change is made through theReplaceableStringAPI or if theStringBuilderit wraps changes inLengthorGetHashCode()or whenReplaceableString.ToString()is called. - PERFORMANCE:
ICU4N.Collation.Impl.Coll.CollationDataBuilder: Changed to useString.IndexOf()which performs far better thanStringBuilderExtensions.IndexOf() - PERFORMANCE:
ICU4N.Tests.Collation: UpdatedCounterclass to useInterlockedrather than a lock - PERFORMANCE:
ICU4N.Impl.ICUNotifier: Updated to use aQueue<T>rather thanList<T> - PERFORMANCE: Use
LazyInitializerthroughout the project to load data rather than using a lock and volatile member - PERFORMANCE: Changed classes where appropriate to use a lock object instead of
lock (this) - PERFORMANCE:
ICU4N.Globalization.UCharacterNameIterator: Removed unnecessary redundant lock - PERFORMANCE:
ICU4N.Util.VersionInfo: UseConcurrentDictionaryand remove locking - PERFORMANCE:
ICU4N.Transliterator: Use lock object,LazyInitializer, andConcurrentDictionarywhere appropriate to avoidlock (this) - Changed properties to use expression-style syntax, where appropriate
- PERFORMANCE: Optimized empty collection creation
- PERFORMANCE: Eliminated
InvalidCastExceptions and created if-then blocks that test the type compatibility instead - PERFORMANCE: Implmentd
GetHashCode()where it was "not designed" in the original implementation - BREAKING:
ICU4N.Util.UResourceBundle: ChangedGetLocaleID()andGetBaseName()to propertiesLocaleIDandBaseName ICU4N.Tests.Collation.Dev.Test.Util.ICUResourceBundleCollationTest: EnabledTestFunctionalEquivalent()test, as it now passesICU4N.Tests.Dev.Test.Rbbi.RBBITestExtended::TestExtended(): Enabled the test, as it now passesICU4N.Impl.ICUService: Fixed broken reference in XML doc comment- Ugraded to J2N 2.0.0-beta-0009
v60.1.0-alpha.351
Change Log
- BREAKING: Moved
LocaleIDParser,LocaleIDs, andLocaleUtilitytoICU4N.Globalizationnamespace ICU4N.Support.Collections: Deleted unneeded GenericComparer and swapped in the implementation from J2N.- BREAKING:
ICU4N.Impl.ICULocaleService: RefactoredGet()andGetKey()overloads to use out parameters rather than passing in single dimensional arrays (Java has no out parameters, so this was a workaround in ICU4J) - Upgraded to J2N 2.0.0-beta-0008
- Upgraded to Nerdbank.GitVersioning 3.0.28
v60.1.0-alpha.350
Change Log
- Fixed bug in build generation of
InternalsVisibleToattributes that was introduced by a breaking change in Visual Studio 2019 - BREAKING: Replaced
ICU4N.Util.ULocalewith a .NETifiedICU4N.Globalization.UCultureInfoclass that matches the API ofSystem.Globalization.CultureInfo. (Closes #3)
v60.1.0-alpha.300
Change Log
- Added tests for
ICU4N.Globalization.UScript.TryGetNameandICU4N.Globalization.UScript.TryGetShortName - Added
PackageIconUrlMSBuild property for backward compatibility, since the current build tools do not yet supportPackageIcon
v60.1.0-alpha.238
Change Log
- Added .NET Framework 4.0 target
ICU4N: Eliminated unnecessary reference toMicrosoft.CSharp- Updated NuGet package icon
v60.1.0-alpha.231
Change Log
1, Upgraded J2N dependency to version 2.0.0-beta-0007
2. BREAKING: ICU4N.Support.Text.ParsePosition: Factored out and replaced with implementation from J2N
3. Moved MSBuild features to solution-level Directory.Build.targets file to simplify maintenance
4. Moved InternalsVisibleTo attribute generation to solution-level Directory.Build.targets file to simplify maintenance
5. Fixed various build warnings
v60.1.0-alpha.225
Change Log
-
Upgraded LangVersion (C# language version) to 8.0
-
BREAKING: Refactored
SoftReferenceto utilizeMicrosoft.Extensions.Caching.Memory.MemoryCacheto provide a way to use caching policies to evict the data. ReworkedCacheBase,CacheValue,ICUResourceBundle,ICUResourceBundleImpl,ICUResourceBundleReader,Norm2AllModes,ResourceBundleWrapper,SoftCache,BreakIterator,NumberingSystem, andULocaleto eliminate unnecessary cache subclasses that have been replaced by a delegate method to create cached data inGetOrCreate()and factored out theD(data) parameter ofCacheBase/SoftCache. -
Changed
LocaleObjectCacheto use an LRU cache. -
ICU4N.Impl.LocaleDisplayNamesImpl: Changed locking to useReaderWriterLockSlimrather than a lock object to get better read throughput -
ICU4N.Impl.SortedSetRelation: Removed unnecessary memory allocations when usingExceptWith -
BUG:
ICU4N.Util.UResourceBundle:GetAssembly()must provide each assembly type if it is referenced in the client project, so we useType.GetType(string)to load a type. If non-null, it means the assembly is referenced and we can return the assembly instance. Lack of options for/coll,/curr, and/tranlitwere causing some missing resources, which specifically causedICU4N.Dev.Test.Collate.CollationAPITest::TestContractions()to fail. -
ICU4N.Impl.ResourceBundleWrapper: Changed fallback root to use thebaseNameto determine which assembly to use as root -
BREAKING:
ICU4N.Impl.ICUService: Changed return type fromSortedDictionary<string, string>toIDictionary<string, string>to decouple from theSortedDictionary<string, string>implementation -
ICU4N.Text.RuleBasedBreakIterator::DumpCache(): Fixed string formatting -
ICU4N.Text.FilteredBreakIterator,ICU4N.Util.CharsTrieBuilder: Added T4 templates to generateICharSequenceoverloads -
BREAKING: Changed all
IAppendableimplementations to conform to .NET semantics.Append(value, startIndex, length)instead ofAppend(value, startIndex, endIndex). -
Made
ICharSequenceandIAppendablemember overloads public -
BREAKING: Marked
ICU4N.Impl.PluralRulesLoader,ICU4N.Support.Text.ChoiceFormat,ICU4N.Support.Text.FieldPosition,ICU4N.Support.Text.Formatter,ICU4N.Text.MessageFormat,ICU4N.Text.MessagePattern,ICU4N.Text.MessagePatternUtil,ICU4N.Text.NumberFormat,ICU4N.Text.PluralFormat,ICU4N.Text.PluralRanges,ICU4N.Text.SelectFormat,ICU4N.Text.UFormatas internal. We don't want these exposed until they are redesigned to be like .NET formatters. -
BREAKING: Removed most obsolete members from the public API (#7)
-
BREAKING:
ICU4N.Support.Collections: Marked all types internal -
BREAKING:
ICU4N.Support.Globalization: MadeCompareInfoComparerinternal. Changed namespace ofCompareInfoExtensionstoICU4N.Globalization. RenamedCompareInfoExtensions.ToComparer()>CompareInfoExtensions.AsComparer(). -
BREAKING:
ICU4N.Support.Text.AttributedString: Marked internal -
BREAKING:
ICU4N.Support: MarkedAnonymousComparer,IntegerExtensions, andNumberclasses internal -
BREAKING: Marked
ICUConfig,ICUDebug, andICU4N.Support.SystemPropertiesinternal
v60.1.0-alpha.203
Change Log
1, Upgraded J2N dependency to version 2.0.0-beta-0002
2. BREAKING: ICU4N.Support.AssemblyExtensions: Factored out and replaced with implementation from J2N
3. BREAKING: ICU4N.Support.TypeExtensions: Factored out and replaced with implementation from J2N
4. ICU4N.Collation.Text.RuleBasedCollator: Fixed null reference check to ignore the overridden ==operator in types that implement ICharSequence