RAD 스튜디오 11.0 알렉산드리아 "새 기능 한글 요약본: RTL과 데이터" 입니다.
11.0 알렉산드리아의 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다.
11.0 알렉산드리아 - RTL과 데이터 관련 주요 업데이트 요약
플랫폼 식별자
RTL은 macOS/Arm64 플랫폼용으로 새로운 플랫폼 식별자인 pidOSXArm64를 추가되었다. 기존 pidAndroid32Arm 및 pidAndroid64Arm 식별자는 새로운 pidAndroidArm32 및 pidAndroidArm64로 대체되었다. 모든 플랫폼 관련 식별자는 컴파일러의 동일한 형식과 순서를 사용합니다. <플랫폼 이름><아키텍처 이름><비트니스>
RTL: TZipFile
ZIP 파일(RTL의 TZipFile 클래스)의 품질 개선 및 최적화에 중점을 두었다.
- Zip64에 대한 지원과 TZipFile에서 파일을 제거하는 방법이 추가되었다.
- TZipHeader에서 GetFIleName 메서드를 지원하고
- TZipFile.IsValid()는 스트림 매개 변수를 허용하며
- System.Zip은 4GB보다 큰 파일에서도 작동한다.
RTL 대용량 데이터 구조 개선
64비트 컴파일러에서 더 큰 메모리 구조에 대해 적절한 데이터 유형을 사용하도록 개선되었다. 예를 들어, 64비트의 TMemoryStream은 2GB보다 큰 데이터 구조를 지원한다. 이와 관련하여 새로운 메서드 TThread.GetTickCount64가 추가되었다(32비트 값을 반환하는 기존 TThread.GetTickCount는 호환성을 위해 RTL에 남아 있음)
새 레코드 헬퍼 추가
- TDateTime을 위한 새로운 레코드 헬퍼: System.DateUtils 유닛에 “UTC Now”(실제 NowUTC를 호출) 등이 포함되었다.
- Currency타입을 위한 새로운 레코드 헬퍼: System.SysUtils 유닛에 TCurrencyHelper가 추가되었다
블루투스와 BLE 개선
클래식 블루투스 및 블루투스LE와 대부분의 플랫폼이 포함해 개선되었다.
특히 Windows 10 및 안드로이드(iOS 및 macOS도 포함)에 중점을 두었으며, 개선 사항에는 비콘 지원도 포함되었다.
추가 RTL 개선사항
제네릭 콜렉션 개선사항
일부 제네릭 유형에서 사용했던 TValue 심볼릭 이름이 RTL의 TValue와 혼돈되므로 다른 이름으로 변경됨.(TKey > K, TValue > V 등) 내부적인 변경으로 기존 코드에는 영향이 없다.
또한, 다음 코드와 같이 컬랙션 클래스의 추가 생성자가 없으며, array of value 형식의 파라메터로 대체되었다.
procedure DoCheckStateChanged(Node: TTreeNode; CheckState: TNodeCheckState);virtual; constructor TList<T>.Create(const Values: array of T); constructor TDictionary<TKey, TValue>.Create(const AItems: array of TPair<TKey, TValue>);
TDictionary는 Capacity, GrowThreshold와 해싱 구현이 개선되어 성능/메모리 사용량/충돌 최소화하며 균형잡힌 성능을 발휘한다. 내부적으로 구현에 사용된 TListHelper를 제거하고 강력한 타입인 TArray<T>를 사용해 스트리밍과 데이터 매핑 코드 관련된 모든 항목이 업데이트 되었다.
RTTI
RTTI에 대한 개방형 배열 지원: RTTI를 통해 개방형 배열 매개변수가 있는 메서드 호출을 허용하고 TVirtualMethodInterceptor에서 개방형 배열 인수도 지원힌다. TValue는 TDateTime에 대한 지원이 추가되며, TValue 및 Variant 유형 교환이 개선되었다.
PPL (병렬 프로그래밍 라이브러리)
PPL 스레드 풀 통계에 더 쉽게 액세스할 수 있도록, TThreadPoolStats.Get 메서드가 이제 공개되었다.
스트림
새로운 TPointerStream 클래스를 사용하면 포인터 위치와 크기를 표시하여 TStream 인터페이스를 사용하여 메모리 내 데이터를 읽고 쓸 수 있다. TStream.CopyFrom에는 알 수 없는 크기가 필요하지 않으며, 이 방법은 Count가 큰 경우에도 최적화되었다(최대 400% 개선).
날짜를 문자료 변환
날짜를 문자로 변환과 반대로 변환이 개선되었다. 참고로, StrToDate는 ‘to date’ 형식 문자열을 엄격히 따르고, 월과 일 이름이 있는 날짜 형식을 지원하며, 내부에 임의의 텍스트가 있는 날짜 형식도 지원한다. 또한, TFormatSettings 날짜/시간 관련 속성 초기화를 개선해 모든 플랫폼에서 표현이 통합되었다.
인터페이스 인스턴스 생성
새로운 System.Generics.Defaults._MakeInterfaceInstance 이용 인터페이스 인스턴스를 만들 수 있고, 모든 인터페이스 메소드는 익명 메소드로 표시된다.
TNoRefCountObject
새로운 클래스 System.TNoRefCountObject는 참조 카운트가 IInterface 구현이다.(오래되고 모호한 TSingletonObject를 대체)
최적화 및 기타
- 최적화된 _FinalizeRecord 및 _FinalizeArray
- 레거시 TDatamodule.OldCreateOrder 속성이 제거 되고 기본값 True로 인식. 해당 속성이 폼파일에 있는 경우 무시됨(오류 미발생). 델파이 초기 버전 생성 순서 로직과 호환성을 위해 사용 된 항목
- 향상된 파스칼 System.Pos
- TArray<T>.BinarySearch 최적화
- TList<T>.Sort( ..., Index, Count ) overload 추가
- System.IOUtils.TFile.Size 추가
- ClassParent 및 InitInstance에 대한 TObject 성능 수정
- System.IOUtils.TPath에 대한 몇 가지 개선 사항
- RTL에서 260자 보다 긴 시스템 경로 지원, (최신 버전의 Windows 등)운영체제에서 지원하는 경우
- 클래스 속성 TThread.OnSynchronize 추가
- EInOutError 및 EInOutArgumentException 메시지에 경로가 포함되고 경로 필드를 갖음
성능 향상
- _UInt32ToHexString 및 _UInt64ToHexString
- TSingleHelper 및 TDoubleHelper용 Parse 및 TryParse
TGUID 데이터 구조는 이제 System.pas에서만 정의됨
JSON
- ParseJSONValue()를 TJSONObject에서 TJSONValue로 이동
- Integer에 대해 TJSONObject.AddPair(overload) 추가
UTF8ToString 변경 사항
array of AnsiChar을 허용하는 UTF8ToString 오버로드가 제거되고 UTF8ToString(array of Byte) 지원중단 됨.
제거된 함수: UTF8ToString(const S: _PAnsiChr)
해결 방법 은 System.UTF8ToString 참조
FireDAC
- PostgreSQL 드라이버는 PostgreSQL v13 지원, PostgreSQL 저장 프로시저 지원 포함
- Oracle 19c 및 Oracle 저장 프로시저에 대한 128자 매개변수 이름에 대한 공식 지원
- TFDSortOption에 soDigitsAsNumbers 확장, System.SysUtils의 TCompareOption과 유사
- FireDAC 모니터 UI 개선
- /bin 하위 폴더가 아닌 VendorHome에서 드라이버를 찾도록 Firebird 드라이버를 개선(이전 버전의 Firebird에는 정확함).
Internet, HTTP 및 REST 클라이언트 라이브러리
-
백엔드 및 EMS 클라이언트 구성 요소에 대한 타임아웃 메커니즘:
- TEMSProvider, TKinveyProvider, TParseProvider 클래스는 2가지 새로운 속성: ConnectTimeout, ReadTimeout
- TEMSApi.TConnectionInfo, TParseApi.TConnectionInfo, TKinveyApi.TConnectionInfo: ConnectTimeout 및 ReadTimeout 변수
- TDSRestConnection은 ConnectionTimeOut 표시
-
HTTP / 2에 대한 Windows 지원 추가
- THttpClient.ProtocolVersion 신규 속성
- TNetHttpClient.ProtocolVersion 신규 속성
- 새로운 TBase64URLEncoding 인코딩 및 TNetEncoding.Base64URL 속성
- 모든 플랫폼에 대해 전체 RTL에서 gethostbyname를 getaddrinfo로 전환
- 새로운 TCertificate.PublicKey, 공개 키 모듈 포함
- ContentType은 이제 문자열 유형, 열거형이 아님 . 이로서 하나의 콘텐츠 타입 문자열 사용 가능. 또한 새로운 RestRequest의 CustomContentType
- Windows용 TNetHTTPClient에서 TLS 1.3 지원
- TSocket에 대한 여러 개선 사항
- 새로운 TRESTRequestDataSetAdapter 컴포넌트는 JSON을 통해 TDataSet(예: TFDMemTable) 데이터를 서버에 업로드하는 작업 단순화. 서버 측에서 TRESTResponseDataSetAdapter REST 구성 요소의 동반자
- TRestClient 구성 요소는 기본 HTTPClient 구성 요소의 SecureFailureReasons 속성을 표시함
- Vcl.Styles 유닛에서 이제 TCustomStyle 클래스 FCustomElements 및 FSource가 protected 섹션에 선언됨
인터넷 서버 기술
웹브로커
ISAPI DLL 스레드에는 Web.Win.ISAPIThreadPool.StackSize 변수를 사용하여 구성 가능한 StackSize 제공. 2GB(MaxInt)보다 큰 파일을 전송/스트리밍할 때 WebBroker 성능 대폭 향상
RAD 서버
RAD 서버를 위한 Multipart/form-data 지원
데이터스냅 (DataSnap)
데이터스냅: REST URI는 이제 TDSMethodMapEvent 이벤트를 기반으로 하는 새로운 메커니즘을 사용해 구성할 수 있다.