Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων

Μπορεί, Έκλειψη εδώ και καιρό δεν χρειάζεται ιδιαίτερη εισαγωγή. Πολλοί άνθρωποι είναι εξοικειωμένοι με το Eclipse χάρη στα εργαλεία ανάπτυξης Eclipse Java (JDT). Είναι αυτό το δημοφιλές Java IDE ανοιχτού κώδικα που οι περισσότεροι προγραμματιστές συσχετίζουν με τη λέξη "Eclipse". Ωστόσο, το Eclipse είναι ταυτόχρονα μια επεκτάσιμη πλατφόρμα για την ενσωμάτωση εργαλείων ανάπτυξης (Eclipse Platform) και ένας αριθμός IDE που έχουν δημιουργηθεί στη βάση του, συμπεριλαμβανομένου του JDT. Το Eclipse είναι τόσο το Eclipse Project, το έργο ανώτατου επιπέδου που συντονίζει την ανάπτυξη της πλατφόρμας Eclipse και του JDT, όσο και το Eclipse SDK, το παραδοτέο αποτέλεσμα αυτής της ανάπτυξης. Τέλος, το Eclipse είναι ένα Ίδρυμα ανοιχτού κώδικα με μια τεράστια κοινότητα έργων, τα οποία δεν είναι όλα γραμμένα σε Java ή σχετίζονται με εργαλεία ανάπτυξης (για παράδειγμα, έργα Eclipse IoT и Eclipse Science). Ο κόσμος του Eclipse είναι πολύ διαφορετικός.

Σε αυτό το άρθρο, το οποίο είναι επισκόπησης στη φύση, θα προσπαθήσουμε να δούμε μερικά από τα βασικά της αρχιτεκτονικής Eclipse ως πλατφόρμα για την κατασκευή ολοκληρωμένων εργαλείων ανάπτυξης και να δώσουμε μια αρχική ιδέα των στοιχείων Eclipse που αποτελούν τη βάση της τεχνολογίας πλατφόρμα για το "νέο Configurator" 1C: Enterprise. 1C:Εργαλεία ανάπτυξης επιχειρήσεων. Φυσικά, μια τέτοια αναθεώρηση θα είναι αναπόφευκτα σε μεγάλο βαθμό επιφανειακή και μάλλον περιορισμένη, μεταξύ άλλων επειδή δεν εστιάζουμε μόνο στους προγραμματιστές του Eclipse ως το κοινό-στόχο. Ωστόσο, ελπίζουμε ότι ακόμη και οι έμπειροι προγραμματιστές του Eclipse θα μπορέσουν να βρουν ενδιαφέρουσες πληροφορίες στο άρθρο. Για παράδειγμα, θα μιλήσουμε για ένα από τα «μυστικά του Eclipse», ένα σχετικά νέο και ελάχιστα γνωστό έργο Eclipse Handly, η οποία ιδρύθηκε και υποστηρίχθηκε από την 1C.
Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων

Εισαγωγή στην Αρχιτεκτονική Eclipse

Ας δούμε πρώτα μερικές γενικές πτυχές της αρχιτεκτονικής Eclipse χρησιμοποιώντας το παράδειγμα Εργαλεία ανάπτυξης Eclipse Java (JDT). Η επιλογή του JDT ως παράδειγμα δεν είναι τυχαία. Αυτό είναι το πρώτο ολοκληρωμένο περιβάλλον ανάπτυξης που εμφανίζεται στο Eclipse. Άλλα έργα *DT Eclipse, όπως το Eclipse C/C++ Development Tooling (CDT), δημιουργήθηκαν αργότερα και δανείζονται τόσο βασικές αρχιτεκτονικές αρχές όσο και μεμονωμένα τμήματα πηγαίου κώδικα από το JDT. Οι βασικές αρχές της αρχιτεκτονικής που ορίζονται στο JDT είναι σχετικές μέχρι σήμερα για σχεδόν οποιοδήποτε IDE που έχει δημιουργηθεί πάνω από την πλατφόρμα Eclipse, συμπεριλαμβανομένων των Εργαλείων Ανάπτυξης 1C: Enterprise.

Πρώτα απ 'όλα, θα πρέπει να σημειωθεί ότι το Eclipse χαρακτηρίζεται από ένα αρκετά σαφές αρχιτεκτονικό layering, με τον διαχωρισμό της λειτουργικότητας ανεξάρτητης γλώσσας από τη λειτουργικότητα που έχει σχεδιαστεί για την υποστήριξη συγκεκριμένων γλωσσών προγραμματισμού και τον διαχωρισμό των ανεξάρτητων από το UI στοιχείων "πυρήνα" από στοιχεία που σχετίζονται με υποστηρικτικό περιβάλλον χρήστη.

Έτσι, η πλατφόρμα Eclipse ορίζει μια κοινή, ανεξάρτητη από τη γλώσσα υποδομή και τα εργαλεία ανάπτυξης Java προσθέτουν ένα Java IDE με πλήρη χαρακτηριστικά στο Eclipse. Τόσο η πλατφόρμα Eclipse όσο και το JDT αποτελούνται από πολλά στοιχεία, καθένα από τα οποία ανήκει είτε σε έναν "πυρήνα" ανεξάρτητο από το περιβάλλον χρήστη ή σε ένα επίπεδο διεπαφής χρήστη (Εικόνα 1).

Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων
Ρύζι. 1. Eclipse Platform και JDT

Ας παραθέσουμε τα κύρια στοιχεία της πλατφόρμας Eclipse:

  • Διάρκεια — Καθορίζει την υποδομή των πρόσθετων. Το Eclipse χαρακτηρίζεται από μια αρθρωτή αρχιτεκτονική. Ουσιαστικά, το Eclipse είναι μια συλλογή από «σημεία επέκτασης» και «επεκτάσεις».
  • Χώρος εργασίας — Διαχειρίζεται ένα ή περισσότερα έργα. Ένα έργο αποτελείται από φακέλους και αρχεία που αντιστοιχίζονται απευθείας στο σύστημα αρχείων.
  • Standard Widget Toolkit (SWT) - Παρέχει βασικά στοιχεία διεπαφής χρήστη ενσωματωμένα στο λειτουργικό σύστημα.
  • JFace — Παρέχει έναν αριθμό πλαισίων διεπαφής χρήστη που έχουν δημιουργηθεί πάνω από το SWT.
  • Πάγκος εργασίας — Καθορίζει το παράδειγμα διεπαφής χρήστη Eclipse: επεξεργαστές, απόψεις, προοπτικές.

Πρέπει να πούμε ότι η πλατφόρμα Eclipse παρέχει επίσης πολλά άλλα χρήσιμα στοιχεία για τη δημιουργία ολοκληρωμένων εργαλείων ανάπτυξης, συμπεριλαμβανομένων των Debug, Compare, Search και Team. Ιδιαίτερη αναφορά πρέπει να γίνει στο JFace Text - τη βάση για τη δημιουργία «έξυπνων συντακτών» του πηγαίου κώδικα. Δυστυχώς, ακόμη και μια πρόχειρη εξέταση αυτών των στοιχείων, καθώς και των στοιχείων του επιπέδου διεπαφής χρήστη, δεν είναι δυνατή εντός του πεδίου εφαρμογής αυτού του άρθρου, επομένως στο υπόλοιπο αυτής της ενότητας θα περιοριστούμε σε μια επισκόπηση των κύριων στοιχείων "πυρήνα" του την πλατφόρμα Eclipse και το JDT.

Core Runtime

Η υποδομή του πρόσθετου Eclipse βασίζεται σε OSGi και παρέχονται από το έργο Eclipse Equinox. Κάθε πρόσθετο Eclipse είναι ένα πακέτο OSGi. Η προδιαγραφή OSGi ορίζει, ειδικότερα, μηχανισμούς για την έκδοση εκδόσεων και την επίλυση εξαρτήσεων. Εκτός από αυτούς τους τυπικούς μηχανισμούς, η Equinox εισάγει την έννοια σημεία επέκτασης. Κάθε πρόσθετο μπορεί να ορίσει τα δικά του σημεία επέκτασης και επίσης να εισάγει πρόσθετες λειτουργίες («επεκτάσεις») στο σύστημα χρησιμοποιώντας σημεία επέκτασης που ορίζονται από τα ίδια ή άλλα πρόσθετα. Οποιαδήποτε λεπτομερής περιγραφή των μηχανισμών OSGi και Equinox ξεφεύγει από το πεδίο εφαρμογής αυτού του άρθρου. Ας σημειώσουμε μόνο ότι η σπονδυλοποίηση στο Eclipse είναι πλήρης (κάθε υποσύστημα, συμπεριλαμβανομένου του χρόνου εκτέλεσης, αποτελείται από ένα ή περισσότερα πρόσθετα) και σχεδόν τα πάντα στο Eclipse είναι μια επέκταση. Επιπλέον, αυτές οι αρχές ήταν ενσωματωμένες στην αρχιτεκτονική Eclipse πολύ πριν από την εισαγωγή του OSGi (εκείνη την εποχή χρησιμοποιούσαν τη δική τους τεχνολογία, πολύ παρόμοια με το OSGi).

Βασικός Χώρος Εργασίας

Σχεδόν κάθε ολοκληρωμένο περιβάλλον ανάπτυξης που έχει δημιουργηθεί πάνω από την πλατφόρμα Eclipse λειτουργεί με το χώρο εργασίας Eclipse. Είναι ο χώρος εργασίας που συνήθως περιέχει τον πηγαίο κώδικα της εφαρμογής που έχει αναπτυχθεί στο IDE. Ο χώρος εργασίας αντιστοιχίζεται απευθείας στο σύστημα αρχείων και αποτελείται από έργα που περιέχουν φακέλους και αρχεία. Αυτά τα έργα, οι φάκελοι και τα αρχεία ονομάζονται πόροι χώρο εργασίας. Η υλοποίηση του χώρου εργασίας στο Eclipse χρησιμεύει ως προσωρινή μνήμη σε σχέση με το σύστημα αρχείων, γεγονός που καθιστά δυνατή τη σημαντική επιτάχυνση της διέλευσης του δέντρου πόρων. Επιπλέον, ο χώρος εργασίας παρέχει μια σειρά από πρόσθετες υπηρεσίες, μεταξύ των οποίων μηχανισμός ειδοποίησης για αλλαγές πόρων и στοιχειώδεις κατασκευαστικές υποδομές.

Το στοιχείο Core Resources (προσθήκη org.eclipse.core.resources) είναι υπεύθυνο για την υποστήριξη του χώρου εργασίας και των πόρων του. Συγκεκριμένα, αυτό το στοιχείο παρέχει πρόσβαση μέσω προγραμματισμού στον χώρο εργασίας στη φόρμα μοντέλα πόρων. Για να δουλέψουν αποτελεσματικά με αυτό το μοντέλο, οι πελάτες χρειάζονται έναν απλό τρόπο για να παρουσιάσουν έναν σύνδεσμο προς έναν πόρο. Σε αυτήν την περίπτωση, θα ήταν επιθυμητό να αποκρύψετε το αντικείμενο που αποθηκεύει απευθείας την κατάσταση του πόρου στο μοντέλο από την πρόσβαση πελάτη. Διαφορετικά, στην περίπτωση, για παράδειγμα, διαγραφής ενός αρχείου, ο πελάτης θα μπορούσε να συνεχίσει να κρατά ένα αντικείμενο που δεν είναι πλέον στο μοντέλο, με τα προβλήματα που προκύπτουν. Το Eclipse λύνει αυτό το πρόβλημα χρησιμοποιώντας κάτι που ονομάζεται λαβή πόρος. Το Handle λειτουργεί ως κλειδί (γνωρίζει μόνο τη διαδρομή προς τον πόρο στον χώρο εργασίας) και ελέγχει πλήρως την πρόσβαση στο εσωτερικό αντικείμενο μοντέλου, το οποίο αποθηκεύει απευθείας πληροφορίες σχετικά με την κατάσταση του πόρου. Αυτό το σχέδιο είναι μια παραλλαγή του μοτίβου Λαβή/Σώμα.

Ρύζι. Το σχήμα 2 απεικονίζει το ιδίωμα Handle/Body όπως εφαρμόζεται στο μοντέλο πόρων. Η διεπαφή IResource αντιπροσωπεύει τη λαβή ενός πόρου και είναι ένα API, σε αντίθεση με την κλάση Resource, που υλοποιεί αυτήν τη διεπαφή, και την κλάση ResourceInfo, η οποία αντιπροσωπεύει το σώμα, που δεν είναι API. Τονίζουμε ότι η λαβή γνωρίζει μόνο τη διαδρομή προς τον πόρο σε σχέση με τη ρίζα του χώρου εργασίας και δεν περιέχει σύνδεσμο προς πληροφορίες πόρων. Τα αντικείμενα πληροφοριών πόρων σχηματίζουν ένα λεγόμενο «δέντρο στοιχείων». Αυτή η δομή δεδομένων υλοποιείται πλήρως στη μνήμη. Για να βρεθεί η παρουσία πληροφοριών πόρων που αντιστοιχεί σε μια λαβή, το δέντρο του στοιχείου διασχίζεται σύμφωνα με τη διαδρομή που είναι αποθηκευμένη σε αυτήν τη λαβή.

Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων
Ρύζι. 2. IRResource και ResourceInfo

Όπως θα δούμε αργότερα, ο βασικός σχεδιασμός του μοντέλου πόρων (θα μπορούσαμε να το ονομάσουμε βασισμένο σε λαβή) χρησιμοποιείται στο Eclipse και για άλλα μοντέλα. Προς το παρόν, ας απαριθμήσουμε μερικές από τις χαρακτηριστικές ιδιότητες αυτού του σχεδίου:

  • Η λαβή είναι ένα αντικείμενο αξίας. Τα αντικείμενα αξίας είναι αμετάβλητα αντικείμενα των οποίων η ισότητα δεν βασίζεται στην ταυτότητα. Τέτοια αντικείμενα μπορούν να χρησιμοποιηθούν με ασφάλεια ως κλειδί σε κατακερματισμένα δοχεία. Πολλαπλές περιπτώσεις χειρισμού μπορούν να αναφέρονται στον ίδιο πόρο. Για να τα συγκρίνετε, πρέπει να χρησιμοποιήσετε τη μέθοδο ίσον (Αντικείμενο).
  • Το Handle ορίζει τη συμπεριφορά ενός πόρου, αλλά δεν περιέχει πληροφορίες σχετικά με την κατάσταση του πόρου (τα μόνα δεδομένα που αποθηκεύει είναι το "κλειδί", η διαδρομή προς τον πόρο).
  • Το Handle μπορεί να αναφέρεται σε έναν πόρο που δεν υπάρχει (είτε έναν πόρο που δεν έχει ακόμη δημιουργηθεί είτε έναν πόρο που έχει ήδη διαγραφεί). Η ύπαρξη ενός πόρου μπορεί να ελεγχθεί χρησιμοποιώντας τη μέθοδο IResource.exists().
  • Ορισμένες λειτουργίες μπορούν να υλοποιηθούν με βάση μόνο τις πληροφορίες που είναι αποθηκευμένες στην ίδια τη λαβή (οι λεγόμενες λειτουργίες μόνο χειρισμού). Παραδείγματα είναι τα IResource.getParent(), getFullPath(), κ.λπ. Ο πόρος δεν χρειάζεται να υπάρχει για να πετύχει μια τέτοια λειτουργία. Λειτουργίες που απαιτούν να υπάρχει ένας πόρος για να πετύχουν ρίχνουν ένα CoreException εάν ο πόρος δεν υπάρχει.

Το Eclipse παρέχει έναν αποτελεσματικό μηχανισμό για την ειδοποίηση αλλαγών πόρων στο χώρο εργασίας (Εικόνα 3). Οι πόροι μπορούν να αλλάξουν είτε ως αποτέλεσμα ενεργειών που εκτελούνται στο ίδιο το Eclipse IDE είτε ως αποτέλεσμα συγχρονισμού με το σύστημα αρχείων. Και στις δύο περιπτώσεις, στους πελάτες που εγγράφονται σε ειδοποιήσεις παρέχονται λεπτομερείς πληροφορίες σχετικά με τις αλλαγές με τη μορφή «δέλτα πόρων». Ένα δέλτα περιγράφει αλλαγές μεταξύ δύο καταστάσεων ενός (υπο)δέντρου πόρου χώρου εργασίας και είναι το ίδιο ένα δέντρο, κάθε κόμβος του οποίου περιγράφει μια αλλαγή σε έναν πόρο και περιέχει μια λίστα δέλτα στο επόμενο επίπεδο που περιγράφουν αλλαγές σε θυγατρικούς πόρους.

Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων
Ρύζι. 3. IResourceChangeEvent και IResourceDelta

Ο μηχανισμός ειδοποίησης που βασίζεται σε δέλτα πόρων έχει τα ακόλουθα χαρακτηριστικά:

  • Μια μεμονωμένη αλλαγή και πολλές αλλαγές περιγράφονται χρησιμοποιώντας την ίδια δομή, αφού το δέλτα είναι χτισμένο χρησιμοποιώντας την αρχή της αναδρομικής σύνθεσης. Οι πελάτες συνδρομητών μπορούν να επεξεργαστούν ειδοποιήσεις αλλαγής πόρων χρησιμοποιώντας αναδρομική κάθοδο μέσω ενός δέντρου δέλτα.
  • Το δέλτα περιέχει πλήρεις πληροφορίες σχετικά με αλλαγές στον πόρο, συμπεριλαμβανομένης της μετακίνησής του ή/και των αλλαγών στους «δείκτες» που σχετίζονται με αυτόν (για παράδειγμα, τα σφάλματα μεταγλώττισης αντιπροσωπεύονται ως δείκτες).
  • Δεδομένου ότι οι αναφορές πόρων γίνονται μέσω της λαβής, η delta μπορεί φυσικά να αναφέρει έναν απομακρυσμένο πόρο.

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

JDT Core

Το μοντέλο πόρων χώρου εργασίας Eclipse είναι ένα θεμελιώδες μοντέλο αγνωστικοποίησης της γλώσσας. Το στοιχείο JDT Core (πρόσθετο org.eclipse.jdt.core) παρέχει ένα API για την πλοήγηση και την ανάλυση της δομής του χώρου εργασίας από την οπτική γωνία της Java, το λεγόμενο «μοντέλο Java» (Μοντέλο Java). Αυτό το API ορίζεται ως προς τα στοιχεία Java, σε αντίθεση με το API του υποκείμενου μοντέλου πόρων, το οποίο ορίζεται ως προς τους φακέλους και τα αρχεία. Οι κύριες διεπαφές του δέντρου στοιχείων Java φαίνονται στην Εικ. 4.

Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων
Ρύζι. 4. Java Model Elements

