Среди прочих изменений RTL в Delphi 12 можно выделить доработку функциональных возможностей списков, массивов и коллекций:
- Новые методы TArray: IndexOf, LastIndexOf, Contains.
- Новый метод IsEmpty у списков и коллекций.
- Для TList и его классов-потомков сообщение об ошибке EArgumentOutOfRangeException ("Argument out of range") стало значительно информативнее. Теперь оно включает в себя имя класса, индекс вызвавший ошибку и допустимый диапазон (или тот факт, что структура пуста). Пример демонстрирующий сообщение об ошибке EArgumentOutOfRangeException и использование метода IsEmpty:
program ListTest; {$APPTYPE CONSOLE} uses System.SysUtils, System.Generics.Collections; begin var list: TList<Integer> := TList<Integer>.Create; if list.IsEmpty then Writeln('list is empty'); try Writeln( list[10] ); except on E: Exception do Writeln( E.ClassName, ': ', E.Message ); end; try list.AddRange( [1, 2, 3, 4, 5, 6, 7, 8, 9] ); Writeln( list[10] ); except on E: Exception do Writeln( E.ClassName, ': ', E.Message ); end; list.Free; end.
Результаты его работы в Delphi 11 (без list.IsEmpty) и Delphi 12: - В System.Generics.Collections.TArray добавлены перегруженные функции для преобразования списка элементов в строку с указанием формата и разделителей:
class function ToString<T>(const Values: array of T; const AFormatSettings: TFormatSettings; const ASeparator: string = ','; const ADelim1: string = ''; const ADelim2: string = ''): string; reintroduce; overload; static; class function ToString<T>(const Values: array of T; const ASeparator: string = ','; const ADelim1: string = ''; const ADelim2: string = ''): string; reintroduce; overload; static;
- Все классы и функции System.Generics.Collections, System.Generics.Default и System.Classes.TList для индексов вместо Integer используют NativeInt.
- У TDictionary изменен способ создания хэш-ключей и улучшены некоторые функции GetHashCode.
- Оптимизирован метод TSparseArray.Add.
- Исправлены ошибки:
- RSP-23842: System.Generics.Collections TArray cannot handle full-size arrays in 64-bit mode
- RSP-31381: TList<T>.IndexOf/LastIndex of implementation not optimal
- RSP-37655: Memory leak in TArray.Sort<T>() without comparer
- RSP-39686: TArray Integer mishmash
- RSP-40174: TArray.BinarySearch uses linear search in worst case scenario
Лучше бы работали в сторону ускорения и уменьшения генерируемого кода
ОтветитьУдалитьПредложите свои услуги. Посмотрим как вы вместе совершите переворот!
Удалить