Google heeft de release van de programmeertaal Dart 2.14 aangekondigd, die de ontwikkeling voortzet van de grondig herziene tak van Dart 2. Deze versie verschilt van de oorspronkelijke versie van de Dart-taal door het gebruik van sterke statische typechecking (typen kunnen automatisch worden afgeleid, zodat het opgeven van typen niet verplicht is, maar dynamische typechecking wordt niet meer gebruikt en het oorspronkelijk afgeleide type wordt aan de variabele gekoppeld, wat leidt tot een strikte typecontroles).
Kenmerken van de Dart-taal:
- Vertrouwde en eenvoudig te leren syntaxis, natuurlijk voor programmeurs van JavaScript, C en Java.
- Zorgt voor snelle opstart en hoge prestaties voor alle moderne webbrowsers en verschillende omgevingen, van draagbare apparaten tot krachtige systemen. servers.
- Mogelijkheid om klassen en interfaces te definiëren, waardoor encapsulatie kan worden gebruikt en bestaande methoden en gegevens hergebruikt kunnen worden.
- Het opgeven van typen vereenvoudigt debugging en detectie van fouten, maakt de code duidelijker en leesbaarder, en vergemakkelijkt de verdere ontwikkeling en analyse door externe ontwikkelaars.
- Ondersteunde types omvatten verschillende soorten hashes, arrays en lijsten, queues, numerieke en stringtypes, types voor het definiëren van datum en tijd, en reguliere expressies (RegExp). Er is ook mogelijkheid om eigen types te creëren.
- Voor het organiseren van parallelle uitvoering kunnen klassen met het attribuut isolate worden gebruikt, waarvan de code volledig wordt uitgevoerd in een geïsoleerde ruimte in een apart geheugengebied, waarbij interactie met het hoofdproces gebeurt via berichtverzending.
- Ondersteuning voor het gebruik van bibliotheken die het onderhoud en de debugging van grote webprojecten vergemakkelijken. Externe implementaties van functies kunnen worden aangesloten als gedeelde bibliotheken. Toepassingen kunnen worden opgedeeld in delen, waarbij elke sectie aan een afzonderlijk team van programmeurs kan worden toegewezen.
- Een set kant-en-klare tools ter ondersteuning van de ontwikkeling in de Dart-taal, inclusief implementatie van dynamische ontwikkelings- en debuggingtools met on-the-fly codecorrectie ('edit-and-continue').
- Om de ontwikkeling in de Dart-taal te vereenvoudigen, wordt de SDK, de package manager pub, de statische code-analyzer dart_analyzer, een set bibliotheken, de geïntegreerde ontwikkelomgeving DartPad, en plugins met Dart-ondersteuning voor IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 en Vim geleverd.
- Extra pakketten met bibliotheken en tools worden verspreid via de pub-repository, die meer dan 20.000 pakketten bevat.
Belangrijkste wijzigingen in de release van Dart 2.14:
- Er is een nieuwe operator voor de driervoudige verschuiving (>>>) toegevoegd, die in tegenstelling tot de operator (>>) geen aritmetische verschuiving uitvoert, maar een logische verschuiving, waarbij het tekenbit niet wordt meegenomen (de verschuiving gebeurt zonder onderscheid tussen positieve en negatieve getallen).
- De beperking op type-argumenten is opgeheven, waardoor generieke functietypen nu als argumenten gebruikt kunnen worden. Bijvoorbeeld, nu kan opgegeven worden: late List<T Function(T)> idFunctions; var callback = [(T value) => value]; late S Function<S extends T Function(T)>(S) f;
- Het is nu toegestaan om type-argumenten in annotaties op te geven, zoals @Deprecated. Bijvoorbeeld, nu kan opgegeven worden: @TypeHelper(42, "De betekenis")
- In de standaardbibliotheek (core) zijn statische methoden hash, hashAll en hashAllUnordered toegevoegd aan de Object-klasse. In de DateTime-klasse is de behandeling van lokale tijd verbeterd bij het omzetten van uren tussen zomer- en wintertijd die niet delend zijn door één uur (bijvoorbeeld in Australië wordt er een offset van 30 minuten gebruikt). In het ffi-pakket is ondersteuning toegevoegd voor het geheugenallocatiemechanisme 'arena', dat automatisch middelen vrijgeeft. In het ffigen-pakket is de mogelijkheid toegevoegd om typedef-definities van Dart-types uit de C-taal te genereren.
- De 250 meest populaire pakketten uit de pub.dev-repository en 94% van de top-1000 zijn aangepast voor het gebruik van de 'Null veilig'-modus (null safety), die crashes helpt voorkomen die ontstaan door het proberen te gebruiken van variabelen waarvan de waarde niet gedefinieerd is en in 'Null' is gezet. De modus houdt in dat variabelen geen ongedefinieerde waarden mogen hebben, tenzij ze expliciet een null-waarde toegewezen krijgen. In deze modus worden de typen van variabelen strikt gecontroleerd, waardoor de compiler extra optimalisaties kan toepassen. Typeovereenkomsten worden op compileertijd gecontroleerd; als bijvoorbeeld geprobeerd wordt om een null-waarde toe te wijzen aan een variabele van een type dat geen ongedefinieerde toestand toelaat, zoals 'int', zal er een foutmelding ontstaan.
- Er zijn uniforme set regels voorgesteld voor de code-analyzer (linter) die gelijktijdige ondersteuning biedt voor de stijlrichtlijnen voor Dart en het Flutter-framework. Historisch gezien verschilden de stijlrichtlijnen voor Flutter en Dart van elkaar, en voor Dart waren er twee sets regels in omloop — de pedante regels van Google en de richtlijnen van de Dart-ontwikkelaarscommunity. In Dart 2.14 is een nieuwe gezamenlijke set regels voor linter geïntroduceerd, die standaard moet worden toegepast in nieuwe Dart-projecten en in de Flutter SDK. De set bevat basisregels (pakket lints/core.yaml), aanbevolen aanvullende regels (lints/recommended.yaml) en specifieke aanbevelingen voor Flutter (flutter_lints/flutter.yaml). Gebruikers van de pedante regels wordt aangeraden over te stappen op de nieuwe codestijl, gebaseerd op de richtlijnen uit de Dart-documentatie.
- In de formatter zijn optimalisaties aangebracht in de opmaak van cascadeblokken, die de opmaakprestaties aanzienlijk verhogen en onduidelijkheden over de toekenning van elementverbindingen vermijden. Bijvoorbeeld, de aanroep van «..doIt» in de uitdrukking «var result = errorState ? foo : bad..doIt()» betreft niet het voorwaardelijke deel van het blok «bad», maar de gehele uitdrukking, waardoor de opmaak tegenwoordig als volgt wordt gescheiden: var result = errorState ? foo : bad ..doIt();
- De SDK heeft ondersteuning toegevoegd voor Apple M1-processors (Silicon), wat zowel de mogelijkheid inhoudt om de Dart VM, hulpprogramma's en SDK-componenten uit te voeren op systemen met Apple Silicon-processors als ondersteuning voor het compileren van uitvoerbare bestanden voor deze chips.
- Aan het commando «dart pub» is ondersteuning toegevoegd voor een nieuw hulpprogramma-bestand «.pubignore», waarmee een lijst van bestanden kan worden gedefinieerd die worden overgeslagen bij het publiceren van een package in de pub.dev-repository. De opgegeven instellingen komen niet overeen met de «.gitignore»-lijst (in sommige situaties moet pub.dev bestanden niet doorgeven die nodig zijn in Git, zoals interne scripts die tijdens de ontwikkeling worden gebruikt).
- Er zijn verbeteringen aangebracht in de prestaties van het commando «dart test», dat nu geen hercompilatie van tests vereist na het wijzigen van pubspec, zolang het versienummer niet is veranderd.
- De ondersteuning voor compilatie in de modus compatibiliteit met ECMAScript 5 is beëindigd (de wijziging zal leiden tot verlies van compatibiliteit met de browser IE11).
- Bepaalde hulpprogramma's zoals stagehand, dartfmt en dart2native zijn verouderd verklaard, en zijn vervangen door ingebouwde commando's die via het dart-hulpprogramma worden aangeroepen.
- Het VM Native Extensions-mechanisme is nu verouderd. Voor het aanroepen van native code vanuit Dart-code wordt het nieuwe Dart FFI (Foreign Function Interface) aanbevolen.
Tegelijkertijd is er een belangrijke release van het gebruikersinterface-framework Flutter 2.5 gepresenteerd, dat wordt beschouwd als een alternatief voor React Native en het mogelijk maakt om applicaties voor iOS, Android, Windows, macOS en Linux te ontwikkelen op basis van één codebasis, evenals applicaties voor gebruik in browsers. Flutter fungeert als de gebruikersinterface voor het in ontwikkeling zijnde microkernel-besturingssysteem Fuchsia van Google.
De meeste Flutter-code is geschreven in Dart, terwijl de runtime-engine voor het uitvoeren van applicaties is geschreven in C++. Bij het ontwikkelen van applicaties kan naast de standaard Dart-taal ook de Dart Foreign Function Interface worden gebruikt om C/C++-code aan te roepen. Hoge prestaties worden bereikt door applicaties te compileren naar machinecode voor de doelplatforms. Het programma hoeft niet opnieuw te worden gecompileerd na elke wijziging — Dart biedt een hot reload-modus waarmee aanpassingen in een actieve applicatie kunnen worden aangebracht en direct het resultaat kan worden geëvalueerd.
Belangrijkste wijzigingen in Flutter 2.5:
- Er zijn aanzienlijke prestatieoptimalisaties doorgevoerd. Op de platforms iOS en macOS is shader-precompilatie voor de grafische API Metal geïmplementeerd. De efficiëntie van het verwerken van asynchrone gebeurtenissen is verhoogd. De vertraging bij het vrijgeven van geheugen door de garbage collector van ongebruikte afbeeldingen is opgelost (bijvoorbeeld, tijdens het afspelen van een 20-seconden durende geanimeerde GIF is het aantal garbage collection-activiteiten verminderd van 400 naar 4). Tot 50% zijn de vertragingen bij het verzenden van berichten tussen Dart en Objective-C/Swift (iOS) of Java/Kotlin (Android) verminderd. Ondersteuning voor native builds voor systemen op basis van Apple Silicon is toegevoegd.

- Voor het Android-platform is ondersteuning voor het uitvoeren van apps in de volledige schermmodus tot stand gebracht. De implementatie van het ontwerpconcept 'Material You' is voortgezet, dat wordt gepresenteerd als een variant van het next-gen Material Design. Een nieuwe status, MaterialState.scrolledUnder, is toegevoegd, dynamische weergave van scrollbalken bij wijziging van de grootte is gerealiseerd en er is een nieuwe interface gepresenteerd voor het weergeven van notificatiebanners.
- De mogelijkheden van de camera-plugin zijn aanzienlijk uitgebreid, met tools voor het beheren van autofocus, belichting, flits, zoom, ruisonderdrukking en resolutie.
- De ontwikkelaarstools (DevTools) zijn verbeterd, met een vernieuwde modus voor het inspecteren van widgets en tools voor het identificeren van vertragingen tijdens de rendering en het volgen van shadercompilatie.

- Plugins voor Visual Studio Code en IntelliJ/Android Studio zijn verbeterd.
Bron: opennet.ru


