Έκδοση της γλώσσας προγραμματισμού Haxe 4.0

Διαθέσιμος απελευθέρωση εργαλειοθήκης Haxe 4.0, το οποίο περιλαμβάνει την ομώνυμη γλώσσα προγραμματισμού υψηλού επιπέδου πολλαπλών παραδειγμάτων με ισχυρή πληκτρολόγηση, ένα cross-compiler και μια τυπική βιβλιοθήκη συναρτήσεων. Το έργο υποστηρίζει μετάφραση σε C++, HashLink/C, JavaScript, C#, Java, PHP, Python και Lua, καθώς και μεταγλώττιση σε JVM, HashLink/JIT, Flash και Neko bytecode, με πρόσβαση στις εγγενείς δυνατότητες κάθε πλατφόρμας στόχου. Κώδικας μεταγλωττιστή διανέμονται από υπό την άδεια GPLv2 και μια τυπική βιβλιοθήκη και μια εικονική μηχανή που αναπτύχθηκε για το Haxe Νέκο υπό την άδεια του MIT.

Η γλώσσα είναι προσανατολισμένη στην έκφραση με δυνατή πληκτρολόγηση. Υποστηρίζονται αντικειμενοστρεφείς, γενικές και λειτουργικές έννοιες προγραμματισμού.
Η σύνταξη Haxe είναι κοντά στο ECMAScript και επεκτείνεται τα χαρακτηριστικά του όπως στατική πληκτρολόγηση, συμπέρασμα αυτόματων τύπων, αντιστοίχιση προτύπων, γενικά, επαναλήπτες για βρόχους, μακροεντολές AST, GADT (γενικευμένοι αλγεβρικοί τύποι δεδομένων), αφηρημένοι τύποι, ανώνυμες δομές, απλοποιημένοι ορισμοί πινάκων, εκφράσεις μεταγλώττισης υπό όρους , επισύναψη μεταδεδομένων σε πεδία , κλάσεις και εκφράσεις, παρεμβολή συμβολοσειρών ('My name is $name'), πληκτρολογήστε παραμέτρους ("new Main‹String›('foo')") και πολύ περισσότερο.

Δοκιμή τάξης {
στατική συνάρτηση main() {
var άτομα = [
"Elizabeth" => "Προγραμματισμός",
"Joel" => "Σχέδιο"
];

για (όνομα σε people.keys()) {
var job = άτομα[όνομα];
trace('$name κάνει $δουλειά για τα προς το ζην!');
}
}
}