Το μοντέλο Java χρησιμοποιεί το ίδιο ιδίωμα χειρισμού/σώματος με το μοντέλο πόρων (Εικόνα 5). Το IJavaElement είναι η λαβή και το JavaElementInfo παίζει το ρόλο του σώματος. Η διεπαφή IJavaElement ορίζει ένα πρωτόκολλο κοινό για όλα τα στοιχεία Java. Ορισμένες από τις μεθόδους του είναι μόνο χειρισμού: getElementName(), getParent(), κ.λπ. Το αντικείμενο JavaElementInfo αποθηκεύει την κατάσταση του αντίστοιχου στοιχείου: τη δομή και τα χαρακτηριστικά του.

Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων
Ρύζι. 5. IJavaElement και JavaElementInfo

Το μοντέλο Java έχει κάποιες διαφορές στην υλοποίηση του βασικού σχεδιασμού λαβής/σώματος σε σύγκριση με το μοντέλο πόρων. Όπως σημειώθηκε παραπάνω, στο μοντέλο πόρων, το δέντρο στοιχείων, του οποίου οι κόμβοι είναι αντικείμενα πληροφοριών πόρων, περιέχεται εξ ολοκλήρου στη μνήμη. Αλλά το μοντέλο Java μπορεί να έχει σημαντικά μεγαλύτερο αριθμό στοιχείων από το δέντρο πόρων, επειδή αντιπροσωπεύει επίσης την εσωτερική δομή των αρχείων .java και .class: τύπους, πεδία και μεθόδους.

Για να αποφευχθεί η πλήρης υλοποίηση ολόκληρου του δέντρου στοιχείων στη μνήμη, η υλοποίηση του μοντέλου Java χρησιμοποιεί μια προσωρινή μνήμη LRU περιορισμένου μεγέθους πληροφοριών στοιχείων, όπου το κλειδί είναι η λαβή IJavaElement. Τα αντικείμενα πληροφοριών στοιχείων δημιουργούνται κατόπιν ζήτησης καθώς γίνεται πλοήγηση στο δέντρο στοιχείων. Σε αυτήν την περίπτωση, τα στοιχεία που χρησιμοποιούνται λιγότερο συχνά εξαιρούνται από τη μνήμη cache και η κατανάλωση μνήμης του μοντέλου παραμένει περιορισμένη στο καθορισμένο μέγεθος της κρυφής μνήμης. Αυτό είναι ένα άλλο πλεονέκτημα του σχεδιασμού που βασίζεται σε λαβή, το οποίο αποκρύπτει εντελώς τέτοιες λεπτομέρειες υλοποίησης από τον κώδικα πελάτη.

Ο μηχανισμός για την ειδοποίηση αλλαγών σε στοιχεία Java είναι γενικά παρόμοιος με τον μηχανισμό παρακολούθησης αλλαγών στους πόρους του χώρου εργασίας που συζητήθηκε παραπάνω. Ένας πελάτης που επιθυμεί να παρακολουθήσει τις αλλαγές στο μοντέλο Java εγγράφεται σε ειδοποιήσεις, οι οποίες αντιπροσωπεύονται ως αντικείμενο ElementChangedEvent που περιέχει ένα IJavaElementDelta (Εικόνα 6).

Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων
Ρύζι. 6. ElementChangedEvent και IJavaElementDelta

Το μοντέλο Java δεν περιέχει πληροφορίες σχετικά με τα σώματα μεθόδων ή την ανάλυση ονομάτων, επομένως για λεπτομερή ανάλυση κώδικα γραμμένου σε Java, το JDT Core παρέχει ένα πρόσθετο (μη βασισμένο σε λαβή) μοντέλο: αφηρημένο δέντρο σύνταξης (αφηρημένο δέντρο σύνταξης, AST). Το AST αντιπροσωπεύει το αποτέλεσμα της ανάλυσης του κειμένου πηγής. Οι κόμβοι AST αντιστοιχούν σε στοιχεία της δομής της μονάδας πηγής (δηλώσεις, τελεστές, εκφράσεις κ.λπ.) και περιέχουν πληροφορίες σχετικά με τις συντεταγμένες του αντίστοιχου στοιχείου στο κείμενο προέλευσης, καθώς και (ως επιλογή) πληροφορίες σχετικά με την ανάλυση ονόματος στο τη μορφή συνδέσμων με τα λεγόμενα συνδέσεις. Οι δεσμεύσεις είναι αντικείμενα που αντιπροσωπεύουν ονομασμένες οντότητες, όπως τύπους, μεθόδους και μεταβλητές, γνωστά στον μεταγλωττιστή. Σε αντίθεση με τους κόμβους AST, οι οποίοι σχηματίζουν ένα δέντρο, οι δεσμεύσεις υποστηρίζουν διασταυρούμενη αναφορά και γενικά σχηματίζουν ένα γράφημα. Η αφηρημένη κλάση ASTNode είναι η κοινή βασική κλάση για όλους τους κόμβους AST. Οι υποκλάσεις ASTNode αντιστοιχούν σε συγκεκριμένες συντακτικές κατασκευές της γλώσσας Java.

Επειδή τα δέντρα σύνταξης μπορούν να καταναλώσουν σημαντική ποσότητα μνήμης, το JDT αποθηκεύει προσωρινά μόνο ένα AST για τον ενεργό επεξεργαστή. Σε αντίθεση με το μοντέλο Java, το AST συνήθως θεωρείται ως ένα "ενδιάμεσο", "προσωρινό" μοντέλο του οποίου τα μέλη δεν θα πρέπει να αναφέρονται από πελάτες εκτός του πλαισίου της λειτουργίας που οδήγησε στη δημιουργία του AST.

Τα αναφερόμενα τρία μοντέλα (μοντέλο Java, AST, δεσμεύσεις) μαζί αποτελούν τη βάση για τη δημιουργία «έξυπνων εργαλείων ανάπτυξης» στο JDT, συμπεριλαμβανομένου ενός ισχυρού επεξεργαστή Java με διάφορους «βοηθούς», διάφορες ενέργειες για την επεξεργασία πηγαίου κώδικα (συμπεριλαμβανομένης της οργάνωσης λίστας εισαγωγής ονόματα και μορφοποίηση σύμφωνα με το προσαρμοσμένο στυλ), εργαλεία αναζήτησης και ανακατασκευής. Σε αυτήν την περίπτωση, το μοντέλο Java διαδραματίζει ιδιαίτερο ρόλο, καθώς είναι αυτό που χρησιμοποιείται ως βάση για μια οπτική αναπαράσταση της δομής της εφαρμογής που αναπτύσσεται (για παράδειγμα, στην Εξερεύνηση πακέτων, Περίγραμμα, Αναζήτηση, Ιεραρχία κλήσεων και Τύπος Ιεραρχία).

Στοιχεία Eclipse που χρησιμοποιούνται στο 1C:Enterprise Developments Tools

Στο Σχ. Το σχήμα 7 δείχνει τα στοιχεία του Eclipse που αποτελούν τη βάση της τεχνολογικής πλατφόρμας για τα Εργαλεία Ανάπτυξης Επιχειρήσεων 1C:Enterprise.

Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων
Ρύζι. 7. Το Eclipse ως πλατφόρμα για το 1C:Enterprise Development Tools

Eclipse Platform παρέχει βασικές υποδομές. Εξετάσαμε ορισμένες πτυχές αυτής της υποδομής στην προηγούμενη ενότητα.

Πλαίσιο μοντελοποίησης Eclipse (EMF) παρέχει ένα γενικό μέσο μοντελοποίησης δομημένων δεδομένων. Το EMF είναι ενσωματωμένο στην πλατφόρμα Eclipse, αλλά μπορεί να χρησιμοποιηθεί ξεχωριστά σε κανονικές εφαρμογές Java. Πολύ συχνά, οι νέοι προγραμματιστές του Eclipse γνωρίζουν ήδη καλά το EMF, αν και δεν κατανοούν ακόμη πλήρως τις περιπλοκές της πλατφόρμας Eclipse. Ένας από τους λόγους για μια τέτοια δημοτικότητα είναι ο καθολικός σχεδιασμός, ο οποίος περιλαμβάνει, μεταξύ άλλων, ένα ενοποιημένο API μετα-επίπεδου, το οποίο σας επιτρέπει να εργάζεστε με οποιοδήποτε μοντέλο EMF με γενικό τρόπο. Οι βασικές υλοποιήσεις για αντικείμενα μοντέλου που παρέχονται από το EMF και το υποσύστημα για τη δημιουργία κώδικα μοντέλου με βάση το μετα-μοντέλο αυξάνουν σημαντικά την ταχύτητα ανάπτυξης και μειώνουν τον αριθμό των σφαλμάτων. Το EMF περιέχει επίσης μηχανισμούς για σειριοποίηση μοντέλων, παρακολούθηση αλλαγών στο μοντέλο και πολλά άλλα.

Όπως κάθε πραγματικά γενικής χρήσης εργαλείο, το EMF είναι κατάλληλο για την επίλυση ενός ευρέος φάσματος προβλημάτων μοντελοποίησης, αλλά ορισμένες κατηγορίες μοντέλων (για παράδειγμα, τα μοντέλα που βασίζονται σε λαβή που συζητήθηκαν παραπάνω) μπορεί να απαιτούν πιο εξειδικευμένα εργαλεία μοντελοποίησης. Το να μιλάς για το EMF είναι μια άχαρη εργασία, ειδικά εντός των περιορισμένων ορίων ενός άρθρου, καθώς αυτό είναι το θέμα ενός ξεχωριστού βιβλίου και ενός μάλλον παχύ. Ας σημειώσουμε μόνο ότι το υψηλής ποιότητας σύστημα γενικεύσεων που διέπει το EMF επέτρεψε τη γέννηση μιας ολόκληρης σειράς έργων αφιερωμένων στη μοντελοποίηση, τα οποία περιλαμβάνονται στο έργο ανώτατου επιπέδου Eclipse Modeling μαζί με το ίδιο το EMF. Ένα τέτοιο έργο είναι το Eclipse Xtext.

Eclipse Xtext παρέχει μια υποδομή «μοντελοποίησης κειμένου». Χρήσεις Xtext ANTLR για την ανάλυση του κειμένου πηγής και του EMF για την αναπαράσταση του προκύπτοντος ASG (αφηρημένο σημασιολογικό γράφημα, το οποίο είναι ουσιαστικά ένας συνδυασμός AST και δεσμεύσεων), που ονομάζεται επίσης «σημασιολογικό μοντέλο». Η γραμματική της γλώσσας που διαμορφώθηκε από το Xtext περιγράφεται στη γλώσσα του Xtext. Αυτό σας επιτρέπει όχι μόνο να δημιουργήσετε μια γραμματική περιγραφή για το ANTLR, αλλά και να αποκτήσετε έναν μηχανισμό σειριοποίησης AST (δηλαδή το Xtext παρέχει και έναν αναλυτή και έναν αναλυτή), μια υπόδειξη περιβάλλοντος και μια σειρά από άλλα στοιχεία γλώσσας. Από την άλλη πλευρά, η γλώσσα γραμματικής που χρησιμοποιείται στο Xtext είναι λιγότερο ευέλικτη από, ας πούμε, τη γραμματική που χρησιμοποιείται στο ANTLR. Επομένως, μερικές φορές είναι απαραίτητο να "λυγίσετε" την εφαρμοσμένη γλώσσα σε Xtext, κάτι που συνήθως δεν αποτελεί πρόβλημα εάν μιλάμε για μια γλώσσα που αναπτύσσεται από την αρχή, αλλά μπορεί να είναι απαράδεκτο για γλώσσες με ήδη καθιερωμένη σύνταξη. Παρόλα αυτά, το Xtext είναι επί του παρόντος το πιο ώριμο, πλούσιο σε χαρακτηριστικά και ευέλικτο εργαλείο στο Eclipse για τη δημιουργία γλωσσών προγραμματισμού και εργαλείων ανάπτυξης για αυτές. Συγκεκριμένα, είναι ένα ιδανικό εργαλείο για γρήγορη δημιουργία πρωτοτύπων ειδικές γλώσσες τομέα (γλώσσα για συγκεκριμένο τομέα, DSL). Εκτός από τον προαναφερθέντα "πυρήνα γλώσσας" που βασίζεται σε ANTLR και EMF, το Xtext παρέχει πολλά χρήσιμα στοιχεία υψηλότερου επιπέδου, συμπεριλαμβανομένων μηχανισμών ευρετηρίασης, σταδιακής κατασκευής, ενός "έξυπνου επεξεργαστή" και πολλά, πολλά άλλα, αλλά παραλείπει τη λαβή- βασισμένα γλωσσικά μοντέλα. Όπως το EMF, το Xtext είναι ένα θέμα που αξίζει ένα ξεχωριστό βιβλίο και δύσκολα μπορούμε να μιλήσουμε για όλες τις δυνατότητές του αυτή τη στιγμή.

1C: Τα Εργαλεία Ανάπτυξης Επιχειρήσεων χρησιμοποιούν ενεργά τόσο το ίδιο το EMF όσο και μια σειρά από άλλα έργα Eclipse Modeling. Συγκεκριμένα, το Xtext είναι ένα από τα θεμέλια των εργαλείων ανάπτυξης για τέτοιες γλώσσες 1C:Enterprise όπως η ενσωματωμένη γλώσσα προγραμματισμού και η γλώσσα ερωτημάτων. Μια άλλη βάση για αυτά τα εργαλεία ανάπτυξης είναι το έργο Eclipse Handly, το οποίο θα συζητήσουμε με περισσότερες λεπτομέρειες (από τα συστατικά του Eclipse που παρατίθενται, εξακολουθεί να είναι το λιγότερο γνωστό).

Eclipse Handly, ένα υποέργο του έργου ανώτατου επιπέδου Eclipse Technology, προέκυψε ως αποτέλεσμα μιας αρχικής συνεισφοράς κώδικα στο Ίδρυμα Eclipse που έγινε από την 1C το 2014. Έκτοτε, η 1C συνέχισε να υποστηρίζει την ανάπτυξη του έργου: Οι Handly committers είναι υπάλληλοι της εταιρείας. Το έργο είναι μικρό, αλλά καταλαμβάνει μια μάλλον μοναδική θέση στο Eclipse: ο κύριος στόχος του είναι να υποστηρίξει την ανάπτυξη μοντέλων που βασίζονται σε χειρολαβές.

Οι βασικές αρχιτεκτονικές αρχές των μοντέλων που βασίζονται σε λαβή, όπως το ιδίωμα λαβής/σώματος, συζητήθηκαν παραπάνω χρησιμοποιώντας το μοντέλο πόρων και το μοντέλο Java ως παραδείγματα. Σημείωσε επίσης ότι τόσο το μοντέλο πόρων όσο και το μοντέλο Java αποτελούν σημαντικά θεμέλια για τα εργαλεία ανάπτυξης Java Eclipse (JDT). Και δεδομένου ότι σχεδόν όλα τα έργα *DT Eclipse έχουν αρχιτεκτονική παρόμοια με το JDT, δεν θα ήταν μεγάλη υπερβολή να πούμε ότι τα μοντέλα που βασίζονται σε χειρολαβές αποτελούν τη βάση πολλών, αν όχι όλων των IDE που είναι κατασκευασμένα πάνω από την πλατφόρμα Eclipse. Για παράδειγμα, το Eclipse C/C++ Development Tooling (CDT) έχει ένα μοντέλο C/C++ που βασίζεται σε λαβή που παίζει τον ίδιο ρόλο στην αρχιτεκτονική CDT με το μοντέλο Java στο JDT.

Πριν από το Handly, το Eclipse δεν πρόσφερε εξειδικευμένες βιβλιοθήκες για τη δημιουργία μοντέλων γλώσσας που βασίζονται σε χειρολαβές. Τα μοντέλα που υπάρχουν αυτή τη στιγμή δημιουργήθηκαν κυρίως με την άμεση προσαρμογή του κώδικα μοντέλου Java (γνωστός και ως αντιγραφή/επικόλληση), στις περιπτώσεις που το επιτρέπει Eclipse Public License (EPL). (Προφανώς, αυτό δεν είναι συνήθως ένα νομικό ζήτημα για, ας πούμε, το ίδιο το έργο Eclipse, αλλά όχι για προϊόντα κλειστού κώδικα.) Εκτός από την εγγενή τυχαιότητα, αυτή η τεχνική εισάγει γνωστά προβλήματα: αντιγραφή κώδικα που εισάγεται κατά την προσαρμογή σε σφάλματα, και τα λοιπά. Το χειρότερο είναι ότι τα μοντέλα που προκύπτουν παραμένουν «πράγματα από μόνα τους» και δεν εκμεταλλεύονται τη δυνατότητα ενοποίησης. Αλλά η απομόνωση κοινών εννοιών και πρωτοκόλλων για μοντέλα γλώσσας που βασίζονται σε λαβή θα μπορούσε να οδηγήσει στη δημιουργία επαναχρησιμοποιήσιμων στοιχείων για εργασία με αυτά, παρόμοια με αυτό που συνέβη στην περίπτωση του EMF.

Δεν είναι ότι ο Eclipse δεν κατάλαβε αυτά τα θέματα. Πίσω στο 2005 Martin Aeschlimann, συνοψίζοντας την εμπειρία από την ανάπτυξη του πρωτοτύπου CDT, υποστήριξε την ανάγκη δημιουργίας μιας κοινής υποδομής για γλωσσικά μοντέλα, συμπεριλαμβανομένων μοντέλων που βασίζονται σε χειρολαβές. Όμως, όπως συμβαίνει συχνά, λόγω των εργασιών υψηλότερης προτεραιότητας, η εφαρμογή αυτών των ιδεών δεν έφτασε ποτέ. Εν τω μεταξύ, η παραγοντοποίηση του κώδικα *DT εξακολουθεί να είναι ένα από τα υποανάπτυκτα θέματα στο Eclipse.

Υπό μια ορισμένη έννοια, το έργο Handly έχει σχεδιαστεί για να λύνει περίπου τα ίδια προβλήματα με το EMF, αλλά για μοντέλα που βασίζονται σε χειρολαβές, και κυρίως για γλωσσικά (δηλαδή, αντιπροσωπεύουν στοιχεία της δομής κάποιας γλώσσας προγραμματισμού). Οι κύριοι στόχοι που τέθηκαν κατά το σχεδιασμό του Handly παρατίθενται παρακάτω:

  • Προσδιορισμός των βασικών αφαιρέσεων της θεματικής περιοχής.
  • Μείωση της προσπάθειας και βελτίωση της ποιότητας υλοποίησης μοντέλων γλώσσας που βασίζονται σε λαβές μέσω επαναχρησιμοποίησης κώδικα.
  • Παρέχοντας ένα ενοποιημένο API μετα-επίπεδου στα μοντέλα που προκύπτουν, καθιστώντας δυνατή τη δημιουργία κοινών στοιχείων IDE που λειτουργούν με μοντέλα που βασίζονται σε χειρισμό γλώσσας.
  • Ευελιξία και επεκτασιμότητα.
  • Ενσωμάτωση με Xtext (σε ξεχωριστό επίπεδο).

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

Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων
Ρύζι. 8. Κοινές διεπαφές και βασικές υλοποιήσεις στοιχείων Handly

Η διεπαφή IElement αντιπροσωπεύει τη λαβή ενός στοιχείου και είναι κοινή σε στοιχεία όλων των μοντέλων που βασίζονται στο Handly. Η αφηρημένη κλάση Element υλοποιεί τον γενικευμένο μηχανισμό λαβής/σώματος (Εικ. 9).

Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων
Ρύζι. 9. IElement και γενική εφαρμογή λαβής/σώματος

Επιπλέον, το Handly παρέχει έναν γενικευμένο μηχανισμό για ειδοποίηση για αλλαγές στα στοιχεία του μοντέλου (Εικ. 10). Όπως μπορείτε να δείτε, είναι γενικά παρόμοιος με τους μηχανισμούς ειδοποίησης που εφαρμόζονται στο μοντέλο πόρων και στο μοντέλο Java και χρησιμοποιεί το IElementDelta για να παρέχει μια ενοποιημένη αναπαράσταση των πληροφοριών αλλαγής στοιχείων.

Το Eclipse ως τεχνολογική πλατφόρμα για 1C:Εργαλεία ανάπτυξης επιχειρήσεων
Ρύζι. 10. Γενικές διεπαφές και βασικές υλοποιήσεις του μηχανισμού ειδοποίησης Handly

Το τμήμα Handly που συζητήθηκε παραπάνω (Εικ. 9 και 10) μπορεί να χρησιμοποιηθεί για να αναπαραστήσει σχεδόν οποιοδήποτε μοντέλο με λαβή. Για τη δημιουργία γλωσσικός μοντέλα, το έργο προσφέρει πρόσθετη λειτουργικότητα - ειδικότερα, κοινές διεπαφές και βασικές υλοποιήσεις για στοιχεία της δομής κειμένου προέλευσης, τα λεγόμενα στοιχεία πηγής (Εικ. 8). Η διεπαφή ISourceFile αντιπροσωπεύει ένα αρχείο προέλευσης και το ISourceConstruct αντιπροσωπεύει ένα στοιχείο μέσα στο αρχείο προέλευσης. Οι αφηρημένες κλάσεις SourceFile και SourceConstruct εφαρμόζουν γενικευμένους μηχανισμούς για την υποστήριξη της εργασίας με αρχεία προέλευσης και τα στοιχεία τους, για παράδειγμα, εργασία με buffers κειμένου, σύνδεση με τις συντεταγμένες ενός στοιχείου στο κείμενο προέλευσης, συμφωνία μοντέλων με το τρέχον περιεχόμενο μιας λειτουργικής προσωρινής μνήμης αντιγραφής , και τα λοιπά. Η εφαρμογή αυτών των μηχανισμών είναι συνήθως μια μεγάλη πρόκληση και το Handly μπορεί να μειώσει σημαντικά την προσπάθεια ανάπτυξης μοντέλων γλώσσας που βασίζονται σε χειρολαβές παρέχοντας υλοποιήσεις βάσης υψηλής ποιότητας.

Εκτός από τους βασικούς μηχανισμούς που αναφέρονται παραπάνω, το Handly παρέχει μια υποδομή για προσωρινά αποθηκευτικά αρχεία κειμένου και στιγμιότυπα, υποστήριξη για ενσωμάτωση με επεξεργαστές πηγαίου κώδικα (συμπεριλαμβανομένης της ενσωμάτωσης out-of-the-box με τον επεξεργαστή Xtext), καθώς και ορισμένα κοινά στοιχεία διεπαφής χρήστη που Εργαστείτε με επεξεργαστές πηγαίου κώδικα. Χειροποίητα μοντέλα όπως το πλαίσιο περιγράμματος. Για να καταδείξει τις δυνατότητές του, το έργο παρέχει πολλά παραδείγματα, συμπεριλαμβανομένης μιας υλοποίησης του μοντέλου Java στο Handly. (Σε σύγκριση με την πλήρη εφαρμογή του μοντέλου Java στο JDT, αυτό το μοντέλο είναι σκόπιμα κάπως απλοποιημένο για μεγαλύτερη σαφήνεια.)

Όπως αναφέρθηκε προηγουμένως, μια σημαντική εστίαση κατά την αρχική σχεδίαση και την επακόλουθη ανάπτυξη του Handly ήταν και συνεχίζει να είναι η επεκτασιμότητα και η ευελιξία.

Κατ 'αρχήν, τα μοντέλα που βασίζονται σε λαβή κλιμακώνονται αρκετά καλά "από τη σχεδίαση". Για παράδειγμα, το ιδίωμα λαβής/σώμα σάς επιτρέπει να περιορίσετε την ποσότητα της μνήμης που καταναλώνεται από ένα μοντέλο. Υπάρχουν όμως και αποχρώσεις. Έτσι, κατά τη δοκιμή του Handly για επεκτασιμότητα, ανακαλύφθηκε ένα πρόβλημα στην εφαρμογή του μηχανισμού ειδοποίησης - όταν άλλαξαν μεγάλος αριθμός στοιχείων, η κατασκευή δέλτα χρειάστηκε πάρα πολύ χρόνο. Αποδείχθηκε ότι το ίδιο πρόβλημα υπήρχε και στο μοντέλο JDT Java, από το οποίο προσαρμόστηκε κάποτε ο αντίστοιχος κώδικας. Διορθώσαμε το σφάλμα στο Handly και ετοιμάσαμε μια παρόμοια ενημέρωση κώδικα για το JDT, το οποίο ελήφθη με ευγνωμοσύνη. Αυτό είναι μόνο ένα παράδειγμα όπου η εισαγωγή του Handly σε υπάρχουσες υλοποιήσεις μοντέλων θα μπορούσε να είναι δυνητικά χρήσιμη, επειδή σε αυτήν την περίπτωση ένα τέτοιο σφάλμα θα μπορούσε να διορθωθεί σε ένα μόνο μέρος.

