Προγραμματισμός

Εξερεύνηση του χρόνου εκτέλεσης της δυναμικής γλώσσας στο .Net

Οι στατικά δακτυλογραφημένες γλώσσες είναι εκείνες στις οποίες θα πρέπει να καθορίσετε τον τύπο ενός αντικειμένου τη στιγμή που το ορίζετε. Παραδείγματα στατικά δακτυλογραφημένων γλωσσών περιλαμβάνουν C #, VB και C ++. Αντίθετα, σε δυναμικά δακτυλογραφημένες γλώσσες, ο τύπος ενός αντικειμένου καθορίζεται κατά το χρόνο εκτέλεσης - μόνο τη στιγμή που μια τιμή αντιστοιχεί στον τύπο. Python, Ruby και JavaScript είναι παραδείγματα δυναμικά δακτυλογραφημένων γλωσσών.

Το DLR (Dynamic Language Runtime) λειτουργεί πάνω από το CLR (Common Language Runtime) και προσθέτει δυναμισμό στο διαχειριζόμενο περιβάλλον του .Net - μπορείτε να το χρησιμοποιήσετε για να εφαρμόσετε δυναμικές δυνατότητες στην εφαρμογή σας Στην ουσία, το DLR επιτρέπει τη διαλειτουργικότητα μεταξύ των στατικά δακτυλογραφημένων και των δυναμικά δακτυλογραφημένων γλωσσών στο πλαίσιο του CLR. Μπορείτε να χρησιμοποιήσετε το DLR για κοινή χρήση βιβλιοθηκών και αντικειμένων με δυναμικές γλώσσες. Σε αυτό το άρθρο θα παρουσιάσω μια επισκόπηση του περιβάλλοντος δυναμικής εκτέλεσης γλώσσας στο Microsoft .Net.

Μπορείτε να λάβετε μια έκδοση ανοιχτού κώδικα του DLR από το Codeplex.

Τι είναι το DLR;

Το DLR είναι αποτέλεσμα της προσπάθειας της Microsoft να εκτελεί υπηρεσίες πάνω από το CLR και να παρέχει διαλειτουργικότητα μεταξύ στατικών και δυναμικά δακτυλογραφημένων γλωσσών. Η υποστήριξη για το περιβάλλον Dynamic Language Runtime διευκολύνεται από το System.Dynamic namespace. Το MSDN δηλώνει: "Ο δυναμικός χρόνος εκτέλεσης γλώσσας (DLR) είναι ένα περιβάλλον χρόνου εκτέλεσης που προσθέτει ένα σύνολο υπηρεσιών για δυναμικές γλώσσες στον κοινό χρόνο εκτέλεσης γλώσσας (CLR). Το DLR διευκολύνει την ανάπτυξη δυναμικών γλωσσών για εκτέλεση στο .Net Framework και να προσθέσετε δυναμικές δυνατότητες σε γλώσσες με στατική πληκτρολόγηση. "

Πώς είναι χρήσιμο;

Οι υπηρεσίες που παρέχονται από το DLR περιλαμβάνουν υποστήριξη για ένα δυναμικό σύστημα τύπου, ένα τυπικό μοντέλο φιλοξενίας καθώς και δυναμική δημιουργία κώδικα και αποστολή. Με μια γρήγορη ματιά, τα οφέλη που παρέχει το DLR περιλαμβάνουν:

  1. Παρέχει υποστήριξη για δυναμικές λειτουργίες σε στατικά δακτυλογραφημένες γλώσσες. Με το DLR στη θέση του, μπορείτε να δημιουργήσετε δυναμικά δακτυλογραφημένα αντικείμενα και να τα χρησιμοποιήσετε μαζί με τα στατικά δακτυλογραφημένα αντικείμενα στην εφαρμογή σας.
  2. Επιτρέπει την απρόσκοπτη μεταφορά δυναμικών γλωσσών στο .Net Framework. Το DLR σάς επιτρέπει να μεταφέρετε εύκολα δυναμικές γλώσσες στο .Net Framework. Για να αξιοποιήσετε τις δυνατότητες DLR, το μόνο που χρειάζεται να έχετε είναι η δυναμική γλώσσα σας είναι η δυνατότητα παραγωγής δέντρων έκφρασης και βοηθητικών ρουτίνων χρόνου εκτέλεσης.
  3. Διευκολύνει την κοινή χρήση βιβλιοθηκών και αντικειμένων. Το DLR σάς δίνει τη δυνατότητα να δημιουργήσετε αντικείμενα και βιβλιοθήκες σε μία γλώσσα για πρόσβαση από άλλη γλώσσα.
  4. Παρέχει υποστήριξη για αποστολή και επίκληση δυναμικής μεθόδου. Το DLR παρέχει υποστήριξη για επίκληση και αποστολή δυναμικής μεθόδου χρησιμοποιώντας προηγμένη πολυμορφική προσωρινή αποθήκευση.

Το υποσύστημα Δυναμικής εκτέλεσης γλώσσας

Το υποσύστημα DLR αποτελείται βασικά από τα τρία επίπεδα. Αυτά περιλαμβάνουν τα ακόλουθα:

  1. Δέντρα έκφρασης - το DLR χρησιμοποιεί δέντρα έκφρασης για να αντιπροσωπεύει τη σημασιολογία της γλώσσας.
  2. Κρυφή μνήμη ιστότοπου κλήσεων - οι κλήσεις μεθόδου που χρησιμοποιούν δυναμικά αντικείμενα αποθηκεύονται στην μνήμη στην κρυφή μνήμη, έτσι ώστε το DLR να μπορεί να χρησιμοποιεί το ιστορικό προσωρινής μνήμης για επόμενες κλήσεις στην ίδια μέθοδο για ταχύτερη αποστολή.
  3. Δυναμική διαλειτουργικότητα αντικειμένου - το DLR επιτρέπει τη διαλειτουργικότητα μεταξύ στατικών και δυναμικά δακτυλογραφημένων γλωσσών. Το DLR περιλαμβάνει μια συλλογή τύπων - τάξεων και διεπαφών στο System.Dynamic namespace. Μπορείτε να αξιοποιήσετε τη διεπαφή IDynamicMetaObjectProvider και τις κλάσεις DynamicMetaObject, DynamicObject και ExpandoObject για να δημιουργήσετε δυναμικά πλαίσια.

Γλωσσικοί σύνδεσμοι

Οι σύνδεσμοι γλώσσας στο DLR το βοηθούν να μιλήσει σε άλλες γλώσσες. Έτσι, για κάθε δυναμική γλώσσα θα έχετε συνήθως ένα συνδετικό που μπορεί να αλληλεπιδράσει με αυτήν. Για παράδειγμα, τα ακόλουθα είναι τα κοινώς χρησιμοποιούμενα συνδετικά στο DLR.

  • .Net Binder - χρησιμοποιείται για συνομιλία με αντικείμενα .Net
  • JavaScript Binder - χρησιμοποιείται για συνομιλία με αντικείμενα που έχουν δημιουργηθεί σε αντικείμενα JavaScript
  • IronRuby Binder - επιτρέπει στο DLR να μιλάει με αντικείμενα IronRuby
  • IronPython Binder - βοηθά το DLR να μιλήσει με αντικείμενα IronPython
  • COM Binder - αυτό βοηθά το DLR να μιλάει σε αντικείμενα COM

Η "δυναμική" λέξη-κλειδί

Μπορείτε να εκμεταλλευτείτε τη δυναμική λέξη-κλειδί για να αποκτήσετε πρόσβαση σε ένα δυναμικό αντικείμενο. Η δυναμική λέξη-κλειδί εισήχθη για πρώτη φορά στο .Net Framework 4. Επιτρέπει στην εφαρμογή σας να λειτουργεί με δυναμικούς τύπους. Έτσι, μπορείτε να χρησιμοποιήσετε τη δυναμική λέξη-κλειδί για να αποκτήσετε πρόσβαση σε ένα αντικείμενο COM ή σε ένα αντικείμενο που δημιουργήθηκε σε δυναμικές γλώσσες όπως, Python, Ruby ή JavaScript.

Ακολουθεί ένα απόσπασμα κώδικα που δείχνει πώς μπορεί να χρησιμοποιηθεί η δυναμική λέξη-κλειδί.

χρησιμοποιώντας το System.Dynamic;

dynamic excelObj = System.Runtime.InteropServices.Marshal.GetActiveObject ("Excel.Application");

Δεν χρειάζεται πλέον να χρησιμοποιούμε αντανάκλαση για πρόσβαση σε αντικείμενα COM - ο κώδικάς σας είναι πολύ καθαρός χωρίς τον κωδικό αντανάκλασης που διαφορετικά θα έπρεπε να γράψετε χωρίς τη δυναμική λέξη-κλειδί.

Προτεινόμενες αναγνώσεις

//msdn.microsoft.com/en-us/library/dd233052(v=vs.110).aspx

$config[zx-auto] not found$config[zx-overlay] not found