Αποστολέας Θέμα: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8  (Αναγνώστηκε 8657 φορές)

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 355
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #45 στις: 17 Οκτ 2018, 09:32:53 πμ »
Συμπληρώθηκαν 250 tasks στο rosettacode.org
http://www.rosettacode.org/wiki/Category:M2000_Interpreter

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 355
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #46 στις: 05 Φεβ 2019, 06:05:46 μμ »
Ολοκληρώθηκε η Μ2000, στην έκδοση 9.7
Ως προς την σύνταξη και τις δυνατότητες της γλώσσας δεν προβλέπεται καμία αναβάθμιση. Αυτό που μένει για άλλες εκδόσεις είναι η αλλαγή του μοντέλου εκτέλεσης. Το τωρινό μοντέλο είναι απλό, για να ήταν εύκολη η διαδικασία αποσφαλμάτωσης, με κάθε εντολή να εκτελείται από μια συνάρτηση που δέχεται ένα τμήμα του πηγαίου κώδικα, με συνέπεια πάντα να εκτελείται άμεσα πηγαίος κώδικας ακόμα και σε περίπτωση επαναλήψεων. Αυτό σημαίνει ότι ένα νούμερο πχ το 100 στο πηγαίο κώδικα σε μια επανάληψη θα χρειαστεί να γίνει μετατροπή σε αριθμό σε κάθε πέρασμα.
Η επόμενη έκδοση θα περιέχει AST Interpreter, και θα αργήσει αρκετούς μήνες μέχρι να φθάσει στην ίδια λειτουργικότητα με την 9.7, αλλά θα είναι ένα βήμα πριν τον Compiler σε byte code.
Το AST είναι μια δομή δένδρου που κρατάει τα στοιχεία σε μορφή έτοιμα για χρήση, έχει δηλαδή προηγηθεί ο λεκτικός αναλυτής (lexical analyzer) και κατόπιν ο syntax analyzer, ή συντακτικός αναλυτής. Ήδη ο λεκτικός αναλυτής έχει φτιαχτεί και έχει προκύψει από τον χρωματιστή κώδικα του ενσωματωμένου διορθωτή της Μ2000.
Ο στόχος μου είναι μέχρι το καλοκαίρι του 2019 να υπάρχει η έκδοση 9.8 και να είναι 10 φορές γρηγορότερη από την 9.7. Ήδη η 9.7 είναι η πιο γρήγορη απ΄ όλες τις προηγούμενες εκδόσεις.
Στο αρχείο εγκατάστασης υπάρχει και ένα πρόγραμμα το info που τρέχει αυτόματα όταν το ανοίγουμε και εμφανίζει πληροφορίες, καθώς επίσης περιέχει προγράμματα για να καλέσουμε άμεσα ή να τα διαβάσουμε και να πάρουμε ιδέες. Υπάρχει πχ το textout που εμφανίζει κείμενο λέξη προς λέξη καθώς ο υπολογιστής το διαβάζει! Αυτό γίνεται με την Μ2000 γιατί μπορεί να συνδεθεί με αντικείμενα και να διαβάζει γεγονότα, και εδώ το αντικείμενο λέγεται SAPI.SpVoice και τα γεγονότα που μας ενδιαφέρουν είναι το Word, το EndStream, το Sentence με τα οποία παίρνουμε πληροφορίες καθώς το αντικείμενο "μιλάει" το κείμενο που του δίνουμε.
Βεβαίως μπορεί η ΓΛΩΣΣΑ του σχολείου να είναι πλήρες για το πρόγραμμα σπουδών, όμως δεν είναι ενδιαφέρουσα για δημιουργική ασχολία. Σε αυτό το σημείο η Μ2000 έχει να προτείνει κάτι άλλο. Ότι χρειάζεται το έχει ή ενσωματωμένο ή το παίρνει από το λειτουργικό (όπως το SAPI, ή speech application programming interface). Στις ενσωματωμένες δυνατότητες είναι η σχεδίαση 2D, η χρήση εικόνων, στατικών και κινούμενων (sprites), η χρήση του MIDI (προγραμματίζουμε μουσική σε 16 κανάλια ήχου, η οποία παίζεται παράλληλα με το πρόγραμμα), χρήση ήχων και βίντεο, βάσεων δεδομένων, χρήση script γλωσσών, πχ javascript και vbscript μπορούμε να καλέσουμε μέσα από την Μ2000, καθώς επίσης μπορούμε να εκτελέσουμε κώδικα μηχανής αν και δεν υπάρχει ενσωματωμένος assembler, μπορούμε να γράψουμε το κώδικα και να τον εκτελέσουμε μέσα από τη γλώσσα. Τέλος αξίζει να αναφερθεί και το σύστημα παραθύρων που έχει το περιβάλλον της Μ2000 και εύκολα μπορούμε να φτιάχνουμε φόρμες με στοιχεία ελέγχου (τα οποία παρέχει η γλώσσα και είναι φτιαγμένα σε αυτήν και εμφανίζονται το ίδιο σε κάθε λειτουργικό).
« Τελευταία τροποποίηση: 06 Φεβ 2019, 09:36:21 μμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 355
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #47 στις: 09 Μάρ 2019, 07:16:34 μμ »

στην έκδοση 9.8, αναθεώρηση 8, έφτιαξα τον χρωμαστή κώδικα στο editbox να δουλεύει και για την ΓΛΩΣΣΑ.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 355
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Σύντομος οδηγός της Μ2000
« Απάντηση #48 στις: 12 Μάρ 2019, 07:39:38 μμ »
Εκδόθηκε διαδικτυακά ο σύντομος οδηγός της Μ2000. Γίνεται αναφορά στα υποδείγματα προγραμματισμού, και περισσότερο στα βασικά, το Προστακτικό Προγραμματισμό, το Συναρτησιακό, τον αντικειμενοστραφή Προγραμματισμό και τον Με γεγονότα Προγραμματισμό.
Αναφέρεται στην έκδοση 9.8 αναθεώρηση 13, την τελευταία ως σήμερα.
Υπάρχει σε pdf και σε Epub.

Περιλαμβάνει και δυο υλοποιήσεις ταξινομήσεων, την Ταξινόμηση με Συγχώνευση (με συνδεδεμένη λίστα), και την Γρήγορη Ταξινόμηση (με αντικείμενο, χωρίς αναδρομή, και με επιλογή τρόπου σύγκρισης).
« Τελευταία τροποποίηση: 12 Μάρ 2019, 10:25:51 μμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 355
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #49 στις: 04 Ιούν 2019, 04:45:07 μμ »
Επειδή γίνεται λόγος για αντικείμενα στη νέα ύλη, σκέφτηκα και έγραψα μια ανάρτηση στο blog για τη Μ2000, για μια απλή χρήση αντικειμένων.

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

Το ζήτημα με τα αντικείμενα είναι ότι όσες γλώσσες με αντικείμενα υπάρχουν τόσοι είναι και οι τρόποι υλοποίησης. Δηλαδή δεν υπάρχει ένας μοναδικός τρόπος υλοποίησης που να είναι "γενικός". Ακόμα και στη ΓΛΩΣΣΑ να θέλουμε να υλοποιήσουμε τα αντικείμενα θα πρέπει να γίνουν πολλές αλλαγές για να το πετύχουμε και θα βγει πάλι ένας μοναδικός τρόπος υλοποίησης.

Υπάρχουν δε κάποια χαρακτηριστικά που δηλώνουν μεταξύ των γλωσσών μια συνάφεια στα αντικείμενα, αλλά και εδώ έχουμε χαλαρή σύνδεση με τις έννοιες.

Στο παράδειγμα που δίνεται στο τέλος της ανάρτησης στο blog, έχουμε ένα εσωτερικό τμήμα (ένα υποπρόγραμμα) το οποίο καλούμε από ένα άλλο τμήμα. Στη Μ2000 γενικά μπορούμε να έχουμε όσα τμήματα θέλουμε μέσα σε άλλα τμήματα αλλά δεν μπορούμε να καλέσουμε ένα εσωτερικό τμήμα άλλου τμήματος, παρά μόνο ό,τι είναι γενικό (έχει οριστεί ως γενικό τμήμα) πριν την εκτέλεση μιας συγκεκριμένης γραμμής, και ότι έχει δηλωθεί τοπικό μέχρι την εκτέλεση αυτής της γραμμής. Επίσης δεν φαίνονται καθόλου οι ρουτίνες, που είναι σαν τα τμήματα αλλά γράφονται στο τέλος εντός τμήματος και βλέπουν ότι έχει ένα τμήμα, δηλαδή και τις άλλες ρουτίνες. Οι ρουτίνες είναι σαν τα υποπρογράμματα της ΓΛΩΣΣΑΣ, ενώ ένα πρόγραμμα σε ΓΛΩΣΣΑ είναι ένα τμήμα στη Μ2000.

Ως προς τα αντικείμενα, η Μ2000 έχει το αντικείμενο Ομάδα, και άλλους τύπους αντικειμένων. Το αντικείμενο Ομάδα είναι το αντικείμενο του χρήστη. Δηλαδή το αντικείμενο που ορίζει ιδιότητες και μεθόδους, και άλλα πράγματα που δεν φαίνονται στο παράδειγμα, όπως γεγονότα και τελεστές. Οι άλλοι τύποι χωρίζονται σε δυο κατηγορίες, στα αντικείμενα καταχώρησης στοιχείων, όπως πίνακες (και tuples), σωροί, καταστάσεις (κλειδιά και τιμές), στα οποία υπάρχουν συντακτικό και εντολές για αυτά, και στα τύπου COM, είτε αυτά είναι οι φόρμες (το GUI της Μ2000), είτε εσωτερικά πχ το MATH για ειδικές πράξεις μαθηματικών, είτε εξωτερικά που φορτώνονται από τα Windows, και για αυτά υπάρχουν δυο εντολές, για να καλούμε μεθόδους και να αλλάζουμε ή να διαβάζουμε ιδιότητες.

Στο παράδειγμα θα δούμε μόνο τις ομάδες. Οι ομάδες δεν έχουν πολλούς τύπους στη Μ2000, αλλά έναν, αυτό της ομάδας. Δηλαδή ο τύπος τους είναι η δομή τους, και αν θέλουμε μπορούμε να έχουμε μια μεταβλητή μόνο για ανάγνωση για να επιστρέφει το τύπο που εμείς επιλέγουμε. Αυτό έχει ως συνέπεια οι καταχωρήσεις ομάδων να γίνονται σε έναν πίνακα ανεξάρτητα από τη δομή τους. Αν ζητήσουμε μια μέθοδο (δηλαδή μια συνάρτηση ή ένα τμήμα της ομάδας) σε μια ομάδα, και αυτή δεν υπάρχει θα βγει λάθος.

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

Μπορούμε να δημιουργούμε ομάδες με συναρτήσεις, ή με μια ευκολία που παρέχει η Μ2000, την Κλάση, η οποία είναι συνάρτηση που επιστρέφει ομάδα (μπορούμε να έχουμε τμήμα εσωτερικά ως κατασκευαστή).

Στο παράδειγμα έχουμε μια Κλάση που λέγεται Ζώο και δυο άλλες Κλάσεις που λέγονται Σκύλος και Γάτα. Οι δυο τελευταίες χρησιμοποιούν στον κατασκευαστή τους την κλάση Ζώο. Με αυτόν τον τρόπο δείχνουμε πως κληρονομούν νέες κλάσεις από άλλες.