Για να καταστεί τεχνικά εφικτή η εφαρμογή του Handly σε υπάρχουσες υλοποιήσεις μοντέλων, η βιβλιοθήκη πρέπει να έχει σημαντική ευελιξία. Το κύριο πρόβλημα είναι η διατήρηση της συμβατότητας προς τα πίσω στο μοντέλο API. Αυτό το πρόβλημα λύθηκε σε Handly 0.5 διαχωρίζοντας σαφώς το API για συγκεκριμένο μοντέλο, που ορίζεται και ελέγχεται πλήρως από τον προγραμματιστή, από το ενοποιημένο API μετα-επίπεδου που παρέχεται από τη βιβλιοθήκη. Αυτό όχι μόνο καθιστά δυνατή την εφαρμογή του Handly σε υπάρχουσες υλοποιήσεις, αλλά δίνει επίσης σημαντική ελευθερία στον προγραμματιστή του νέου μοντέλου κατά το σχεδιασμό του API.

Η ευελιξία έχει και άλλες πτυχές. Για παράδειγμα, το Handly δεν επιβάλλει σχεδόν κανέναν περιορισμό στη δομή του μοντέλου και μπορεί να χρησιμοποιηθεί για τη μοντελοποίηση γλωσσών γενικής χρήσης και ειδικών για τον τομέα. Κατά την κατασκευή της δομής του αρχείου προέλευσης, ο Handly δεν ορίζει κάποια συγκεκριμένη μορφή αναπαράστασης AST και, κατ' αρχήν, δεν απαιτεί καν την παρουσία του ίδιου του AST, διασφαλίζοντας έτσι τη συμβατότητα με σχεδόν οποιονδήποτε μηχανισμό ανάλυσης. Τέλος, το Handly υποστηρίζει την πλήρη ενσωμάτωση με τον χώρο εργασίας Eclipse, αλλά μπορεί επίσης να εργαστεί απευθείας με συστήματα αρχείων χάρη στην ενσωμάτωσή του με Σύστημα αρχείων Eclipse (EFS).

Τρέχουσα έκδοση Handly 0.6 κυκλοφόρησε τον Δεκέμβριο του 2016. Παρά το γεγονός ότι το έργο βρίσκεται επί του παρόντος σε κατάσταση επώασης και το API δεν έχει ακόμη οριστικοποιηθεί, το Handly χρησιμοποιείται ήδη σε δύο μεγάλα εμπορικά προϊόντα που ανέλαβαν τον κίνδυνο να λειτουργήσουν ως «πρώιμοι χρήστες» και, πρέπει να πω, μην το μετανιώσεις ακόμα.

Όπως σημειώθηκε παραπάνω, ένα από αυτά τα προϊόντα είναι το 1C:Enterprise Development Tools, όπου το Handly χρησιμοποιείται από την αρχή για να μοντελοποιήσει στοιχεία της δομής υψηλού επιπέδου τέτοιων γλωσσών 1C:Enterprise, όπως η ενσωματωμένη γλώσσα προγραμματισμού και η γλώσσα ερωτημάτων . Ένα άλλο προϊόν είναι λιγότερο γνωστό στο ευρύ κοινό. Αυτό Codasip Studio, ένα ολοκληρωμένο περιβάλλον σχεδίασης για επεξεργαστή σετ εντολών για συγκεκριμένες εφαρμογές (ASIP), που χρησιμοποιείται τόσο στην ίδια την τσεχική εταιρεία Codasip όσο και από τους πελάτες της, συμπεριλαμβανομένων AMD, AVG, mobileye, Sigma Designs. Η Codasip χρησιμοποιεί το Handly στην παραγωγή από το 2015, ξεκινώντας με την έκδοση Handly 0.2. Η τελευταία έκδοση του Codasip Studio χρησιμοποιεί την έκδοση 0.5, που κυκλοφόρησε τον Ιούνιο του 2016. Ο Ondřej Ilčík, ο οποίος ηγείται της ανάπτυξης IDE στην Codasip, βρίσκεται σε επαφή με το έργο, παρέχοντας ζωτικής σημασίας σχόλια εκ μέρους του «τρίτου που υιοθετεί». Μπόρεσε μάλιστα να βρει λίγο ελεύθερο χρόνο για να συμμετάσχει άμεσα στην ανάπτυξη του έργου, υλοποιώντας ένα επίπεδο UI (~4000 γραμμές κώδικα) για ένα από τα παραδείγματα Handly, ένα μοντέλο Java. Περισσότερες λεπτομερείς πληροφορίες από πρώτο χέρι σχετικά με τη χρήση του Handly από τους χρήστες θα βρείτε στη σελίδα Ιστορίες επιτυχίας έργο.

Ελπίζουμε ότι μετά την κυκλοφορία της έκδοσης 1.0 με εγγύηση σταθερότητας API και την έξοδο του έργου από την κατάσταση επώασης, η Handly θα έχει νέους χρήστες. Στο μεταξύ, το έργο συνεχίζει να δοκιμάζει και να βελτιώνει περαιτέρω το API, κυκλοφορώντας δύο «κυριότερες» εκδόσεις ετησίως - τον Ιούνιο (την ίδια ημερομηνία με την ταυτόχρονη κυκλοφορία του Eclipse) και τον Δεκέμβριο, παρέχοντας ένα προβλέψιμο χρονοδιάγραμμα στο οποίο μπορούν να βασιστούν οι χρήστες. Μπορούμε επίσης να προσθέσουμε ότι το «ποσοστό σφαλμάτων» του έργου παραμένει σε σταθερά χαμηλό επίπεδο και η Handly εργάζεται αξιόπιστα στα προϊόντα των πρώτων χρηστών από τις πρώτες κιόλας εκδόσεις. Για να εξερευνήσετε περαιτέρω το Eclipse Handly, μπορείτε να χρησιμοποιήσετε Εκμάθηση Ξεκινώντας и Αρχιτεκτονική επισκόπηση.

Πηγή: www.habr.com

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