Ο κύριος καινοτομίες έκδοση 4.0:

  • Νέα σύνταξη για τον καθορισμό του τύπου συνάρτησης "(όνομα:String, age:Int)->Bool" ή "(String, Int)->Bool" αντί για "String->Int->Bool".
  • Η σύνταξη της συνάρτησης βέλους είναι "(a, b) -> a + b" αντί για "function(a, b) return a + b".
  • Προστασία από προβλήματα που σχετίζονται με τη χρήση τιμών Null (πειραματική δυνατότητα, προαιρετικά ενεργοποιημένη για ορισμένα πεδία, κλάσεις ή πακέτα).
  • Η λέξη-κλειδί "τελική" είναι για πεδία κλάσης και τοπικές μεταβλητές που είναι αμετάβλητες. Το "final" μπορεί επίσης να χρησιμοποιηθεί για να ορίσει συναρτήσεις για να αποτρέψει την παράκαμψή τους από κληρονομικότητα και για κλάσεις/διεπαφές που δεν μπορούν να κληρονομηθούν.
  • Υποστήριξη Πρότυπο Unicode για τον βασικό τύπο "String" σε όλους τους στόχους μεταγλώττισης εκτός από το Neko.
  • Ενσωματωμένος διερμηνέας ξαναγραμμένος από την αρχή, ο οποίος τώρα έρχεται κάτω από το όνομα Κακό. Χάρη στον νέο διερμηνέα, τα σενάρια και οι μακροεντολές εκτελούνται πολύ πιο γρήγορα. Υποστηρίζεται η διαδραστική λειτουργία εντοπισμού σφαλμάτων.
  • Νέο σύστημα στόχου για μεταγλώττιση (στόχος) Hashlink - ένας χρόνος εκτέλεσης υψηλής απόδοσης σχεδιασμένος ειδικά για Haxe, που υποστηρίζει τη μεταγλώττιση σε bytecode για JIT ή C, έχει εύκολη ενσωμάτωση με το C, καθώς και πρόσβαση σε χαμηλού επιπέδου αριθμητικούς τύπους και δείκτες.
  • Νέος στόχος JVM - σας επιτρέπει να δημιουργήσετε bytecode jvm παραλείποντας το βήμα μεταγλώττισης κώδικα Java προσθέτοντας τη σημαία "-D jvm" κατά τη στόχευση σε Java.
  • Η δυνατότητα ενσωματωμένης ανάπτυξης στο σημείο κλήσης συναρτήσεων ή κατασκευαστών, ακόμα κι αν δεν έχουν δηλωθεί ως τέτοιες.
  • Δυνατότητα ένταξης στατικές επεκτάσεις όταν δηλώνετε έναν τύπο (όπως "enum") χρησιμοποιώντας "@:using(path.ToExtension)".
  • Οι αφηρημένοι τύποι υποστηρίζουν τώρα μια έκδοση "set" του τελεστή "@:op(ab)" για να φορτώσει εκ νέου τις εκφράσεις "obj.foo = bar".
  • Η σύνταξη βρόχου "for" υποστηρίζει τώρα επανάληψη κλειδιού-τιμής: "for (key => τιμή στη συλλογή) {}".
  • Υποστήριξη για χρήση σήμανσης τύπου xml σε εκφράσεις: "var a = ‹hi/›;". Προς το παρόν, αυτή η δυνατότητα είναι διαθέσιμη μόνο για ανάλυση με μακροεντολές και βρίσκεται στο στάδιο του σχεδιασμού.
  • Η σύνταξη για τα προαιρετικά πεδία στην «πλήρη» σημειογραφία των ανώνυμων τύπων δομών είναι: «{ var ?f:Int; }" (μια εναλλακτική του σύντομου "{ ?f:Int }").
  • Οι τιμές Enum μπορούν πλέον να είναι προεπιλεγμένες τιμές για ορίσματα συνάρτησης: "function foo‹T›(option:Option‹T› = None)".
  • Η σύνταξη "enum abstract Name(BasicType) {}" δεν απαιτεί πλέον το πρόθεμα "@:" στο "enum".
  • Αυτόματη αρίθμηση για αφηρημένες απαριθμήσεις:

    enum abstract Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enum abstract bar(string) {
    var A; // "ΕΝΑ"
    var B; // "Β"
    }

  • Η λέξη-κλειδί "εξωτερική" δεν απαιτεί πλέον τη χρήση του προθέματος "@:".
  • Καταργήθηκε η επιλογή "υλοποιεί Dynamic" για πρόσβαση σε πεδία κλάσης μέσω συμβολοσειρών. Διατίθεται για εξωτερικές κλάσεις ή μέσω υλοποίησης με αφηρημένο τύπο.
  • Προστέθηκε σύνταξη "A & B" για τομή τύπων, η οποία προς το παρόν ισχύει μόνο για ανώνυμες δομές και περιορισμούς παραμέτρων τύπου. Η παλιά σύνταξη περιορισμών έχει αφαιρεθεί.
  • Η δημιουργία κενών περιπτώσεων "Χάρτης" είναι διαθέσιμη μέσω της σύνταξης "var map:Map‹Int, String› = [];" παρόμοια με έναν πίνακα.
  • Προστέθηκε δομή δεδομένων "haxe.ds.ReadOnlyArray".
  • Τα μεταδεδομένα μπορούν πλέον να έχουν χώρους ονομάτων (“@:prefix.name function() {…}”). Ομοίως με τους ορισμούς: "#if (some.flag ... #end".
  • Νέο πρωτόκολλο υπηρεσίας για IDE που χρησιμοποιούνται σε πρόσθετο για VSCode.
  • Ενημερώθηκαν οι εξωτερικοί ορισμοί (εξωτερικοί) για API Ιστού και προστέθηκαν αυτοί που λείπουν.

Πηγή: opennet.ru

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