Sono disponibili il linguaggio di programmazione Dart 2.15 e il framework Flutter 2.8.

L'azienda Google ha pubblicato il rilascio del linguaggio di programmazione Dart 2.15, continuando lo sviluppo della versione radicalmente rielaborata di Dart 2, che si differenzia dall'originale per l'uso di una tipizzazione statica forte (i tipi possono essere dedotti automaticamente, quindi l'indicazione dei tipi non è obbligatoria, ma non è più utilizzata la tipizzazione dinamica e il tipo inizialmente calcolato è fissato alla variabile, applicando quindi un controllo rigoroso del tipo).

Caratteristiche del linguaggio Dart:

  • Una sintassi familiare e semplice da apprendere, naturale per i programmatori di JavaScript, C e Java.
  • Assicurare un avvio rapido e alte prestazioni per tutti i moderni browser web e vari tipi di ambienti, da dispositivi portatili a potenti server.
  • La possibilità di definire classi e interfacce, consentendo di utilizzare l'incapsulamento e riutilizzare metodi e dati esistenti.
  • La specificazione dei tipi facilita il debug e l'identificazione degli errori, rende il codice più chiaro e leggibile, semplifica le modifiche e l'analisi da parte di altri sviluppatori.
  • Tra i tipi supportati: diverse varietà di hash, array e liste, code, tipi numerici e stringhe, tipi per la definizione di data e ora, espressioni regolari (RegExp). È possibile creare tipi personalizzati.
  • Per organizzare l'esecuzione parallela, si consiglia di utilizzare classi con l'attributo isolate, il cui codice viene eseguito completamente in uno spazio isolato in un'area di memoria separata, interagendo con il processo principale tramite l'invio di messaggi.
  • Supporto per l'uso di librerie, che semplificano la manutenzione e il debug di grandi progetti web. Implementazioni di funzioni di terze parti possono essere collegate come librerie condivise. Le applicazioni possono essere suddivise in parti e lo sviluppo di ciascuna parte può essere assegnato a un team di programmatori separato.
  • Un insieme di strumenti pronti per supportare lo sviluppo nel linguaggio Dart, inclusa l'implementazione di strumenti per lo sviluppo e il debug dinamico con correzione del codice al volo («edit-and-continue»).
  • Per semplificare lo sviluppo nel linguaggio Dart, è fornito un SDK, un gestore pacchetti pub, un analizzatore statico del codice dart_analyzer, un insieme di librerie, un ambiente di sviluppo integrato DartPad e plugin con supporto Dart per IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 e Vim.
  • Pacchetti aggiuntivi con librerie e utilità sono distribuiti attraverso il repository pub, che conta circa 22.000 pacchetti.

Le principali novità del rilascio di Dart 2.15:

  • Sono stati forniti strumenti per l'esecuzione parallela rapida di attività con isolamento dei gestori. Su sistemi multicore, il runtime di Dart esegue per impostazione predefinita il codice dell'applicazione su un core CPU, mentre gli altri core sono utilizzati per compiti di sistema, come l'input/output asincrono, la scrittura su file o le chiamate di rete. Per le applicazioni che devono eseguire i propri gestori in parallelo, ad esempio per il rendering delle animazioni nell'interfaccia, è possibile avviare singoli blocchi di codice (isolate), isolati l'uno dall'altro e eseguiti su altri core CPU contemporaneamente con il thread principale dell'applicazione. Per proteggere da errori che si verificano durante l'esecuzione simultanea di codice che opera su un insieme di dati comune, è vietato l'uso condiviso di oggetti mutabili in diversi blocchi isolate, mentre per l'interazione tra i gestori viene utilizzato un modello basato sul passaggio di messaggi.

    In Dart 2.15 è proposta una nuova concezione: i gruppi di blocchi isolati (isolate groups), che consentono di organizzare l'accesso condiviso a diverse strutture dati interne nei blocchi isolate che appartengono a un unico gruppo, riducendo significativamente le spese generali nell'interazione tra i gestori del gruppo. Ad esempio, l'avvio di un blocco isolato aggiuntivo in un gruppo esistente avviene 100 volte più velocemente e richiede da 10 a 100 volte meno memoria rispetto all'avvio di un blocco isolato separato, grazie all'esclusione della necessità di inizializzare le strutture dati del programma.

    Nonostante il fatto che l'accesso condiviso agli oggetti mutabili sia ancora vietato nei blocchi isolate, i gruppi utilizzano una memoria heap condivisa, il che consente di accelerare significativamente il trasferimento degli oggetti da un blocco all'altro senza la necessità di eseguire operazioni di copia dispendiose in termini di risorse. Nella nuova versione è anche permesso trasmettere il risultato dell'elaborazione del gestore al momento della chiamata di Isolate.exit() per inviare dati al blocco isolate genitore senza operazioni di copia. Inoltre, è stata ottimizzata la meccanica di trasferimento dei messaggi: i messaggi piccoli e medi ora vengono elaborati circa 8 volte più velocemente. Tra gli oggetti che possono essere trasmessi tra i blocchi isolate utilizzando la chiamata SendPort.send(), sono inclusi alcuni tipi di funzioni, chiusure e tracciamenti dello stack.

  • Negli strumenti per creare puntatori su funzioni specifiche in altri oggetti (tear-off) sono state rimosse le restrizioni sulla creazione di tali puntatori nel codice dei costruttori, il che può essere utile nella costruzione di interfacce basate sulla libreria Flutter. Ad esempio, per creare un widget Column che include più widget Text, è possibile chiamare «.map()» e passare i puntatori al costruttore Text.new dell'oggetto Text: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: [‘Apple’, ‘Orange’].map(Text.new).toList()); } }
  • Ampliate le funzionalità relative all'uso dei puntatori alle funzioni. È stata aggiunta la possibilità di applicare metodi generici (generic) e puntatori delle funzioni per creare un metodo non generico e un puntatore: T id<T>(T value) => value; var intId = id<int>; // consentito nella versione 2.15 invece di «int Function(int) intId = id;» const fo = id; // puntatore alla funzione id. const c1 = fo<int>;
  • Nella libreria dart:core è stato migliorato il supporto per le enumerazioni (enum); ad esempio, ora è possibile ottenere il valore stringa di ciascun valore enum tramite il metodo «.name», filtrare i valori per nome o eseguire associazioni di coppie di valori: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // stamperà «one». print(MyEnum.values.byName(‘two’) == MyEnum.two); // stamperà «true». final map = MyEnum.values.asNameMap(); print(map[‘three’] == MyEnum.three); // «true». }
  • È stata implementata una tecnica di compressione dei puntatori che consente di utilizzare una rappresentazione più compatta dei puntatori in ambienti a 64 bit, se per l'indirizzamento basta uno spazio di indirizzamento a 32 bit (utilizzando non più di 4 GB di memoria). I test hanno mostrato che tale ottimizzazione consente di ridurre la dimensione dell'heap di circa il 10%. Nel Flutter SDK, questo nuovo stato è già attivato per Android per impostazione predefinita e in una futura versione è previsto di attivarlo anche per iOS.
  • Il Dart SDK include strumenti per il debug e l'analisi delle prestazioni (DevTools), precedentemente forniti in un pacchetto separato.
  • Nella comanda «dart pub» e nei repository dei pacchetti pub.dev sono stati aggiunti strumenti per monitorare la pubblicazione accidentale di informazioni riservate, come la memorizzazione nel pacchetto di credenziali per sistemi di integrazione continua e ambienti cloud. In caso di rilevamento di tali perdite, l'esecuzione del comando «dart pub publish» verrà interrotta con un messaggio di errore. Se si verifica un falso positivo, è possibile bypassare il controllo tramite una lista bianca.
  • Nel repository pub.dev è stata aggiunta la possibilità di revocare una versione del pacchetto già pubblicata, ad esempio in caso di gravi bug o vulnerabilità. In precedenza, per tali correzioni si pubblicava una versione correttiva successivamente, ma in alcune situazioni è necessario annullare un rilascio già avvenuto e fermarne la diffusione (ad esempio, se le correzioni non sono ancora pronte o se accidentalmente è stata pubblicata una versione completa invece di una versione di prova). Dopo la revoca, il pacchetto non verrà più riconosciuto nei comandi «pub get» e «pub upgrade», e nei sistemi che già lo hanno installato verrà visualizzato un avviso speciale durante la successiva esecuzione di «pub get».
  • È stata aggiunta una protezione contro la vulnerabilità (CVE-2021-22567) causata dall'uso nel codice di simboli unicode che modificano l'ordine di visualizzazione.
  • È stata risolta una vulnerabilità (CVE-2021-22568) che consentiva di impersonare un altro utente di pub.dev durante la pubblicazione di pacchetti su un server di terze parti che accetta token di accesso oauth2 di pub.dev. Ad esempio, la vulnerabilità potrebbe essere utilizzata per attaccare server di pacchetti interni e aziendali. I sviluppatori che pubblicano pacchetti solo su pub.dev non sono interessati da questo problema.

È stato presentato contemporaneamente un importante rilascio del framework per la creazione di interfacce utente Flutter 2.8, considerato un'alternativa a React Native e che consente di pubblicare applicazioni per le piattaforme iOS, Android, Windows, macOS e Linux sulla base di un'unica codebase, oltre a creare applicazioni da eseguire nei browser. Su Flutter è stata costruita l'interfaccia utente del sistema operativo microkernel Fuchsia in via di sviluppo presso Google. Si segnala che negli ultimi sei mesi il numero di applicazioni su Flutter 2 nel Google Play Store è aumentato da 200.000 a 375.000, cioè quasi raddoppiato.

La maggior parte del codice Flutter è scritta in Dart, mentre il motore runtime per l'esecuzione delle applicazioni è sviluppato in C++. Nello sviluppo delle applicazioni, oltre al linguaggio Dart nativo di Flutter, è possibile utilizzare l'interfaccia Dart Foreign Function per richiamare codice in C/C++. Le elevate prestazioni di esecuzione sono ottenute grazie alla compilazione delle applicazioni in codice macchina per le piattaforme di destinazione. Non è necessario ricompilare il programma dopo ogni modifica: Dart offre una modalità di hot reload che consente di apportare modifiche all'applicazione in esecuzione e di valutare immediatamente il risultato.

Tra le novità della nuova versione di Flutter, si segnala l'ottimizzazione della velocità di avvio e del consumo di memoria sui dispositivi mobili. È stato semplificato il collegamento delle applicazioni ai servizi backend, come Firebase e Google Cloud. Stabilizzati gli strumenti per l'integrazione con Google Ads. È stata migliorata notevolmente la supporto per fotocamere e plugin web. Sono stati proposti nuovi strumenti per semplificare lo sviluppo, ad esempio, è stato aggiunto un widget per l'autenticazione con Firebase. È stato aggiornato il motore Flame, destinato allo sviluppo di giochi 2D utilizzando Flutter.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster