Dart 2.12 har släppts, med noll-säkerhet och C-kompatibilitet

Google har släppt Dart 2.12, en ny version av språket som används för att bygga appar i Flutter. Utgåvan kommer tillsammans med Flutter 2.0.

Med release av Flutter 2.0, Google tar också Dart 2.12 till stabil. Om du inte visste det, är Dart språket som Flutter använder. Det är ett TypeScript-baserat språk men kommer med några språkfunktionstillägg, inklusive de jag ska gå igenom.

Noll säkerhet

Nollsäkerhet är en ganska bra språkfunktion. Det tvingar dig att överväga om en variabel någonsin kommer att vara null, och explicit hantera potentiella nollsituationer, samtidigt som det låter dig garantera att specifika variabler aldrig kommer att vara null.

I Dart 2.12 finns det nu fullt stöd för noll-säkerhet, med en syntax som liknar Swift och Kotlin. Det finns till och med smart-casting, där om Dart med säkerhet vet att en normalt nullbar variabel inte kan vara null, kommer den implicit att casta den till en icke-nullbar form.

Eftersom null-safety är en (mycket) brytande förändring, är den här funktionen opt-in. Om du uppdaterar till Dart 2.12 kommer din kompilering inte att gå sönder, och du behöver inte lägga timmar på att lägga till nollbarhetstips till allt. Du kan till och med använda null-safe-beroenden om ditt projekt ännu inte är noll-safe.

När du väl bestämt dig för att migrera kan du använda det inbyggda migreringsverktyget (pil migrera) och/eller migrationsguide för att få allt i ordning.

Även om null-safety ingår i Dart 2.12, om du skapar ett nytt Flutter-projekt, kommer null-safety inte att aktiveras direkt. Du måste aktivera det manuellt. Nya Dart-projekt kommer att ha null-safety aktiverat.

Gränssnitt för främmande funktioner

Även om Dart (och Flutters) fokus ligger på full plattformsoberoende kompatibilitet, finns det fortfarande några saker som bara behöver göras inbyggt. För att göra inbyggda operationer enklare har Dart ett främmande funktionsgränssnitt, eller FFI. FFI låter dig interagera med C-kod från Dart utan att behöva ta till konstiga strängbaserade API-anrop eller andra otympliga interoperabilitetsmetoder.

Och med Dart 2.12 är FFI nu stabil, vilket betyder att den är redo att användas i produktionsprojekt och är för det mesta komplett med funktioner.

Med det i åtanke finns det några förändringar i FFI, inklusive ett par brytande sådana.

Det mesta av fokus med den här utgåvan låg på hur strukturer kan användas med Dart och C. För det första kan du nu skicka strukturer i din C-kod genom referens och värde, där tidigare endast referenser stöddes. En annan viktig funktion är stöd för kapslade strukturer, som inte fanns före den här utgåvan.

Nu till de brytande förändringarna. Om du använde FFI kan du behöva uppdatera din kod för att fungera med 2.12. Med den här versionen av FFI kan du inte längre skapa tomma strukturer. Om du behöver en av någon anledning kan du använda den nya typen "Ogenomskinlig". Det finns även en del ändringar i hur vissa av FFIs inbyggda funktioner fungerar, vilket du kan läs om här.

Slutligen finns det ett nytt paket för FFI som låter dig generera FFI-omslag från befintliga C-huvudfiler, som kallas ffigen. Om du har mycket C-kod du behöver använda, med många API-metoder, kommer detta att vara ganska användbart. Även om mängden C-kod du har är liten är detta en trevlig bekvämlighetsfunktion.


Och det är i stort sett det för Dart 2.12. Med tillägget av noll-säkerhet och ett stabilt C-interoperabilitetsbibliotek förvandlas Dart till ett mycket funktionsrikt språk. Låt oss veta vad du tycker om Dart 2.12 i kommentarerna!