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

Δημοσιεύτηκε η κυκλοφορία της γλώσσας προγραμματισμού Crystal 1.16, οι προγραμματιστές της οποίας προσπαθούν να συνδυάσουν την ευκολία ανάπτυξης στη γλώσσα Ruby με την υψηλή απόδοση εφαρμογής που χαρακτηρίζει τη γλώσσα C. Η σύνταξη του Crystal είναι κοντά, αλλά όχι πλήρως συμβατή με τη Ruby, αν και ορισμένα προγράμματα Ruby εκτελούνται χωρίς τροποποίηση. Ο κώδικας μεταγλωττιστή είναι γραμμένος σε Crystal και διανέμεται με την άδεια Apache 2.0.

Η γλώσσα χρησιμοποιεί έλεγχο στατικού τύπου, ο οποίος υλοποιείται χωρίς να χρειάζεται να προσδιορίζονται ρητά οι τύποι μεταβλητών και τα ορίσματα μεθόδου στον κώδικα. Τα Crystal προγράμματα μεταγλωττίζονται σε εκτελέσιμα αρχεία, με τις μακροεντολές να αξιολογούνται και να δημιουργείται κώδικας κατά το χρόνο μεταγλώττισης. Στα προγράμματα Crystal, είναι δυνατή η σύνδεση συνδέσμων γραμμένων σε C. Η παραλληλοποίηση της εκτέλεσης κώδικα πραγματοποιείται χρησιμοποιώντας τη λέξη-κλειδί "spawn", η οποία σας επιτρέπει να εκτελέσετε μια εργασία παρασκηνίου σε ασύγχρονη λειτουργία χωρίς να μπλοκάρετε το κύριο νήμα, με τη μορφή ελαφρών νημάτων που ονομάζονται fibers.

Η τυπική βιβλιοθήκη παρέχει ένα σύνολο τυπικών συναρτήσεων, συμπεριλαμβανομένων εργαλείων για την επεξεργασία CSV, YAML και JSON, στοιχείων για τη δημιουργία διακομιστών HTTP και υποστήριξης WebSocket. Κατά την ανάπτυξη, μπορείτε να χρησιμοποιήσετε την εντολή "crystal play", η οποία δημιουργεί μια διεπαφή ιστού (localhost:8080 από προεπιλογή) για διαδραστική εκτέλεση κώδικα Crystal.

Βασικές αλλαγές:

  • Προστέθηκε πειραματική υποστήριξη για την εκτέλεση ελαφρών νημάτων (ινών) σε ξεχωριστά περιβάλλοντα εκτέλεσης (Πλαίσια Εκτέλεσης), η οποία επιτρέπει την πιο αποτελεσματική παράλληλη εκτέλεση εργασιών - ο αποκλεισμός νημάτων σε ένα περιβάλλον δεν οδηγεί σε διακοπή εκτέλεσης σε ένα άλλο. mt_context = Fiber::ExecutionContext::MultiThreaded.new("worker-threads", 4) 10.φορές που κάνει το mt_context.spawn να κάνει do_something τέλος τέλος gtk = Fiber::ExecutionContext::Isolated.new("Gtk") να κάνει Gtk.main τέλος gtk.wait
  • Η μέθοδος Slice.literal παρέχει πλέον έξοδο του τύπου των στοιχείων που περιέχονται σε ένα slice και προσθέτει υποστήριξη για εργασία σε διερμηνέα.
  • Οι μακροεντολές sizeof και alignof παρέχουν πληροφορίες σχετικά με τους σταθερούς τύπους.
  • Νέες μέθοδοι έχουν προστεθεί στην τυπική βιβλιοθήκη: Indexable#find, #find!, EventLoop#wait_readable και #wait_writable.
  • Ο μεταγλωττιστής έχει μια μακρά έκδοση της επιλογής "-o", "--output", και έχει υλοποιηθεί η δυνατότητα καθορισμού ενός καταλόγου αντί για ένα αρχείο (το όνομα του αρχείου θα επιλεγεί σύμφωνα με το όνομα του αρχείου με τον κώδικα).
  • Το πρόγραμμα δημιουργίας τεκμηρίωσης έχει πλέον τη δυνατότητα να συμπεριλάβει ιδιωτικά και προστατευμένα αντικείμενα, καθώς και αντικείμενα σε δεσμεύσεις βιβλιοθήκης (lib, fun, union, cstruct, εξωτερικό, τύπος) στην τεκμηρίωση.
  • Στο "File.match?" μέθοδος Έχει εφαρμοστεί ένας νέος αλγόριθμος αντιστοίχισης διαδρομής αρχείου, ο οποίος έχει εξαλείψει ορισμένα προβλήματα και περιορισμούς. Για παράδειγμα, διαφυγή χαρακτήρων (η μάσκα "\\t" αντιστοιχεί στο "\t" αλλά όχι στον χαρακτήρα "t"), διαχωρισμός διαδρομής (η μάσκα "a**" ταιριάζει με "ab" αλλά αποτυγχάνει για "ab/c", ενώ η μάσκα "**/a" ταιριάζει με "a"), ένθετα μοτίβα (η "{[}]}" ταιριάζει με το "}") και η μάσκα με το χέρι αντιστοιχεί σε "-" σωστά.
  • Τα επιθήματα "?" έχουν καταργηθεί στα ονόματα των παραμέτρων σε ορισμούς (defs), μακροεντολές και μπλοκ. Και "!".
  • Στις μεθόδους Enumerable#sum και #product, ο αυτόματος προσδιορισμός του τύπου επιστροφής έχει αφαιρεθεί εάν ο τύπος στοιχείου είναι ένωση. Όταν καλείτε αυτές τις μεθόδους, πρέπει τώρα να καθορίσετε ρητά τον τύπο, για παράδειγμα, αντί για "[1, 10000000000_u64].sum" θα πρέπει να γράψετε "[1, 10000000000_u64].sum(0_u64)".
  • HTTP::Το αίτημα διασφαλίζει τη σωστή ανάλυση των τμημάτων URL.
  • Προστέθηκε υποστήριξη για τη σουίτα μεταγλωττιστών LLVM 20.
  • Οι κλήσεις προς LLVM::ABI και LLVM::TargetMachine#abi έχουν καταργηθεί.

    Πηγή: opennet.ru

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