Κυκλοφορία της γλώσσας προγραμματισμού Julia 1.8

Η έκδοση της γλώσσας προγραμματισμού Julia 1.8 είναι διαθέσιμη, η οποία συνδυάζει ιδιότητες όπως υψηλή απόδοση, υποστήριξη για δυναμική πληκτρολόγηση και ενσωματωμένα εργαλεία για παράλληλο προγραμματισμό. Η σύνταξη της Julia είναι κοντά στο MATLAB, δανειζόμενος κάποια στοιχεία από τους Ruby και Lisp. Η μέθοδος χειρισμού χορδών θυμίζει Perl. Ο κωδικός του έργου διανέμεται με την άδεια MIT.

Βασικά χαρακτηριστικά της γλώσσας:

  • Υψηλή απόδοση: ένας από τους βασικούς στόχους του έργου είναι η επίτευξη απόδοσης κοντά στα προγράμματα C. Ο μεταγλωττιστής Julia βασίζεται στην εργασία του έργου LLVM και δημιουργεί αποτελεσματικό εγγενή κώδικα μηχανής για πολλές πλατφόρμες-στόχους.
  • Υποστηρίζει διάφορα παραδείγματα προγραμματισμού, συμπεριλαμβανομένων στοιχείων αντικειμενοστρεφούς και λειτουργικού προγραμματισμού. Η τυπική βιβλιοθήκη παρέχει, μεταξύ άλλων, λειτουργίες για ασύγχρονη I/O, έλεγχο διεργασιών, καταγραφή, δημιουργία προφίλ και διαχείριση πακέτων.
  • Δυναμική πληκτρολόγηση: η γλώσσα δεν απαιτεί ρητό ορισμό τύπων για μεταβλητές, παρόμοιο με τις γλώσσες προγραμματισμού δέσμης ενεργειών. Υποστηρίζεται η διαδραστική λειτουργία.
  • Προαιρετική δυνατότητα ρητού προσδιορισμού τύπων.
  • Μια σύνταξη ιδανική για αριθμητικούς υπολογισμούς, επιστημονικούς υπολογισμούς, μηχανική μάθηση και οπτικοποίηση δεδομένων. Υποστήριξη πολλών τύπων αριθμητικών δεδομένων και εργαλείων για παραλληλοποίηση υπολογισμών.
  • Η δυνατότητα απευθείας κλήσης συναρτήσεων από βιβλιοθήκες C χωρίς πρόσθετα επίπεδα.

Σημαντικές αλλαγές στο Julia 1.8:

  • Νέα χαρακτηριστικά γλώσσας
    • Τα πεδία μιας μεταβλητής δομής μπορούν τώρα να σχολιαστούν ως σταθερές για να αποφευχθεί η αλλαγή τους και να επιτραπεί η βελτιστοποίηση.
    • Οι σχολιασμοί τύπων μπορούν να προστεθούν σε καθολικές μεταβλητές.
    • Κενοί πίνακες n-διαστάσεων μπορούν να δημιουργηθούν χρησιμοποιώντας πολλαπλά ερωτηματικά μέσα σε αγκύλες, για παράδειγμα το "[;;;]" δημιουργεί έναν πίνακα 0x0x0.
    • Τα μπλοκ δοκιμής μπορούν πλέον να έχουν προαιρετικά ένα μπλοκ else, το οποίο εκτελείται αμέσως μετά το κύριο σώμα, εάν δεν σημειωθούν σφάλματα.
    • Τα @inline και @noinline μπορούν να τοποθετηθούν μέσα σε ένα σώμα συνάρτησης, επιτρέποντάς σας να σχολιάσετε μια ανώνυμη συνάρτηση.
    • Τα @inline και @noinline μπορούν τώρα να εφαρμοστούν σε μια συνάρτηση σε μια τοποθεσία κλήσης ή αποκλεισμό για να αναγκάσουν τις αντίστοιχες κλήσεις συναρτήσεων να συμπεριληφθούν (ή να μην συμπεριληφθούν).
    • Τα ∀, ∃ και ∄ επιτρέπονται ως αναγνωριστικοί χαρακτήρες.
    • Προστέθηκε υποστήριξη για τις προδιαγραφές Unicode 14.0.0.
    • Η μέθοδος Module(:name, false, false) μπορεί να χρησιμοποιηθεί για τη δημιουργία μιας λειτουργικής μονάδας που δεν περιέχει ονόματα, δεν εισάγει Base ή Core και δεν περιέχει αναφορά στον εαυτό της.
  • Αλλαγές στη γλώσσα
    • Τα αντικείμενα Task που δημιουργήθηκαν πρόσφατα (@spawn, @async, κ.λπ.) έχουν πλέον world_age για μεθόδους από τη μητρική Εργασία όταν δημιουργούνται, επιτρέποντας τη βελτιστοποιημένη εκτέλεση. Η προηγούμενη επιλογή ενεργοποίησης είναι διαθέσιμη χρησιμοποιώντας τη μέθοδο Base.invokelatest.
    • Οι οδηγίες μη ισορροπημένης αμφίδρομης μορφοποίησης Unicode απαγορεύονται πλέον σε συμβολοσειρές και σχόλια για να αποφευχθούν οι ενέσεις.
    • Το Base.ifelse ορίζεται πλέον ως γενική συνάρτηση παρά ως ενσωματωμένο, επιτρέποντας στα πακέτα να επεκτείνουν τον ορισμό του.
    • Κάθε εκχώρηση σε μια καθολική μεταβλητή περνά τώρα πρώτα από μια κλήση για μετατροπή (Οποιαδήποτε, x) ή μετατροπή (T, x) εάν η καθολική μεταβλητή δηλώθηκε ότι είναι τύπου T. Πριν χρησιμοποιήσετε τις καθολικές μεταβλητές, βεβαιωθείτε ότι η αμετάβλητη μετατροπή (Οποιαδήποτε , x) === Το x είναι πάντα αληθές, διαφορετικά μπορεί να οδηγήσει σε απροσδόκητη συμπεριφορά.
    • Οι ενσωματωμένες συναρτήσεις είναι πλέον παρόμοιες με τις γενικές συναρτήσεις και μπορούν να απαριθμηθούν μέσω προγραμματισμού χρησιμοποιώντας μεθόδους.
  • Βελτιώσεις μεταγλωττιστή/χρόνου εκτέλεσης
    • Ο χρόνος εκκίνησης μειώθηκε κατά περίπου 25%.
    • Ο μεταγλωττιστής που βασίζεται σε LLVM έχει διαχωριστεί από τη βιβλιοθήκη χρόνου εκτέλεσης σε μια νέα βιβλιοθήκη, τη libjulia-codegen. Φορτώνεται από προεπιλογή, επομένως δεν πρέπει να υπάρχουν αλλαγές κατά την κανονική χρήση. Σε αναπτύξεις που δεν χρειάζονται μεταγλωττιστή (για παράδειγμα, εικόνες συστήματος στις οποίες έχει προμεταγλωττιστεί όλος ο απαραίτητος κώδικας), αυτή η βιβλιοθήκη (και η εξάρτησή της από το LLVM) μπορεί απλώς να παραλειφθεί.
    • Η εξαγωγή συμπερασμάτων τύπου υπό όρους είναι πλέον δυνατή μεταβιβάζοντας ένα όρισμα σε μια μέθοδο. Για παράδειγμα, για το Base.ifelse(isa(x, Int), x, 0) επιστρέφει ::Int ακόμα κι αν ο τύπος του x είναι άγνωστος.
    • Το SROA (Scalar Replacement of Aggregates) έχει βελτιωθεί: εξαλείφει τις κλήσεις getfield με μόνιμα καθολικά πεδία, εξαλείφει τις μεταβλητές δομές με μη αρχικοποιημένα πεδία, βελτιώνει την απόδοση και το χειρισμό των ένθετων κλήσεων getfield.
    • Το συμπέρασμα τύπου παρακολουθεί διάφορα αποτελέσματα—παρενέργειες και μη πτώση. Λαμβάνεται υπόψη η συνεχής διάδοση, η οποία βελτιώνει σημαντικά την απόδοση στο χρόνο μεταγλώττισης. Σε ορισμένες περιπτώσεις, για παράδειγμα, οι κλήσεις σε λειτουργίες που δεν μπορούν να ενσωματωθούν αλλά δεν επηρεάζουν το αποτέλεσμα θα απορριφθούν κατά το χρόνο εκτέλεσης. Οι κανόνες για εφέ μπορούν να αντικατασταθούν με μη αυτόματο τρόπο χρησιμοποιώντας τη μακροεντολή Base.@assume_effects.
    • Η προμεταγλώττιση (με ρητές οδηγίες προμεταγλώττισης ή καθορισμένους φόρτους εργασίας) αποθηκεύει πλέον περισσότερο κώδικα που ορίζεται από τον τύπο, με αποτέλεσμα την ταχύτερη εκτέλεση για πρώτη φορά. Τυχόν νέοι συνδυασμοί μεθόδων/τύπων που χρειάζονται το πακέτο σας, ανεξάρτητα από το πού ορίστηκαν αυτές οι μέθοδοι, μπορούν τώρα να αποθηκευτούν προσωρινά στο αρχείο προμεταγλώττισης εάν καλούνται από μια μέθοδο που ανήκει στο πακέτο σας.
  • Αλλαγές στις Επιλογές Γραμμής Εντολών
    • Η προεπιλεγμένη συμπεριφορά για την παρακολούθηση των δηλώσεων @inbounds είναι πλέον η αυτόματη επιλογή στο "--check-bounds=yes|no|auto".
    • Νέα επιλογή "--strip-metadata" για την κατάργηση συμβολοσειρών εγγράφων, πληροφοριών τοποθεσίας προέλευσης και ονομάτων τοπικών μεταβλητών κατά τη δημιουργία μιας εικόνας συστήματος.
    • Νέα επιλογή "--strip-ir" για να επιτρέψει στον μεταγλωττιστή να αφαιρέσει την αναπαράσταση του ενδιάμεσου πηγαίου κώδικα κατά τη δημιουργία της εικόνας του συστήματος. Η εικόνα που προκύπτει θα λειτουργήσει μόνο εάν χρησιμοποιείται "--compile=all" ή εάν όλος ο απαιτούμενος κώδικας είναι προμεταγλωττισμένος.
    • Εάν ο χαρακτήρας "-" έχει καθοριστεί αντί για το όνομα του αρχείου, τότε ο εκτελέσιμος κώδικας διαβάζεται από την τυπική ροή εισόδου.
  • Αλλαγές υποστήριξης πολλαπλών νημάτων
    • Το Threads.@threads χρησιμοποιεί από προεπιλογή τη νέα επιλογή προγραμματισμού :dynamic, η οποία διαφέρει από την προηγούμενη λειτουργία στο ότι οι επαναλήψεις θα προγραμματίζονται δυναμικά στα διαθέσιμα νήματα εργασίας αντί να εκχωρούνται σε κάθε νήμα. Αυτή η λειτουργία επιτρέπει την καλύτερη κατανομή των ένθετων βρόχων με @spawn και @threads.
  • Νέες λειτουργίες βιβλιοθήκης
    • everysplit(str) για εκτέλεση split(str) πολλές φορές.
    • allequal(itr) για να ελέγξετε εάν όλα τα στοιχεία σε έναν επαναλήπτη είναι ίσα.
    • Το hardlink(src, dst) μπορεί να χρησιμοποιηθεί για τη δημιουργία σκληρών συνδέσμων.
    • setcpuaffinity(cmd, cpus) για να ορίσετε τη συγγένεια του πυρήνα του επεξεργαστή με τις διεργασίες που ξεκινούν.
    • diskstat(path=pwd()) για λήψη στατιστικών στοιχείων δίσκου.
    • Νέα μακροεντολή @showtime για εμφάνιση τόσο της γραμμής που αξιολογείται όσο και της αναφοράς @time.
    • Η μακροεντολή LazyString και lazy"str" ​​έχουν προστεθεί για να υποστηρίξουν την τεμπέλικη κατασκευή μηνυμάτων σφάλματος σε διαδρομές σφάλματος.
    • Διορθώθηκε ένα πρόβλημα ταυτόχρονης χρήσης στο Dict και σε άλλα παράγωγα αντικείμενα, όπως keys(::Dict), values(::Dict) και Set. Οι μέθοδοι επανάληψης μπορούν πλέον να καλούνται σε λεξικό ή σετ, εφόσον δεν υπάρχουν κλήσεις που να τροποποιούν το λεξικό ή το σύνολο.
    • Οι @time και @timev έχουν πλέον μια προαιρετική περιγραφή, που σας επιτρέπει να σχολιάζετε την πηγή των αναφορών χρόνου, για παράδειγμα. @time "Evaluating foo" foo().
    • Το εύρος παίρνει είτε το stop είτε το μήκος ως το μόνο όρισμα λέξης-κλειδιού.
    • Το precision και το setprecision δέχονται πλέον τη βάση ως λέξη-κλειδί
    • Τα αντικείμενα υποδοχής TCP παρέχουν τώρα μια μέθοδο στενής εγγραφής και υποστηρίζουν τη χρήση της λειτουργίας μισάνοιχτου.
    • Το extrema δέχεται τώρα ένα όρισμα init.
    • Το Iterators.countfrom δέχεται πλέον οποιονδήποτε τύπο ορίζει μια μέθοδο +.
    • Το @time now κατανέμει το % του χρόνου που δαπανάται για την εκ νέου μεταγλώττιση μεθόδων με αλλαγμένους τύπους.
  • Τυπικές Αλλαγές Βιβλιοθήκης
    • Κλειδιά με τιμή Τίποτα δεν αφαιρείται πλέον από το περιβάλλον στο addenv.
    • Το Iterators.reverse (και επομένως τελευταίο) υποστηρίζει κάθε γραμμή.
    • Η συνάρτηση μήκους για εύρη ορισμένων τύπων δεν ελέγχει πλέον για υπερχείλιση ακεραίων. Μια νέα συνάρτηση, checked_length, είναι διαθέσιμη· περιέχει λογική ελέγχου μεταφοράς bit. Εάν είναι απαραίτητο, χρησιμοποιήστε το SaferIntegers.jl για να δημιουργήσετε τον τύπο περιοχής.
    • Ο επαναλήπτης Iterators.Reverse υλοποιεί κάθε αντιστροφή ευρετηρίου εάν είναι δυνατόν.
  • Διαχειριστής πακέτων
    • Νέοι δείκτες ⌃ και ⌅ δίπλα σε πακέτα σε κατάσταση "pkg>" για τα οποία είναι διαθέσιμες νέες εκδόσεις. Το ⌅ υποδεικνύει ότι δεν είναι δυνατή η εγκατάσταση νέων εκδόσεων.
    • New outdated::Bool όρισμα στο Pkg.status (--outdated ή -o σε λειτουργία REPL) για εμφάνιση πληροφοριών σχετικά με πακέτα από προηγούμενες εκδόσεις.
    • Νέο όρισμα compat::Bool στο Pkg.status (--compat ή -c σε λειτουργία REPL) για εμφάνιση τυχόν καταχωρήσεων [compat] στο Project.toml.
    • Νέα λειτουργία "pkg>compat" (και Pkg.compat) για τη ρύθμιση καταχωρίσεων συμβατότητας έργου. Παρέχει ένα διαδραστικό πρόγραμμα επεξεργασίας μέσω "pkg>compat" ή άμεσου ελέγχου εγγραφής μέσω του "pkg>Foo 0.4,0.5", το οποίο μπορεί να φορτώσει τις τρέχουσες εγγραφές μέσω της ολοκλήρωσης καρτελών. Δηλαδή, το "pkg> compat Fo" ενημερώνεται αυτόματα σε "pkg> Foo 0.4,0.5" ώστε να μπορεί να επεξεργαστεί μια υπάρχουσα καταχώρηση.
    • Το Pkg επιχειρεί τώρα να πραγματοποιήσει λήψη πακέτων από διακομιστή πακέτων μόνο εάν ο διακομιστής παρακολουθεί το μητρώο που περιέχει το πακέτο.
    • Το Pkg.instantiate θα εκδίδει τώρα μια προειδοποίηση όταν το Project.toml δεν συγχρονίζεται με το Manifest.toml. Αυτό το κάνει με βάση έναν κατακερματισμό των εγγραφών deps και compat του έργου (άλλα πεδία αγνοούνται) στο μανιφέστο κατά την επίλυσή του, έτσι ώστε οποιαδήποτε αλλαγή στις εγγραφές Deps ή compat του Project.toml να μπορεί να εντοπιστεί χωρίς εκ νέου επίλυση.
    • Εάν το "pkg>add" δεν μπορεί να βρει ένα πακέτο με το συγκεκριμένο όνομα, θα προτείνει τώρα πακέτα με παρόμοια ονόματα που μπορούν να προστεθούν.
    • Η έκδοση του julia που είναι αποθηκευμένη στο μανιφέστο δεν περιλαμβάνει πλέον τον αριθμό έκδοσης, που σημαίνει ότι η κύρια έκδοση θα γράφεται πλέον ως 1.9.0-DEV.
    • Η δοκιμαστική ματαίωση "pkg>" θα ανιχνεύεται πλέον με μεγαλύτερη συνέπεια και θα επιστραφεί σωστά στο REPL.
  • InteractiveUtils
    • Νέα μακροεντολή @time_imports για αναφορά του χρόνου εισαγωγής πακέτων και των εξαρτήσεων τους, επισημαίνοντας τον χρόνο μεταγλώττισης και εκ νέου μεταγλώττισης ως ποσοστό των εισαγωγών.
  • Γραμμική άλγεβρα
    • Η υπομονάδα BLAS υποστηρίζει τώρα λειτουργίες BLAS spr! επιπέδου 2.
    • Η τυπική βιβλιοθήκη LinearAlgebra.jl είναι πλέον εντελώς ανεξάρτητη από το SparseArrays.jl, τόσο από άποψη πηγαίου κώδικα όσο και από άποψη δοκιμής μονάδας. Κατά συνέπεια, οι αραιοί πίνακες δεν επιστρέφονται πλέον (σιωπηρά) με μεθόδους από τη LinearAlgebra που εφαρμόζονται σε αντικείμενα Base ή LinearAlgebra. Συγκεκριμένα, αυτό οδηγεί στις ακόλουθες αλλαγές:
      • Συνδέσεις που χρησιμοποιούν ειδικούς "αραιούς" πίνακες (π.χ. διαγώνιος) τώρα επιστρέφουν πυκνούς πίνακες. Κατά συνέπεια, τα πεδία D1 και D2 των αντικειμένων SVD που δημιουργούνται από κλήσεις getproperty είναι πλέον πυκνοί πίνακες.
      • Η μέθοδος παρόμοια(::SpecialSparseMatrix, ::Type, ::Dims) επιστρέφει έναν πυκνό μηδενικό πίνακα. Κατά συνέπεια, τα προϊόντα δύο, τριών και συμμετρικών τριδιαγωνικών πινάκων μεταξύ τους οδηγούν στη δημιουργία ενός πυκνού πίνακα. Επιπλέον, η κατασκευή παρόμοιων πινάκων με τρία ορίσματα από ειδικούς "αραιούς" πίνακες από (μη στατικούς) πίνακες τώρα αποτυγχάνει λόγω του "zero(::Type{Matrix{T}})".
  • Εκτύπωση
    • Το %s και το %c χρησιμοποιούν τώρα το όρισμα textwidth για να μορφοποιήσουν το πλάτος.
  • Προφίλ ⬇️
    • Το προφίλ φόρτου CPU καταγράφει πλέον μεταδεδομένα, συμπεριλαμβανομένων νημάτων και εργασιών. Το Profile.print() έχει ένα νέο όρισμα groupby που σας επιτρέπει να ομαδοποιήσετε νήματα, εργασίες ή δευτερεύοντα νήματα/εργασίες, εργασίες/νήματα και ορίσματα νημάτων και εργασιών για να παρέχετε φιλτράρισμα. Επιπλέον, το ποσοστό χρήσης αναφέρεται τώρα είτε ως σύνολο είτε ανά νήμα, ανάλογα με το αν το νήμα είναι αδρανές ή όχι σε κάθε δείγμα. Το Profile.fetch() περιλαμβάνει τα νέα μεταδεδομένα από προεπιλογή. Για συμβατότητα προς τα πίσω με εξωτερικούς καταναλωτές δεδομένων δημιουργίας προφίλ, μπορεί να εξαιρεθεί περνώντας το include_meta=false.
    • Η νέα ενότητα Profile.Allocs σάς επιτρέπει να δημιουργείτε προφίλ εκχωρήσεων μνήμης. Καταγράφεται ένα ίχνος στοίβας του τύπου και του μεγέθους κάθε εκχώρησης μνήμης και το όρισμα sample_rate επιτρέπει την παράλειψη ενός διαμορφώσιμου αριθμού εκχωρήσεων, μειώνοντας τα γενικά έξοδα απόδοσης.
    • Το προφίλ CPU σταθερής διάρκειας μπορεί πλέον να εκτελεστεί από τον χρήστη ενώ εκτελούνται εργασίες χωρίς να φορτωθεί πρώτα το προφίλ και η αναφορά θα εμφανίζεται κατά την εκτέλεση. Σε MacOS και FreeBSD, πατήστε ctrl-t ή καλέστε το SIGINFO. Για άλλες πλατφόρμες, ενεργοποιήστε το SIGUSR1, π.χ. % kill -USR1 $julia_pid. Αυτό δεν είναι διαθέσιμο στα Windows.
  • ΑΠΑΝΤΗΣΗ
    • Το RadioMenu υποστηρίζει πλέον πρόσθετες συντομεύσεις πληκτρολογίου για άμεση επιλογή επιλογών.
    • Η ακολουθία "?(x, y" που ακολουθείται από το πάτημα του TAB εμφανίζει όλες τις μεθόδους που μπορούν να κληθούν με ορίσματα x, y, .... (Ένα κενό πριν σας εμποδίζει να εισέλθετε στη λειτουργία βοήθειας.) "MyModule.?(x, y "περιορίζει την αναζήτηση στο "MyModule". Πατώντας το TAB απαιτείται τουλάχιστον ένα όρισμα να είναι πιο συγκεκριμένου τύπου από το Any. Ή χρησιμοποιήστε το SHIFT-TAB αντί για το TAB για να επιτρέψετε τυχόν συμβατές μεθόδους.
    • Η νέα καθολική μεταβλητή err σάς επιτρέπει να λαμβάνετε την πιο πρόσφατη εξαίρεση, παρόμοια με τη συμπεριφορά των ans με την τελευταία απόκριση. Η εισαγωγή err εκτυπώνει ξανά τις πληροφορίες εξαίρεσης.
  • SparseArrays
    • Μετακίνησε τον κώδικα SparseArrays από το αποθετήριο Julia στον εξωτερικό χώρο αποθήκευσης SparseArrays.jl.
    • Οι νέες συναρτήσεις συνένωσης sparse_hcat, sparse_vcat και sparse_hvcat επιστρέφουν έναν τύπο SparseMatrixCSC ανεξάρτητα από τους τύπους των ορισμάτων εισόδου. Αυτό κατέστη απαραίτητο για την ενοποίηση του μηχανισμού για τη συγκόλληση πινάκων μετά τον διαχωρισμό του κώδικα LinearAlgebra.jl και SparseArrays.jl.
  • Ξύλευση
    • Τα τυπικά επίπεδα καταγραφής BelowMinLevel, Debug, Info, Warn, Error και AboveMaxLevel εξάγονται τώρα από την τυπική βιβλιοθήκη Logging.
  • Unicode
    • Προστέθηκε η συνάρτηση isequal_normalized για έλεγχο ισοδυναμίας Unicode χωρίς ρητή κατασκευή κανονικοποιημένων συμβολοσειρών.
    • Η συνάρτηση Unicode.normalize δέχεται τώρα τη λέξη-κλειδί μετασχηματισμού γραφήματος, η οποία μπορεί να χρησιμοποιηθεί για την παροχή προσαρμοσμένων αντιστοιχίσεων χαρακτήρων και η συνάρτηση Unicode.julia_chartransform παρέχεται επίσης για την αναπαραγωγή της αντιστοίχισης που χρησιμοποιείται όταν ο αναλυτής Julia κανονικοποιεί τα αναγνωριστικά.
  • Δοκιμή
    • Το "@test_throws "some message" triggers_error()" μπορεί τώρα να χρησιμοποιηθεί για να ελέγξει εάν το εμφανιζόμενο κείμενο σφάλματος περιέχει ένα σφάλμα "κάποιο μήνυμα", ανεξάρτητα από τον συγκεκριμένο τύπο εξαίρεσης. Υποστηρίζονται επίσης κανονικές εκφράσεις, λίστες συμβολοσειρών και συναρτήσεις αντιστοίχισης.
    • Το @testset foo() μπορεί τώρα να χρησιμοποιηθεί για τη δημιουργία ενός συνόλου δοκιμής από μια δεδομένη συνάρτηση. Το όνομα της δοκιμαστικής περίπτωσης είναι το όνομα της συνάρτησης που καλείται. Η συνάρτηση που καλείται μπορεί να περιέχει @test και άλλους ορισμούς @testset, συμπεριλαμβανομένων των κλήσεων προς άλλες συναρτήσεις, ενώ καταγράφονται όλα τα ενδιάμεσα αποτελέσματα δοκιμών.
    • Το TestLogger και το LogRecord εξάγονται τώρα από την τυπική βιβλιοθήκη δοκιμής.
  • Διανέμονται
    • Το SSHManager υποστηρίζει τώρα νήματα εργαζομένων με περιτύλιγμα csh/tcsh μέσω της μεθόδου addprocs() και της παραμέτρου shell=:csh.
  • Άλλες αλλαγές
    • Το GC.enable_logging(true) μπορεί να χρησιμοποιηθεί για την καταγραφή κάθε λειτουργίας συλλογής σκουπιδιών με τον χρόνο και την ποσότητα της μνήμης που συλλέγεται.

Πηγή: opennet.ru

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