Διατίθεται γλώσσα προγραμματισμού Dart 2.15 και πλαίσιο Flutter 2.8

Η Google δημοσίευσε την κυκλοφορία της γλώσσας προγραμματισμού Dart 2.15, η οποία συνεχίζει την ανάπτυξη ενός ριζικά επανασχεδιασμένου κλάδου Dart 2, ο οποίος διαφέρει από την αρχική έκδοση της γλώσσας Dart στη χρήση ισχυρής στατικής πληκτρολόγησης (οι τύποι μπορούν να συναχθούν αυτόματα, προσδιορίζοντας έτσι οι τύποι δεν είναι απαραίτητοι, αλλά η δυναμική πληκτρολόγηση δεν χρησιμοποιείται πλέον και ο αρχικός υπολογισμός ο τύπος εκχωρείται στη μεταβλητή και στη συνέχεια εφαρμόζεται αυστηρός έλεγχος τύπου).

Χαρακτηριστικά της γλώσσας Dart:

  • Γνωστή και εύκολη στην εκμάθηση σύνταξη, φυσική για προγραμματιστές JavaScript, C και Java.
  • Εξασφάλιση γρήγορης εκκίνησης και υψηλής απόδοσης για όλα τα σύγχρονα προγράμματα περιήγησης ιστού και διάφορους τύπους περιβαλλόντων, από φορητές συσκευές έως ισχυρούς διακομιστές.
  • Η δυνατότητα ορισμού κλάσεων και διεπαφών που επιτρέπουν την ενθυλάκωση και την επαναχρησιμοποίηση υπαρχουσών μεθόδων και δεδομένων.
  • Ο καθορισμός τύπων διευκολύνει τον εντοπισμό σφαλμάτων και τον εντοπισμό σφαλμάτων, καθιστά τον κώδικα σαφέστερο και πιο ευανάγνωστο και απλοποιεί την τροποποίηση και την ανάλυσή του από τρίτους προγραμματιστές.
  • Οι υποστηριζόμενοι τύποι περιλαμβάνουν: διάφορους τύπους κατακερματισμών, πίνακες και λίστες, ουρές, αριθμούς και τύπους συμβολοσειρών, τύπους για τον προσδιορισμό ημερομηνίας και ώρας, κανονικές εκφράσεις (RegExp). Είναι δυνατό να δημιουργήσετε τους δικούς σας τύπους.
  • Για την οργάνωση της παράλληλης εκτέλεσης, προτείνεται η χρήση κλάσεων με το χαρακτηριστικό isolate, ο κώδικας των οποίων εκτελείται εξ ολοκλήρου σε απομονωμένο χώρο σε ξεχωριστή περιοχή μνήμης, αλληλεπιδρώντας με την κύρια διαδικασία στέλνοντας μηνύματα.
  • Υποστήριξη για τη χρήση βιβλιοθηκών που απλοποιούν την υποστήριξη και τον εντοπισμό σφαλμάτων μεγάλων έργων Ιστού. Οι υλοποιήσεις συναρτήσεων τρίτων μπορούν να συμπεριληφθούν με τη μορφή κοινόχρηστων βιβλιοθηκών. Οι εφαρμογές μπορούν να χωριστούν σε μέρη και να ανατεθεί η ανάπτυξη κάθε μέρους σε μια ξεχωριστή ομάδα προγραμματιστών.
  • Ένα σύνολο έτοιμων εργαλείων για την υποστήριξη της ανάπτυξης στη γλώσσα Dart, συμπεριλαμβανομένης της εφαρμογής εργαλείων δυναμικής ανάπτυξης και εντοπισμού σφαλμάτων με διόρθωση κώδικα εν κινήσει ("επεξεργασία και συνέχεια").
  • Για να απλοποιηθεί η ανάπτυξη στη γλώσσα Dart, συνοδεύεται από ένα SDK, μια παμπ διαχείρισης πακέτων, έναν αναλυτή στατικού κώδικα dart_analyzer, ένα σύνολο βιβλιοθηκών, ένα ενσωματωμένο περιβάλλον ανάπτυξης DartPad και προσθήκες με δυνατότητα Dart για IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 και Βιμ.
  • Πρόσθετα πακέτα με βιβλιοθήκες και βοηθητικά προγράμματα διανέμονται μέσω του αποθετηρίου παμπ, το οποίο έχει περίπου 22 χιλιάδες πακέτα.

Σημαντικές αλλαγές στην κυκλοφορία του Dart 2.15:

  • Παρέχει εργαλεία για γρήγορη παράλληλη εκτέλεση εργασιών με απομόνωση χειριστών. Σε συστήματα πολλαπλών πυρήνων, ο χρόνος εκτέλεσης Dart εκτελεί από προεπιλογή τον κώδικα εφαρμογής σε έναν πυρήνα CPU και χρησιμοποιεί άλλους πυρήνες για την εκτέλεση εργασιών συστήματος, όπως ασύγχρονη I/O, εγγραφή σε αρχεία ή πραγματοποίηση κλήσεων δικτύου. Για εφαρμογές που πρέπει να εκτελέσουν τους χειριστές τους παράλληλα, για παράδειγμα, για να αποδώσουν κινούμενα σχέδια στη διεπαφή, είναι δυνατή η εκκίνηση χωριστών μπλοκ κώδικα (απομόνωση), που απομονώνονται μεταξύ τους και εκτελούνται σε άλλους πυρήνες CPU ταυτόχρονα με το κύριο νήμα της εφαρμογής . Για προστασία από σφάλματα που προκύπτουν κατά την ταυτόχρονη εκτέλεση κώδικα που λειτουργεί με το ίδιο σύνολο δεδομένων, απαγορεύεται η κοινή χρήση μεταβλητών αντικειμένων σε διαφορετικά μπλοκ απομόνωσης και χρησιμοποιείται ένα μοντέλο μετάδοσης μηνυμάτων για αλληλεπίδραση μεταξύ χειριστών.

    Το Dart 2.15 εισάγει μια νέα ιδέα - απομονωμένες ομάδες μπλοκ (ομάδες απομόνωσης), η οποία σας επιτρέπει να οργανώνετε την κοινόχρηστη πρόσβαση σε διάφορες εσωτερικές δομές δεδομένων σε μπλοκ απομόνωσης που αποτελούν μέρος της ίδιας ομάδας, γεγονός που μπορεί να μειώσει σημαντικά την επιβάρυνση κατά την αλληλεπίδραση μεταξύ χειριστών σε μια ομάδα . Για παράδειγμα, η εκκίνηση ενός πρόσθετου μπλοκ απομόνωσης σε μια υπάρχουσα ομάδα είναι 100 φορές πιο γρήγορη και απαιτεί 10-100 φορές λιγότερη μνήμη από την εκκίνηση ενός ξεχωριστού μπλοκ απομόνωσης, λόγω της εξάλειψης της ανάγκης προετοιμασίας δομών δεδομένων προγράμματος.

    Παρά το γεγονός ότι τα μπλοκ απομόνωσης σε μια ομάδα εξακολουθούν να απαγορεύουν την κοινή πρόσβαση σε μεταβλητά αντικείμενα, οι ομάδες χρησιμοποιούν μια κοινόχρηστη μνήμη σωρού, η οποία μπορεί να επιταχύνει σημαντικά τη μεταφορά αντικειμένων από το ένα μπλοκ στο άλλο χωρίς να χρειάζεται να εκτελούνται λειτουργίες αντιγραφής με ένταση πόρων. Η νέα έκδοση σάς επιτρέπει επίσης να μεταβιβάσετε το αποτέλεσμα του χειριστή όταν καλείτε την Isolate.exit() για να μεταφέρετε δεδομένα στο γονικό μπλοκ απομόνωσης χωρίς λειτουργίες αντιγραφής. Επιπλέον, ο μηχανισμός μετάδοσης μηνυμάτων έχει βελτιστοποιηθεί - τα μικρά και μεσαία μηνύματα επεξεργάζονται πλέον περίπου 8 φορές πιο γρήγορα. Τα αντικείμενα που μπορούν να περάσουν μεταξύ απομονώσεων χρησιμοποιώντας την κλήση SendPort.send() περιλαμβάνουν ορισμένους τύπους συναρτήσεων, κλεισίματα και ίχνη στοίβας.

  • Στα εργαλεία για τη δημιουργία δεικτών σε μεμονωμένες συναρτήσεις σε άλλα αντικείμενα (tear-off), έχουν καταργηθεί οι περιορισμοί στη δημιουργία παρόμοιων δεικτών στον κώδικα κατασκευής, κάτι που μπορεί να είναι χρήσιμο κατά τη δημιουργία διεπαφών με βάση τη βιβλιοθήκη Flutter. Για παράδειγμα, για να δημιουργήσετε ένα γραφικό στοιχείο στήλης που περιλαμβάνει πολλαπλά γραφικά στοιχεία κειμένου, μπορείτε να καλέσετε το ".map()" και να περάσετε δείκτες στον κατασκευαστή Text.new του αντικειμένου κειμένου: η κλάση FruitWidget επεκτείνει StatelessWidget { @override Κατασκευή γραφικού στοιχείου(BuildContext context) { return Column( child: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Οι δυνατότητες που σχετίζονται με τη χρήση δεικτών συνάρτησης έχουν διευρυνθεί. Προστέθηκε η δυνατότητα χρήσης γενικών μεθόδων και δεικτών συνάρτησης για τη δημιουργία μιας μη γενικής μεθόδου και δείκτη: T id (Τ τιμή) => τιμή; var intId = id ; // επιτρέπεται στην έκδοση 2.15 αντί για "int Function(int) intId = id;" const fo = id; // δείκτης στο αναγνωριστικό συνάρτησης. const c1 = fo ;
  • Η βιβλιοθήκη dart:core έχει βελτιωμένη υποστήριξη για enums, για παράδειγμα, μπορείτε τώρα να εξάγετε μια τιμή συμβολοσειράς από κάθε τιμή enum χρησιμοποιώντας τη μέθοδο ".name", να επιλέξετε τιμές κατά όνομα ή να αντιστοιχίσετε ζεύγη τιμών: enum MyEnum { one , δύο, τρία } void main() { print(MyEnum.one.name); // Το "one" θα εκτυπωθεί. print(MyEnum.values.byName('two') == MyEnum.two); // Θα εκτυπωθεί το "true". τελικός χάρτης = MyEnum.values.asNameMap(); print(map['three'] == MyEnum.three); // "αληθινό". }
  • Έχει εφαρμοστεί μια τεχνική συμπίεσης δείκτη που επιτρέπει τη χρήση μιας πιο συμπαγούς αναπαράστασης δεικτών σε περιβάλλοντα 64 bit, εάν ένας χώρος διευθύνσεων 32 bit επαρκεί για τη διευθυνσιοδότηση (δεν χρησιμοποιούνται περισσότερα από 4 GB μνήμης). Οι δοκιμές έχουν δείξει ότι μια τέτοια βελτιστοποίηση καθιστά δυνατή τη μείωση του μεγέθους του σωρού κατά περίπου 10%. Στο Flutter SDK, η νέα λειτουργία είναι ήδη ενεργοποιημένη για Android από προεπιλογή και σχεδιάζεται να ενεργοποιηθεί για iOS σε μελλοντική έκδοση.
  • Το Dart SDK περιλαμβάνει εργαλεία για εντοπισμό σφαλμάτων και ανάλυση απόδοσης (DevTools), τα οποία προηγουμένως παρέχονται σε ξεχωριστό πακέτο.
  • Έχουν προστεθεί εργαλεία στην εντολή "dart pub" και στα αποθετήρια πακέτων pub.dev για την παρακολούθηση της τυχαίας δημοσίευσης εμπιστευτικών πληροφοριών, για παράδειγμα, αφήνοντας διαπιστευτήρια για συστήματα συνεχούς ενοποίησης και περιβάλλοντα cloud μέσα στο πακέτο. Εάν εντοπιστούν τέτοιες διαρροές, η εκτέλεση της εντολής "dart pub publish" θα διακοπεί με ένα μήνυμα σφάλματος. Εάν υπήρχε ψευδώς θετικό, είναι δυνατό να παρακάμψετε τον έλεγχο μέσω μιας λευκής λίστας.
  • Η δυνατότητα ανάκλησης μιας ήδη δημοσιευμένης έκδοσης ενός πακέτου έχει προστεθεί στο αποθετήριο pub.dev, για παράδειγμα, εάν ανακαλυφθούν επικίνδυνα σφάλματα ή τρωτά σημεία. Προηγουμένως, για τέτοιες διορθώσεις, η πρακτική ήταν να δημοσιεύεται μια διορθωτική έκδοση, αλλά σε ορισμένες περιπτώσεις είναι απαραίτητο να ακυρωθεί η υπάρχουσα έκδοση και να διακοπεί επειγόντως η περαιτέρω διανομή της (για παράδειγμα, εάν η διόρθωση δεν είναι ακόμη έτοιμη ή εάν ήταν πλήρης έκδοση δημοσιεύτηκε κατά λάθος αντί για δοκιμαστική έκδοση). Μετά την ανάκληση, το πακέτο δεν αναγνωρίζεται πλέον στις εντολές «pub get» και «pub upgrade» και σε συστήματα που το έχουν ήδη εγκαταστήσει, εκδίδεται ειδική προειδοποίηση την επόμενη φορά που θα εκτελεστεί το «pub get».
  • Προστέθηκε προστασία έναντι ευπάθειας (CVE-2021-22567) που προκαλείται από τη χρήση χαρακτήρων unicode στον κώδικα που αλλάζουν τη σειρά εμφάνισης.
  • Διορθώθηκε ένα θέμα ευπάθειας (CVE-2021-22568) που σας επιτρέπει να πλαστοπροσωπείτε έναν άλλο χρήστη pub.dev κατά τη δημοσίευση πακέτων σε διακομιστή τρίτου μέρους που δέχεται διακριτικά πρόσβασης pub.dev oauth2. Για παράδειγμα, η ευπάθεια θα μπορούσε να χρησιμοποιηθεί για επίθεση σε εσωτερικούς και εταιρικούς διακομιστές πακέτων. Οι προγραμματιστές που φιλοξενούν μόνο πακέτα στο pub.dev δεν επηρεάζονται από αυτό το ζήτημα.

Ταυτόχρονα, παρουσιάστηκε μια σημαντική έκδοση του πλαισίου διεπαφής χρήστη Flutter 2.8, το οποίο θεωρείται εναλλακτική του React Native και επιτρέπει, με βάση μια ενιαία βάση κώδικα, την κυκλοφορία εφαρμογών για iOS, Android, Windows, macOS και πλατφόρμες Linux, καθώς και δημιουργία εφαρμογών για εκτέλεση σε προγράμματα περιήγησης. Ένα προσαρμοσμένο κέλυφος για το λειτουργικό σύστημα μικροπυρήνα Fuchsia που αναπτύχθηκε από την Google έχει δημιουργηθεί με βάση το Flutter. Σημειώνεται ότι τους τελευταίους έξι μήνες, ο αριθμός των εφαρμογών Flutter 2 στο Google Play Store έχει αυξηθεί από 200 χιλιάδες σε 375 χιλιάδες, δηλ. σχεδόν δύο φορές.

Το κύριο μέρος του κώδικα Flutter υλοποιείται στη γλώσσα Dart και η μηχανή χρόνου εκτέλεσης για την εκτέλεση εφαρμογών είναι γραμμένη σε C++. Κατά την ανάπτυξη εφαρμογών, εκτός από τη μητρική γλώσσα Dart του Flutter, μπορείτε να χρησιμοποιήσετε τη διεπαφή Dart Foreign Function για να καλέσετε τον κώδικα C/C++. Η υψηλή απόδοση εκτέλεσης επιτυγχάνεται με τη μεταγλώττιση εφαρμογών σε εγγενή κώδικα για πλατφόρμες-στόχους. Σε αυτήν την περίπτωση, το πρόγραμμα δεν χρειάζεται να μεταγλωττίζεται ξανά μετά από κάθε αλλαγή - Το Dart παρέχει μια λειτουργία επανάληψης φόρτωσης που σας επιτρέπει να κάνετε αλλαγές σε μια εφαρμογή που εκτελείται και να αξιολογήσετε αμέσως το αποτέλεσμα.

Μεταξύ των αλλαγών στη νέα έκδοση του Flutter, σημειώνεται η βελτιστοποίηση της ταχύτητας εκκίνησης και της κατανάλωσης μνήμης σε φορητές συσκευές. Είναι πιο εύκολο να συνδέσετε εφαρμογές με υπηρεσίες υποστήριξης όπως το Firebase και το Google Cloud. Τα εργαλεία για την ενοποίηση με το Google Ads έχουν σταθεροποιηθεί. Η υποστήριξη για κάμερες και πρόσθετα ιστού έχει βελτιωθεί σημαντικά. Έχουν προταθεί νέα εργαλεία για την απλοποίηση της ανάπτυξης, για παράδειγμα, προστέθηκε ένα widget για έλεγχο ταυτότητας χρησιμοποιώντας το Firebase. Η μηχανή Flame, σχεδιασμένη για την ανάπτυξη παιχνιδιών 2D με χρήση Flutter, έχει ενημερωθεί.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο