Onder de vele gebieden van Delphi die verbeterd zijn in 10.4 is er de Runtime Library, die veel kwaliteits- en prestatieverbeteringen zal hebben.
Delphi Runtime Library is een van de fundamenten van het product, omdat de UI-bibliotheken zoals VCL en FireMonkey en ook databasetoegangsbibliotheken en veel componenten van derden reageren op de kern RTL. Daarom zijn wijzigingen in de RTL bijzonder relevant, omdat ze gevolgen hebben voor alle ontwikkelaars. Hier zijn enkele belangrijke wijzigingen die binnenkort beschikbaar komen.
Bit Telling Standard Functies
We hebben nieuwe standaardfuncties geïntroduceerd voor veelvoorkomende bewerkingen voor bitverwerking op laag niveau, hieronder opgesomd.
- Voorloopnullen tellen: Telt het aantal voorloopnulbits voorafgaand aan het meest significante éénbit van de parameter X. Als X nul is, wordt de bitbreedte geretourneerd. 32 voor CountLeadingZeros32 en 64 voor CountLeadingZeros64.
- Achterliggende nullen tellen: Telt het aantal slepende nulbits na het minst significante éénbit van de parameter X. Als X nul is, wordt de bitbreedte geretourneerd. 32 voor CountTrailingZeros32 en 64 voor CountTrailingZeros64.
- Telling Bevolking: Telt het aantal 1 van de parameter X. De geretourneerde waarde ligt in het bereik van 0 tot de bitbreedte. 32 voor CountPopulation32 en 64 voor CountPopulation64.
Extra functies voor klassieke klassen
- De TCustomIniFile klasse heeft bew methods WriteInt64 en ReadInt64
- Het TGUID-type heeft een nieuwe methode IsEmpty
- De eigenschap Items van de klasse TJSONArray is nu een standaard array-eigenschap, waardoor je myJArray[2] kunt schrijven in plaats van myJArray.Items[2].
Betere stream-buffering
De CopyFrom functie van de basisklasse TStream had vroeger een vaste constante buffer voor het kopiëren van gegevens (ingesteld op 60K). Dit kan erg inefficiënt zijn voor het kopiëren van grote streams. De nieuwe standaard is 1MB, maar de methode heeft een extra parameter die je kunt gebruiken om een specifieke buffergrootte op te geven, afhankelijk van de kopieerbewerking die je uitvoert (bron- en doelstreams). De nieuwe handtekening van de methode is
// klasse TStream functie CopyFrom(const Source: TStream; Count: Int64 = 0; BufferSize: Integer = $100000): Int64;
Prestatieoptimalisatie
- JSON lezen geoptimaliseerd: TJSONReader is nu 50% sneller
- Geoptimaliseerd toewijzen van een gesorteerde StringList aan een andere StringList
- De prestatieverbeteringen van RTTI omvatten:
- TRttiMethod.Invoke is ~ 4 keer sneller
- TVirtualInterface aanroepen is ~ 1,7 keer sneller
- TRttiType.GetXxxx(AName) methoden zijn ~ 10 keer sneller
- Voor TValue zijn verschillende bewerkingen sneller
- De QuickSort-bewerking in System.Classes is nu efficiënter
FreeAndNil
We hebben de handtekening van de FreeAndNil procedure bijgewerkt om het gebruik ervan met interfaceverwijzingen en andere niet-ondersteunde gegevenstypen te vermijden. Het is nu gedeclareerd om een verwijzing naar een TObject te vereisen:
procedure FreeAndNil(const [ref] Obj: TObject); inline;
Dit betekent dat onjuist gebruik van FreeAndNil nu een compilerfout veroorzaakt. In het verleden werd onjuist gebruik niet opgemerkt, wat leidde tot lastige bugs. Merk op dat hoewel de parameter is gedeclareerd als const, de by-reference variabele inderdaad is gewijzigd.
Extra geassorteerde functies
- We hebben enkele afhankelijkheden verwijderd die bepaalde console-apps blokkeren om op Windows Server Core te draaien
- De methode TStringHelper.GetHashCode is bijgewerkt om de string niet in hoofdletters te zetten voordat deze wordt gehasht, zodat het resultaat overeenkomt met andere interne bewerkingen zoals de klasse TStringComparer.
Dat is slechts een gedeeltelijke anticipatie. We hebben ook veel werk verricht aan de Parallel Programming Library, AppTethering, de REST en HTTP client libraries en meer van de andere Delphi RTL subsystemen. Ik hoop dat deze verbeteringen, ook al zijn ze relatief klein, zullen worden gewaardeerd om hun positieve impact op het dagelijkse werk van Delphi-ontwikkelaars.
Dit is een preview van een aankomende release van RAD Studio. Er kunnen altijd last-minute bugs of wijzigingen zijn. Niets hier is definitief totdat de release officieel beschikbaar is gemaakt.