Δεν υπάρχει ξεχωριστός τρόπος "συντακτικός" για την έννοια της Διεπαφής. Στο παράδειγμα τα Σκύλος και Γάτα έχουν κοινή διεπαφή, δηλαδή ό,τι έχει το ένα, έχει το άλλο σε ονόματα ιδιοτήτων και μεθόδων, και στη χρήση τους. Για να γίνει περισσότερο κατανοητό, σε ένα πίνακα βάζουμε ένα τρίτο στοιχείο, μια ομάδα με ένα μόνο μέλος, το τύπος$ (το $ σημαίνει ότι γυρνάει αλφαριθμητικό, στη Μ2000 είναι απαραίτητο). Η κλάση Ζώο έχει και αυτή ένα μέλος τύπος$ και έτσι το κληρονομούν και τα Σκύλος και Γάτα. Έτσι παρόλο που ο πίνακας έχει ανόμοιες ως προς την διεπαφή Ζώο (μπορούμε να την δούμε και ως διεπαφή) ομάδες, με τη χρήση της τύπος$ σε όλες τις ομάδες έχουμε μια κοινή διεπαφή, άρα μπορούμε να χειριστούμε τα διαφορετικά αντικείμενα με μια Αν τύπος$="Ζώο" πριν την κλήση των μεθόδων που σχετίζονται με τις ομάδες που περιέχουν ομάδες όπως Σκύλος και Γάτα.

Για να γίνει πιο ενδιαφέρον το πρόγραμμα έχουμε μια παραλλαγή στα Σκύλος και Γάτα σε σχέση με το Ζώο. Ένα τμήμα που υπάρχει στο Ζώο αλλάζει στα Σκύλος και Γάτα, γιατί έχουν δηλωθεί σε αυτά ως τελικά. Εδώ καλό είναι να αναφερθεί ότι πρώτα σχηματίζεται το αντικείμενο Σκύλος και μετά σε αυτό γράφεται το Ζώο. Με αυτόν τον τρόπο θα μπορούσαμε να φτιάξουμε αντικείμενα που κληρονομούν από περισσότερες από μια κλάσεις, και η σειρά που το κάνουμε παίζει ρόλο στο ποιο καλύπτει ποιο σε περίπτωση που το ίδιο μέλος υπάρχει και στις δυο κλάσεις.

Αυτό που δεν φαίνεται στο παράδειγμα είναι ο τρόπος να βάλουμε ένα αντικείμενο σε ένα άλλο, χωρίς να το συγχωνεύσουμε στο κύριο σώμα του, αλλά σε ένα αντικείμενο εντός του. Μπορούμε να φτιάχνουμε αντικείμενα με αντικείμενα εσωτερικά του.

Επίσης αυτό που δεν φαίνεται στο παράδειγμα είναι η χρήση της Υπερκλάσης, ενός αντικειμένου κοινού σε αντικείμενα. Η υπερκλάση δεν είναι συνάρτηση που γυρνάει ομάδα, αλλά μια ομάδα που δίνει άμεσα την ίδια διεπαφή και μια σύνδεση σε αυτήν ώστε μεταξύ τους ομάδες που φτιάχτηκαν από την ίδια υπερκλάση να έχουν κοινούς πόρους.

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

Σημασία στο πρόγραμμα δεν έχει αν μοιάζει η Μ2000 στην άλφα ή βήτα γλώσσα, αλλά αν μπορεί να γίνει κατανοητό ένα πρόγραμμα με αντικείμενα. Η απλή χρήση αντικειμένων στη Μ2000 είναι με τα μοναδικά αντικείμενα, δηλαδή αντικείμενα στα οποία δεν υπάρχει δεύτερος δείκτης σε αυτά. Μπορούμε να έχουμε δείκτες σε αντικείμενα, αλλά θεωρώ ότι είναι πολύ προχωρημένο θέμα. Στην εγκατάσταση της Μ2000 υπάρχει το info.gsb (στο readme.txt λέει πως το σώνουμε στο φάκελο χρήστη, αφού το φορτώσουμε στο διερμηνευτή), όπου υπάρχει το linked_list τμήμα που είναι ένα παράδειγμα με χρήση ομάδων με δείκτες για την δημιουργία διπλής συνδεδεμένης λίστας. Σε αυτό γίνεται και η χρήση του deconstructor ή remove  { } τμήματος, όπου καλείται αν δεν υπάρχει άλλος δείκτης και εφόσον δοθεί η εντολή καθαρό ή clear σε ένα δείκτη για ομάδα. Γενικά το info.gsb έχει όλα τα τμήματα (εκτός από ένα) με αγγλικές εντολές (η γλώσσα έχει δυο λεξικά εντολών, αγγλικό και ελληνικό).


Αντικείμενα στη Μ2000, απλό παράδειγμα