Δευτέρα 21 Φεβρουαρίου 2022

Αναθεώρηση 5, έκδοση 11 και ανάπτυξη του KarelIDE.

Σε αυτήν την αναθεώρηση διόρθωσα ένα Bug όπου κατά το resize της φόρμας χρήστη υπήρχε περίπτωση να δοθεί σε μια ιδιότητα της φόρμας το -1 όπου δεν το δέχονταν και έριχνε το πρόγραμμα, επειδή δεν υπήρχε σε εκείνο το σημείο μια On Error, στο κώδικα της Visual Basic 6, που είναι γραμμένο το περιβάλλον της Μ2000).

Κάποιοι θα αναρωτιούνται γιατί το περιβάλλον της Μ2000 γράφτηκε σε Visual Basic 6. Αρχικά είχε γραφτεί σε VB5, και μετά σε VB6. Όταν ξεκίνησε δηλαδή το 1999 δεν υπήρχε άλλη γλώσσα για το σκοπό αυτό, που να ήταν και εύκολη η διόρθωση κατά την εκτέλεση (δηλαδή στην εκτέλεση μπορεί κάποιος να προσθέσει κώδικα, και ένα μεγάλο μέρος γράφτηκε κατά την εκτέλεση). Στο τέλος η VB6 βγάζει κώδικα μηχανής και όχι εικονικής μηχανής, με βελτισοποιήσεις, μια εκ των οποίων είναι να αφαιρεί τον έλεγχο ορίων σε πίνακες. Αυτό το τελευταίο χαρακτηριστικό κάνει τον τελικό κώδικα εφάμιλλο της C (που και αυτή δεν έχει έλεγχο ορίων σε πίνακες). Αυτό δεν σημαίνει ότι στη γλώσσα Μ2000 δεν υπάρχει έλεγχος ορίων, αλλά δεν γίνεται δυο φόρες, μια στο επίπεδο του διερμηνευτή και μια στο επίπεδο του κώδικα της Visual Basic. Επιπλέον η Visual Basic 6 χρησιμοποιεί Variants, και προγραμματισμό χαμηλού επιπέδου (πχ στον διερμηνευτή φτιάχνονται αντικείμενα για να συνδεθούν γεγονότα από αντικείμενα COM κατά την εκτέλεση της Μ2000, δηλαδή ενώ ήδη τρέχει το περιβάλλον της Μ2000). Βεβαίως επειδή το περιβάλλον της Μ2000 είναι ανοικτού κώδικα θα μπορούσε κάποιος να φτιάξει μια έκδοση της Μ2000 με δικό του διερμηνευτή, και σε ένα εντελώς άλλο περιβάλλον. Κάποια στιγμή θα ολοκληρώσω και την ιδέα της εικονικής μηχανής, δηλαδή τα τμήματα της Μ2000 να είναι σε μια μορφή κώδικα, σαν ένα AST, αν και δεν μου αρέσει η δεντρική μορφή, προτιμώ να βάλω offsets, και να είναι ο κώδικας σε μια "ευθεία". Πιθανόν θα ξεκινήσω αυτή την αλλαγή το Μάρτιο, αν δεν προκύψει κάτι άλλο.

Σχετικά με τη γλώσσα Karel, σήμερα ολοκλήρωσα το πρώτο μέρος του IDE, που ήθελα να περιλαμβάνει σε μια φόρμα τέσσερα στοιχεία: Τον διορθωτή με χρωματισμό της γλώσσας (έγινε), μια λίστα επιλογών (έγινε), μια γραμμή κατάστασης-πληροφοριών (στο κάτω μέρος της φόρμας) και στο πάνω μέρος της φόρμας εμφάνιση του κόσμου του Karel (έγινε). Επίσης πρέπει να μπορούμε να αλλάζουμε το μέγεθος της φόρμας από κάτω αριστερά και να ακολουθούν την αλλαγή τα στοιχεία. Επίσης μεταξύ του διορθωτή και της λίστας επιλογών επίσης πρέπει να μεταφέρουμε το χώρισμα αριστερά ή δεξιά (έγινε). Επίσης πρέπει να μεταφέρουμε το χώρισμα πάνω από τον διορωθοτή/λίστα για να εμφανίζεται όλος ο κόσμος του Karel. Όλα αυτά έγιναν. Δεν χρησιμοποίησα το νέο στοιχείο Image, ο σχεδιασμός του κόσμου γίνεται στη φόρμα. Επίσης δεν χρησιμοποίησα λίστες ως διαχωριστικά για να δίνουμε την νέα θέση διαχωρισμού. Αυτό που κάνω εδώ είναι να εμφανίζω το κόσμο του Karel μέσα από ένα path (περιοχή που έξω από αυτή δεν φαίνονται γραφικά), και έτσι να μην χαλάω "πορτοκαλί" περιεοχές που δείχνουν τα οριζόντια και κάθετα διαχωριστικά καθώς και τις δυο κάθετες και την κάτω γραμμή του περιθωρίου της φόρμας (που ανοίκουν στο επίπεδο της φόρμας).

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


Τον κώδικα για το Karel Ide (γραμμένος με αγγλικές εντολές) θα τον βρείτε στο Git εδώ:

https://github.com/M2000Interpreter/KarelTheRobot

Τώρα μένει η επόμενη φάση, να φτιάξω τις επιλογές να λειτουργούν και ειδικότερα την εισαγωγή από αρχείο (που φτιάχνουμε με το πρόγραμμα δημιουργίας κόσμου, και αυτό υπάρχει τελειωμένο στο git) καθώς και την εκτέλεση του κώδικα (υπάρχει και ο AST interpreter τελειωμένος στο git), που θα εμφανίζει το αποτέλεσμα κατά την εκτέλεση (εδώ μάλλον θα φτιάξω μια φόρμα που θα εκτελεί βήμα προς βήμα το κώδικα, και θα βγαίνει πάνω από την φόρμα του IDE).


(Θα το συνεχίσω όταν τελειώσει ο πόλεμος στην Ουκρανία. Δεν μπορώ να δουλεύω ευχάριστα όταν δίπλα μας σκοτώνεται κόσμος)




Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.