Κυριακή 1 Νοεμβρίου 2015

Προδιαγραφές της Μ2000

Προδιαγραφές της Μ2000 (2023)

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

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

Για το σκοπό αυτό πρέπει να περιλαμβάνει:

Κονσόλα με χωριστή οθόνη (μια σταθερή πάνω και μια ολισθαίνουσα κάτω), με επιπλέον 32 επίπεδα.
Διορθωτής κώδικα με χρωματισμό για τεράστια κείμενα, με απεριόριστο UNDO/REDO, με εύρεση, με πολλαπλή αλλαγή, με δείκτες παραγράφων για γρήγορη μετάβαση.
Γραφικά με καρτεσιανές και πολικές συντεταγμένες, έλεγχο πλάτους γραμμής, χρώματος, τύπου διαγράμμισης. Έλεγχος περιοχής εκτύπωσης. τρόπος εκτύπωσης (xor για rubber band). Επιλογή χρήσης γραφικών ομαλών (GDI+), και γρήγορων (GDI32). Μπορούμε να παράγουμε γραφικά σε Emf απευθείας στη μνήμη και είτε να τα αναπαράγουμε είτε να τα στέλνουμε σε αρχείο είτε να τα στέλνουμε στο πρόχειρο. Υπάρχει συνάρτηση που επιστρέφει σε emf κωδικό τύπου QCode.
Χειρισμός διαφανειών Sprites (τα 32 επίπεδα χρησιμοποιούνται και για διαφάνειες με δυνατότητα περιστροφής/μεγέθυνσης)
Χειρισμός εικόνων, περιστροφή, μεγέθυνση, διαφάνεια, αλλαγή αναλογιών
Εικόνες τύπου wmf, emf, bmp, jpg, png, tif
Ήχοι/μουσική τύπου wav, mp3 και άλλα
Μουσική με νήματα για Midi κανάλια (χρήση γλώσσας με νότες/παύσεις/αξίες/ένταση)
Παραγωγή ήχου με τόνους
Εκφορά λόγου, με οδήγηση γεγονότων.
Ταινίες mpg, avi
Βάσεις Δεδομένων τύπου mdb αλλά και μέσω ODBC.
Αρχεία κειμένου Utf-8, Utf-16LE, Utf-16BE, Ansi (χειρισμός μεγάλων αρχείων >4giga byte)
Χειρισμός Json και Xml αρχείων
Χειρισμός Σειριακών Θυρών
Σύνδεση με 
Χειρισμός Εκτύπωσης
Βιβλιοθήκη Math για χειρισμό Τετραδόνιων (Quaternion) (δείτε το Demo1 με 3D γράφημα σε κίνηση, στο Info που δίνεται με την εγκατάσταση).

Ειδικές φόρμες που μεγενθύνονται όπως:

  • Φόρμα μηνύματος
  • Φόρμα μηνύματος με εισαγωγή απάντησης
  • Επιλογέας Χρωμάτων
  • Επιλογέας Εικόνας με προεπισκόπηση εικόνας
  • Επιλογέας Αρχείου για Αποθήκευση
  • Επιλογέας Αρχείου για Φόρτωση
  • Επιλογέας Φακέλου
  • Επιλογέας Γραμματοσειράς
  • Φόρμα Βοήθειας
  • Φόρμα Ελέγχου   - με βηματική εκτέλεση και θέαση κώδικα καθώς και τιμών μεταβλητών
  • Φόρμα Ρύθμισης
  • Φόρμες χρήστη που φτιάχνονται με απλές εντολές, με δυνατότητα πολλαπλών modal.

Στοιχεία ελέγχου για φόρμες χρήστη.

  • Πλήκτρο (Button) - χρησιμοποιείται και σαν απλό label, αλλά και σαν timer.
  • Εισαγωγή (Textbox) - χρησιμοποιείται και για αριθμητικές τιμές με γρήγορη αλλαγή τιμής με βελάκια και με το ροδελάκι στο ποντίκι
  • Επιλογή (Checkbox)
  • Κείμενο (Editbox) - μπορεί να χρωματίζει κώδικα με πολλούς τρόπους
  • Λίστα (Listbox) - έχει εσωτερική λίστα αλλά δέχεται και εξωτερική
  • Λίστα.Εισαγωγής (ComboBox) - έχει τρεις διαμορφώσεις - και αυτόματη συμπλήρωση, επίσης χρησιμοποιείται και για στοιχείο για μενού επιλογής.
  • Η Λίστα.Εισαγωγής χρησιμοποιείται και σε διαμόρφωση για μενού επιλογής
  • Εικόνα - χρησιμοποείται για κείμενο/σχέδια/στόχους (ελαφρά πλήκρα)/πλαίσιο για άλλα στοιχεία
Από την έκδοση 12 μπορεί να εμφανίσει στοιχεία που υπάρχουν ήδη στο λειτουργικό (ocx), ενώ διαθέτει ήδη μερικά ενσωματωμένα (εκτός από τα βασικά που αναφέρθηκαν πριν, και έχουν φριαχτεί από το δημιουργό της γλώσσας), τα οποία έχουν γραφτεί από άλλους, όπως:
  • M2000.ucPieChart
  • M2000.ucChartArea
  • M2000.ctxNineButton
  • M2000.ShapeEx
  • M2000.ucRadialProgress

Μπορούμε να ανοίξουμε στη κονσόλα αναλόγιο (browser) για ιστοσελίδες, ή σε φόρμα με χρήση του shell.explorer.2 στοιχείου.

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

Υπάρχουν έτοιμα αντικείμενα για Json και Xml χειρισμό δεδομένων. Με χρήση του εξωτερικού αντικείμενου WinHttp.WinHttpRequest.5.1 μπορούμε να καλέσουμε συνάρτηση σε server και να πάρουμε αποτέλεσμα! Δείτε εδώ 

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

Πάνω σε αυτά έχουμε την Μ2000:

Το όνομα της γλώσσας και το εικονίδιό της

Μαθητής 2000, αναφέρεται στο μαθητής της τρίτης χιλιετίας
Το εικονίδιο της γλώσσας περιλαμβάνει τέσσερα στοιχεία, τον Ήλιο (οι καλές συνθήκες), το ρόφημα (η ενέργεια), την πράσινη οθόνη (ο κώδικας) και ένα χαρούμενο ψηφιακό πρόσωπο (το πρόγραμμα που εκτελείται)!

Το συντακτικό της γλώσσας

Το συντακτικό της Μ2000 μοιάζει με την Basic, υποστηρίζει αρκετές εντολές της. Συντάσσεται γενικά με μπλοκ σε αγκύλες και σε ορισμένες δομές υπάρχουν δυο τρόποι σύνταξης, με και χωρίς αγκύλες. Σε μια γραμμή μπορούμε να έχουμε πολλές εντολές με διαχωριστικό την άνω και κάτω τελεία.
  • Τα αναγνωριστικά πρέπει να ξεκινούν με ένα γράμμα τουλάχιστον και μετά βάζουμε ότι θέλουμε, εκτός από σύμβολα - χαρακτήρες που θεωρούνται τερματικοί π.χ το + είναι τερματικός χαρακτήρας, όπως και το κλείσιμο παρένθεσης. Το άνοιγμα παρένθεσης όμως δηλώνει όνομα με παρενθέσεις, και μπορεί να εμφανίζεται στο τέλος του ονόματος.
  • Η αλλαγή γραμμών δεν είναι "white space", έχει θέση στη σύνταξη της γλώσσας. Δεν υπάρχει το ελληνικό ερωτηματικό για τέλος εντολής. Η εντολή τελειώνει όταν υπάρχει η άνω και κάτω τελεία, ή μια αλλαγή γραμμών, ή έχει τελειώσει ο κώδικας!
  • Μπορούμε να έχουμε αριθμούς γραμμών και ετικέτες με γράμματα. Τους αριθμούς γραμμών μπορούν να ακολουθούν εντολές, αλλά βρίσκονται πάντα στην αρχή μιας γραμμής (η παραγράφου εντολών). Οι ετικέτες ορίζονται με ονόματα που τερματίζουν σε άνω και κάτω τελεία, και μετά ακολουθεί ή αλλαγή γραμμής ή σύμβολο σημείωσης (' ή \).
  • Τα αλφαριθμητικά (προαιρετικά από την έκδοση 12) έχουν στο όνομά τους το $ ως τελευταίο γράμμα (μπορεί να ακολουθεί παρένθεση, έτσι το Α$( είναι ένα όνομα αλφαριθμητικού). Οι ακέραιες μεταβλητές έχουν το % ως τελευταίο γράμμα στο όνομά τοθς. Και οι πίνακες και οι συναρτήσεις έχουν παρενθέσεις. Τα [ και ] μπορούν να χρησιμοποιηθούν σε ονόματα ως χαρακτήρες. Οι ενσωματωμένες συναρτήσεις αλφαριθμητικών έχουν το $. Το ειδικό αντικείμενο Έγγραφο έχει πάντα το $ στο όνομα.
  • Υπάρχουν οι λεγόμενες ρουτίνες με παρενθέσεις. Αυτές είναι παρόμοιες με τις διαδικασίες (sub) της Basic. Ένα Α() μπορεί να δηλώνει πίνακα, ή συνάρτηση ή ρουτίνα. Ο διερμηνευτής όταν βρει σε μια εντολή όνομα με παρενθέσεις παίρνει όλα τα στοιχεία που δίνουμε ανάμεσα στις παρενθέσεις και κοιτάει μετά το κλείσιμο της παρένθεσης αν έχουμε σύμβολο ανάθεσης ή τελεστή πράξεων, και αν όχι θεωρεί ότι καλούμε ρουτίνα. Σε μια έκφραση μπορεί να υπάρχει το Α() ως πίνακας ή ως συνάρτηση. Ο διερμηνευτής θεωρεί πρώτα ότι είναι πίνακας, και αν δεν είναι τότε καλεί τη συνάρτηση. Αν βάλουμε το * μετά το Α(, δηλαδή το Α(* τότε ο διερμηνευτής ξέρει ότι ζητάμε συνάρτηση. (στις αρχικές εκδόσεις ήταν το @ αλλά αυτό άλλαξε. Γενικά δεν ήταν κάτι που χρησιμοποιούνταν, επειδή σπάνια θα έβαζε κάποιος πίνακα και συνάρτηση με το ίδιο όνομα).
  • Όπως οι ρουτίνες έτσι και οι απλές Συναρτήσεις έχουν θέαση του οτιδήποτε μέσα σε ένα τμήμα ή μια κανονική συνάρτηση ή μια λάμδα συνάρτηση.
  • Η επιστροφή τιμής σε συνάρτηση γίνεται με το = (χωρίς να υπάρχει κάτι αριστερά του ίσον).
  • Το = χρησιμοποιείται και για ισότητα και για εκχώρηση τιμής. Υπάρχει το == για πραγματικούς για μειωμένη ακρίβεια, ώστε να βρίσκει ίσους όταν η διαφορά τους είναι ελάχιστη. Υπάρχει και ο <=> που δεν δίνει λογικό, αλλά δίνει μια από τρεις τιμές με το 0 για το ίσον. 
  • Για εκχώρηση τιμής υπάρχουν και τα <= και := που χρησιμοποιούνται για ειδικό σκοπό.
  • Υπάρχουν πίνακες με παρενθέσεις, αυτόματοι πίνακες (πχ το α=(1,2,3,4) δημιουργεί αυτόματο πίνακα και το α#αθρ() επιστρέφει το άθροισμα των αριθμητικών στοιχείων). Συναρτήσεις με το # στην αρχή γράφονται διαδοχικά σε μεταβλητές με δείκτη σε αυτόματο πίνακα σαν μια μορφή LINQ. Πριν την έκδοση 12 οι πίνακες ήταν μόνο τύπου Variant εξ ορισμού και το όνομα έκανε το διερμηνευτή να αποθηκεύει είτε αριθμό είτε αλφαριθμητικό. Από την έκδοση 12 μπορούμε να ορίσουμε πίνακες με τύπο. Πχ το Πίνακας Α(1 έως 10, -5 έως 5) ως Γράμμα θα δώσει πίνακα με αλφαριθμητικά μόνο, δυο διαστάσεων (μέχρι δέκα διαστάσεις μπορούμε να δώσουμε). Τα ονόματα πινάκων με $ ή % δεν παίρνουν το ως <τύπο>.
  • Ορισμός μεταβλητών με το τύπο στην αρχή, όπως Αριθμός (Decimal), Μακύς Μακρύς (Long Long), Μακρύς (Long), Ακέραιος (Integer), Ψηφίο (Byte), Λογιστικός (Currency), Διπλός (Double), Απλός (Single), Ημερομηνία (Date), Γράμμα (String), Λογικός (Booelan), Άτυπος (Variant). 
  • Η έκδοση 12 μπορεί να χρησιμοποιεί μεταβλητές Variant, όπου όποια εκχώρηση μπορεί να του αλλάξει τύπο. Όλες οι άλλες περιπτώσεις τύπων δεν αλλάζουν (εκτός αν δώσουμε σε ένα υπάρχον αριθμητικό τύπο (όχι αντικείμενο) ένα αντικείμενο, επειδή το αντικείμενο έχει προτεραιότητα, αλλά δεν επιδέχεται αλλαγή τύπου αντικειμένου). Γενικά αυτός ο τύπος χρησιμοποιείται σε πέρασμα με αναφορά σε COM αντικείμενο που μπορεί να γυρίσει αλφαριθμητικό ή αριθμό ή αντικείμενο.
  • Υπάρχουν τρία αντικείμενα που χρησιμοποιούν κοινό τύπο βάσης, και μπορούν να αλλάξουν το αντικείμενο μιας μεταβλητής, ο Σωρός τιμών (Stack), η Λίστα ειδών (List/Queue), και ο Αυτόματος Πίνακας (Tuple). Ο κοινός τύπος τους δίνει τη δυνατότητα να τραβάμε τα στοιχεία τους με αντικείμενα Επαναλήπτες. Η Τύπωσε (Print ή ?) εφαρμόζει άμεσα επαναλήπτη αν δώσουμε δείκτη σε πίνακα, ή πίνακα. Οπότε αν βάλουμε εδώ Α=(1,2,3,"οκ") και μετά δώσουμε το Τύπωσε Α θα πάρουμε και τα τέσσερα στοιχεία. Δείτε ότι ο αυτόματος πίνακας πήρε διάφορους τύπους). Αν όμως έχουμε αντικείμενο σε κάποιο στοιχείο τότε η Τύπωσε θα αφήσει μια κενή θέση  και θα προχωρήσει στο επόμενο στοιχείο. Η Τύπωσε χρησιμοποιεί στήλες, και αλλάζει αυτόματα γραμμή αν χρειάζεται άλλη στήλη και δεν υπάρχει.
  • Η Τύπωσε κάνει πολλά πράγματα, ακόμα και εικόνες εμφανίζει ως φόντο σε πλαίσια χαρακτήρων, και έχει εσωτερικές εντολές και συναρτήσεις.
  • Με τη χρήση του τύπου στην αρχή μπορούμε να φτιάξουν ενός ή δυο διαστάσεων πίνακες με αγκύλες [ ], πχ Ψηφίο Α[9] φτιάχνει πίνακα με Bytes, δέκα στοιχείων. Αν δώσουμε το Α[99]=10 τότε ο πίνακας θα μεγαλώσει σε 100 στοιχεία. Αυτοί οι τύποι πινάκων χρησιμοποιούνται για πέρασμα μέσω COM, σε εξωτερικά προγράμματα.
  • Από την Έκδοση 12 οι αριθμητικές εκφράσεις είναι ίδιες με τη Visual Basic 6 ως προς το χειρισμό των μοναδιαίων τελεστών + και -, έτσι το 2^-3^-4 (ή 2**-3**-4) δίνει το 0.99147913749. Πχ το 2^+3^+4 δίνει το 2.41785163922926E+24, ενώ το 2^3^4 δίνει το 4096 επειδή εκτελεί αυτό (2^3)^4, ενώ το 2^+3^+4 εκτελείται ως 2^(+3^(+4)).
  • Εξ ορισμού έχουμε πέρασμα με τιμή, αλλά με χρήση του & στο όνομα μεταβλητής τόσο στη κλήση όσο και σε μια διάβασε (read) στη μεταβλητή που θα διαβάσουμε, θα έχουμε αναφορά, δηλαδή η νέα μεταβλητή θα χρησιμοποιεί τη μνήμη και όλα τα χαρακτηριστικά της αναφερόμενης μεταβλητής. Μπορούμε να περάσουμε με αναφορά και στοιχείο πίνακα (σε τμήματα και συναρτήσεις). όπου δημιουργείται μια πρόσκαιρη μεταβλητή και αυτή θα γίνει αναφορά, και στην έξοδο ο διερμηνευτής θα συγχρονίσει τη τιμή (copy in copy out).
  • Η γλώσσα υποστηρίζει στατικές μεταβλητές (και αυτές στο πέρασμα με αναφορά έχουν copy in copy out).
  • Οι πίνακες είναι αντικείμενα και περνούν με ένα δείκτη. Όμως αν διαβάσουμε το δείκτη με όνομα με παρενθέσεις θα πάρουμε αντιγραφή, ενώ αν το διαβάσουμε με όνομα χωρίς παρενθέσεις θα πάρουμε δείκτη σε πίνακα.
  • Η γλώσσα υποστηρίζει αντικείμενα οριζόμενα από το χρήστη τα λεγόμενα Ομάδες. Με Κλάσεις μπορούμε να δημιουργούμε αντικείμενα, αλλά μπορούμε να δημιουργούμε και με αντιγραφή από αντικείμενο, ορίζοντας αντικείμενο άμεσα προσπελάσιμο με την εντολή Ομάδα. Έχουμε δυνατότητα για ιδιωτικά μέλη, δημόσια, και προσωρινά μέλη (πχ μπορούμε έναν κατασκευαστή να τον έχουμε προσωρινό, γιατί δεν θέλουμε να παραμείνει στο αντικείμενο).
  • Τα αντικείμενα μπορούν να υπάρχουν ως μεταβλητές και να αντιγράφονται ως έχουν, ή μπορούμε να έχουμε μεταβλητές που δείχνουν αντικείμενα, και να αντιγράφονται οι δείκτες. Στη πρώτη περίπτωση το "ανοικτό" ή επώνυνο αντικείμενο διαγράφεται στο πέρας εκτέλεσης του τμήματος ή της συνάρτησης που δημιουργήθηκε. Το κλειστό αντικείμενο διαγράφεται όταν δεν υπάρχει άλλος δείκτης να δείχνει σε αυτό. Κλειστά αντικείμενα έχουμε σε Σωρούς, Λίστες, Πίνακες, και μέσω δεικτών. Κατά αναλογία με τη C++, τα κλειστά αντικείμενα είναι αυτά του τύπου reference, ενώ τα ανοικτά είναι χωρίς reference. Ουσιαστικά η Μ2000 δεν δίνει ποτέ τον εσωτερικό δείκτη ενός ανοικτού αντικείμενου, και αυτού δίνει αν ζητηθεί μια ισχνή αναφορά (που δείχνει στο συγκεκριμένο όνομα, με πρόθεμα που το κάνει μοναδικό). Για το λόγο αυτό ένας δείκτης σε ομάδα μπορεί να είναι πραγματικός ή ισχνή αναφορά, και όπως και να έχει τον χρησιμοποιούμε το ίδιο. Πχ το Α.Χ δηλώνει το Χ μέλος του επώνυμου Α, ενώ το Β=>Χ δηλώνει το Χ μέλος του αντικειμένου που δείχνει το Β.
  • Εκφράσεις που έχουν αλφαριθμητικά πριν ή μετά από αριθμούς και τελεστές + κάνουν το τελικό αποτέλεσμα αλφαριθμητικό. Το "-"+123+"-" θα γίνει -123- ενώ το 123+"-"+567 θα γίνει 123-567. Η έκφραση "-"+123+"-"="-123-" θα δώσει Αληθές, γιατί μέχρι το = θα υπάρχει το αλφαριθμητικό και μετά θα δει τη σύγκριση ο διερμηνευτής και θα αναζητεί αλφαριθμητικό. Επίσης το "-"+123+"-"="-1"+"23-" θα δώσει Αληθές (τύπος Boolean).
  • Τα True και False, Αληθές/Αληθής, Ψευδές/Ψευδής δεν είναι Boolean, αλλά οι τιμές -1 για το true και 0 για το False (τύπος Διπλός). Δες: Κ=Αληθής:? Τύπος$(Κ) θα δώσει Double. Γενικά μη μηδενική τιμή γίνεται Αληθής ενώ μηδενική τιμή γίνεται Ψευδής όπου χρειάζεται να μετατραπεί ή να χρησιμοποιηθεί ως λογικός (Boolean). Όλες οι συγκρίσεις γυρίζουν τύπο Βoolean.

Τύποι Μεταβλητών

Η γλώσσα ξεχωρίζει τρεις διαφορετικούς κύριους τύπους, τον αριθμό πχ Α, τον ακέραιο Α% και το αλφαριθμητικό Α$. Μπορεί να έχει πίνακες και συναρτήσεις αυτών των τύπων. Οι πίνακες είναι σαν τις μεταβλητές, δηλαδή το Α()=Β() θα δώσει αντίγραφο του Β() στο Α(). Εδώ έχουμε "ρηχή" αντιγραφή, σε σχέση με αντικείμενα που τυχόν υπάρχουν με δείκτη ως στοιχεία πίνακα (αυτό σημαίνει ότι θα αντιγραφεί ο δείκτης, ενώ το αντικείμενο θα συνυπάρχει και το Α() και στο Β(), εξαίρεση υπάρχει στις Ομάδες, τα αντικείμενα της Μ2000, όπου αν έχουν καταχωρηθεί χωρίς δείκτη ομάδας, τότε θα έχουμε αντιγραφή ομάδας). Οι πίνακες μπορούν να αλλάζουν διαστάσεις και μέγεθος όποτε θέλουμε διατηρώντας όσα στοιχεία μπορούν να διατηρηθούν. Από την έκδοση 12 μπορούμε το Α να το ορίσουμε ως γράμμα (αλφαριθμητικό), όπως και σε ένα πίνακα (τύπου Άτυπος/Variant, που εξ ορισμού είναι οι πίνακες αν δεν δηλωθεί τύπος), το Α(4)="οκ" θα γράψει το αλφαριθμητικό στο Α(4). Σε παλαιότερες εκδόσεις έπρεπε να χρησιμοποιήσουμε το Α$(4)="οκ" και αν ο πίνακας ήταν ο Α() θα έπρεπε να δώσουμε το Ένωσε Α() στο Α$() ώστε να έβγαινε το Α$() ως αναφορά του Α() και έτσι με διαφορά στο όνομα βάζαμε ή βγάζαμε αλφαριθμητική τιμή.

  • Μπορούμε να έχουμε σταθερές καθώς και τιμές απαρίθμησης (enum) και αυτές είναι σταθερές.
  • Οι αριθμοί και οι ακέραιοι μπορούν να έχουν οποιοδήποτε αριθμητικό τύπο, αλλά εξ ορισμού είναι διπλοί (διπλής ακρίβειας πραγματικοί). Οι συγκρίσεις επιστρέφουν λογικό (boolean). Οι αριθμητικοί τύποι είναι οι ακέραιοι των 32 και 16 bit, o 29 ψηφίων Decimal (τον λέμε και απλά Αριθμό), ο Λογιστικός (Currency), o διπλός (double, διπλής ακρίβειας πραγματικός), ο απλός (single, απλής ακρίβειας πραγματικός) και άλλοι όπως αναφέρθηκαν πιο πάνω. Όταν ένας από αυτούς τους τύπους χρησιμοποιείται σε βασικό ακέραιο, τα τυχόν δεκαδικά μηδενίζονται, και η εκχώρηση τιμής γίνεται με χρήση της μισής μονάδας, έτσι το Α%/2 με Α%=1 θα δώσει 1 (το 0.5 θα γίνει 1). Υπάρχει η ακέραια διαίρεση ΔΙΑ και το υπόλοιπο ως ΥΠΟΛΟΙΠΟ και ΥΠΟΛ, καθώς και τα αντίσοιχα ΔΙΑ# , ΥΠΟΛ# και ΥΠΟΛΟΙΠΟ# για την ευκλείδεια διαίρεση. Η ακέραια διαίρεση γίνεται και σε πραγματικούς: Πχ το 5 υπόλοιπο .3 θα δώσει 0.2 και το 5 δια .3 θα δώσει 16 και πράγματι 16*.3+.2 δίνει 5. Δείτε ότι το 0.3 το δίνουμε και ως .3 χωρίς το 0 μπροστά.
  • Για τους τύπους Μακρύς Μακρύς (Long Long 64bit), Μακρύς (Long 32bit) και Ακέραιος (Integer 16bit) η ύψωση σε δύναμη δίνει το ίδιο τύπο  (ή σφάλμα), ενώ σε όλους τους άλλους δίνει Διπλό (Double). (Εδώ υπάρχει διαφορά με τη Visual Basic 6, επειδή αυτή δίνει πάντα Διπλό). Δοκιμάστε το ? 2^62, 2&&^62  (το && σημαίνει ότι το 2 είναι Long Long), θα δώσει τα 4.61168601842739E+18 και 4611686018427387904.
  • Ενώ οι μεταβλητές παίρνουν μια φορά τύπο και δεν αλλάζουν, οι πίνακες μεταβλητών δύναται να έχουν οποιονδήποτε τύπο ανά στοιχείο (εκτός αν ορίσουμε τύπο, με όνομα χωρίς επίθεμα, πχ Πίνακας Α(1 έως 100) ως Ακέραιος). Ο τρόπος που διαβάζεται, από πίνακα ή εκχωρείται σε πίνακα, το στοιχείο έχει να κάνει με το όνομα του πίνακα. Η γλώσσα μπορεί να φτιάχνει ονόματα άλλου τύπου για ίδιο πίνακα, δηλαδή να φτιάχνει ένα άλλο όνομα σε άλλο τύπο που να συνδέει το περιεχόμενο ενός υφιστάμενου πίνακα. Από την έκδοση 12 υπάρχει ο Άτυπος (Variant) που φτιάχνει μεταβλητές που αλλάζουν τύπο στην εκχώρηση τιμής. 
  • Σύνθετες μεταβλητές είναι οι ομάδες, οι λάμδα συναρτήσεις και τα γεγονότα. Οι λάμδα συναρτήσεις είναι μεταβλητές που περιέχουν μια σειρά "κλεισιμάτων" και μια συνάρτηση που έχει θέαση στα κλεισίματα. Τα γεγονότα είναι λίστες συναρτήσεων με συγκεκριμένη "υπογραφή΄", που δηλώνει τι και πόσες παραμέτρους δέχεται στη κλήση, και σε κάθε κλήση καλεί όλες τις περιεχόμενες συναρτήσεις. Οι ομάδες είναι τα κύρια αντικείμενα της Μ2000 τα οποία είναι σαν προγράμματα, έχουν μέλη μεταβλητές, πίνακες, τμήματα, συναρτήσεις, ομάδες και ιδιότητες (ομάδες που επιστρέφουν ή δέχονται τιμές ή και τα δύο), καθώς επίσης μπορούν να ορίσουν και τελεστές πράξεων.
  • Καταχωρητές λέγονται τα αντικείμενα που περιλαμβάνουν στοιχεία, και έχουν τρεις κύριους τύπους, τους Πίνακες (στοιχεία με δείκτες, από 0 έως 10 διαστάσεις, μπορούμε να ορίζουμε τα όρια της κάθε διάστασης, ακόμα και με αρνητικούς αριθμούς), τις Καταστάσεις (λίστες με κλειδί/κλειδί ως τιμή, ή κλειδί/τιμή, όπου κλειδιά είναι αριθμοί ή αλφαριθμητικά και τιμές οτιδήποτε εκτός από τμήματα, αλλά μπορούμε να έχουμε ομάδες που έχουν τμήματα), και τους σωρούς τιμών (ειδικές στοίβες) όπου τα στοιχεία μπορούν εύκολα να αλλάξουν σειρά, να μετακινηθούν.
  • Ειδική περίπτωση καταχωρητή είναι οι αυτόματοι πίνακες, έτσι το Α=(1,2,3) κάνει το Α να δείχνει σε ένα πίνακα με τρία στοιχεία, ενώ το Β=(1,) να δείχνει σε ένα πίνακα ενός στοιχείου, και το Γ=(,) να δείχνει σε ένα κενό πίνακα. Το Δ=((1,2),(3,4)) κάνει το Δ να έχει ένα πίνακα με κάθε στοιχείο δυο πίνακες. Οι καταχωρητές που γράφονται σε μεταβλητές χωρίς παρενθέσεις είναι δείκτες, δηλαδή μπορούμε να έχουμε δυο ή περισσότερες μεταβλητές που να δείχνουν στον ίδιο καταχωρητή. Οι δείκτες αυτοί και να περάσουν με τιμή σε κλήση, θα περάσουν ως αντίγραφο δείκτη, έτσι θα έχουμε μια μορφή περάσματος με αναφορά, χωρίς όμως να αλλάξει ο δείκτης στο σημείο πριν την κλήση. Κλήσεις με αναφορά γίνονται με το & στο όνομα κατά τη κλήση και κατά το διάβασμα της αναφοράς στη πλευρά αυτού που καλούμε. Δεν μπορούμε να περάσουμε με τιμή κάτι που ζητάμε με αναφορά.
  • Για τους καταχωρητές υπάρχει η Κάθε() που βγάζει αντικείμενο που διατρέχει τον καταχωρητή σε μια δομή Ενώ. Δηλαδή ενώ η Ενώ παίρνει κανονικά μια έκφραση λογική, το αντικείμενο που βγάζει η Κάθε συνδέει το αντικείμενο που θέλουμε να διατρέξουμε τα στοιχεία του, και αποδίδει αληθές όταν υπάρχουν και άλλα, ή ψευδές όταν τερματίσει η μέτρηση. Η Ενώ παίρνει λίστα συνθηκών με το κόμμα, που αντιστοιχεί στο και ή AND, για τέτοια αντικείμενα, ώστε με μια Ενώ να έχουμε παράλληλη μέτρηση, μέχρι ένα τουλάχιστον από την λίστα να βγει ψευδής. Μπορούμε τα αντικείμενα αυτά να τα αναπρογραμματίζουμε μέσα στην Ενώ, γιατί και αυτά είναι με δείκτη, και στην επόμενη εκτέλεση θα βρει ο διερμηνευτής το νέο αντικείμενο. Έτσι μπορούμε να αλλάζουμε βήμα μέτρησης.
  • Ένας άλλος τρόπος να ορίζουμε τιμές είναι οι διαρθρώσεις μνήμης (buffers). Εδώ έχουμε να κάνουμε με μνήμη και το πώς την διαρθρώνουμε, σε επίπεδο byte. Μπορούμε να δώσουμε κάποιο απλό τύπο μνήμης, επί έναν αριθμό, ώστε να δώσει έναν πίνακα αυτού του τύπου, ή να φτιάξουμε μια δομή (structure) με άλλες δομές μέσα, και με ενώσεις ακόμα (unions), και να ορίσουμε μια διάρθρωση ν στοιχείων της δομής αυτής. Οι τύποι Ψηφίο (byte 8bit), Ακέραιος (Integer 16 bit) και Μακρύς (long 16bit) είναι χωρίς πρόσημο, δηλαδή από 0 και πάνω. Μπορούμε να ορίζουμε στις δομές ένα τύπο με το επί, για να δώσουμε πίνακα εντός της δομής. Οι δομές είναι τύπου Κατάστασης και επιστρέφουν το διάστημα από την αρχή (offset) για κάθε όνομα.
  • Οι διαρθρώσεις είναι αντικείμενα τα οποία χειρίζονται μπλοκ μνήμης, και μπορούν να αυξομειώνουν την μνήμη όταν το ζητάμε. Μια διάρθρωση με 10 διπλούς έχει μνήμη 10*8 byte, για την καταχώρηση αυτών των αριθμών και μπορούμε να ξέρουμε επακριβώς την θέση μνήμης κάθε αριθμού. Ένας πίνακας με δέκα διπλούς, θέλει 10*16 byte γιατί γράφονται σε μεταβλητές του συστήματος OLE τύπου Varian και δεν μας δίνεται η διεύθυνσή τους. Οι διαρθρώσεις χρησιμοποιούνται και σε κλήσεις εξωτερικών συναρτήσεων τύπου dll, όπου ζητείται δείκτης σε μνήμη. Ειδική περίπτωση διάρθρωσης είναι η τύπου Κώδικα όπου μπορεί να εκτελεί κώδικα σε γλώσσα μηχανής (επικίνδυνο αυτό για κόλλημα ή κρασάρισμα του προγράμματος). Οι διαρθρώσεις κώδικα κατά την εκτέλεση κλειδώνουν την εγγραφή σε αυτές, και για το  λόγο αυτό μόνο σταθερές μπορούν να περιέχουν. 
  • Ένα πρόγραμμα γράφεται σε ένα ή περισσότερα τμήματα. Τμήματα μπορούν να έχουν δικά του τμήματα και οτιδήποτε άλλο. Σε κάθε τμήμα η θέαση μεταβλητών (scope) περιορίζεται στο επίπεδο του τμήματος και το γενικό. Ότι όνομα-αναγνωριστικό- δημιουργούμε σε ένα τμήμα, χάνεται με το πέρας εκτέλεσης εκτός από απλές μεταβλητές που μπορούν να δηλωθούν ως στατικές. Το ίδιο ισχύει και για τις συναρτήσεις χρήστη, είναι απομονωμένες. Σε κάθε τμήμα ή και συνάρτηση μπορούμε να έχουμε ρουτίνες. Οι ρουτίνες είναι δυο ειδών. Οι απλές, με ένα όνομα και οι ρουτίνες με παρενθέσεις. Οι απλές ρουτίνες είναι σαν μέρος του τμήματος, που απλά βάζουμε μια ετικέτα και στο τέλος τους την Επιστροφή για να τις καλούμε όσες φορές θέλουμε από διάφορα σημεία του τμήματος. Οι ρουτίνες με παρενθέσεις έχουν την ιδιότητα του τμήματος να διαγράφουν ότι δημιουργούν, μπορούν να δημιουργούν τοπικές μεταβλητές και έχουν θέαση σε ότι έχει θέαση και το τμήμα που τις καλεί. Υπάρχει ειδική κλήση  συναρτήσεων και τμημάτων, με το Κλήση τοπικά που καλεί τμήματα και συναρτήσεις όπως και τις ρουτίνες με παρενθέσεις, δηλαδή χωρίς τα ονόματά τους να χρησιμοποιούνται ως νέος "σκοπός", αλλά να παρέχεται το όνομα αυτού που το καλεί. Τέτοιου τύπου κλήση είναι η κλήση γεγονότων αντικειμένων τύπου COM (αντικείμενα συνεργαζόμενα με την γλώσσα) και του συστήματος παραθύρων της Μ2000.
  • Οι συναρτήσεις δεν δηλώνουν τύπο επιστροφής εκτός από το βασικό, που φαίνεται στο όνομα. Μια συνάρτηση Α() δεν θα γυρίσει αλφαριθμητικό, αλλά μπορεί να γυρίσει πίνακα. Μια εντολή =1,2,3 θα γυρίσει πίνακα με τρεις αριθμούς, ενώ αν θέλουμε μείξη τιμών το =("α","β","γ") θα γυρίσει ένα tuple ή αυτόματο πίνακα με τρία αλφαριθμητικά.
  • Αναφέρθηκε παραπάνω η χρήστη του & για το πέρασμα με αναφορά. Μπορούμε να περάσουμε στατικές και στοιχεία πίνακα με αναφορά, αλλά και για τις δυο περιπτώσεις ο διερμηνευτής φτιάχνει μεταβλητές που τις δίνει με αναφορά και στην επιστροφή ενημερώνει ανάλογα τις στατικές  και τα στοιχεία πίνακα (copy in/copy out). Ειδικά για τα στοιχεία πίνακα αν ο πίνακας έχει μεταβληθεί στο μεταξύ, δεν βγαίνει λάθος, απλά ο διερμηνευτής βλέπει ότι δεν υπάρχει το στοιχείο που πρέπει να ενημερώσει και το προσπερνάει. Σε άλλες γλώσσες η αναφορά σε στοιχείο πίνακα κλειδώνει τον πίνακα, εδώ δεν υπάρχει κλείδωμα.
  • Ειδική περίπτωση κώδικα είναι αυτός που περιέχεται σε Νήμα. Τα νήματα είναι μέρη τμημάτων ή συναρτήσεων που εκτελούνται ανά τακτά χρονικά διαστήματα. Τα μέρη αυτά έχουν θέαση στο μέρος που δημιουργήθηκαν, έχουν δικές τους στατικές μεταβλητές και δικό τους σωρό τιμών. Μπορούμε από άλλο νήμα να εκτελέσουμε εντολές που θα αλλάξουν κατάσταση, δηλαδή κάποιες στατικές μεταβλητές και το δικό του σωρό τιμών. Τα νήματα έχουν αριθμούς για να τα χειριζόμαστε, τους οποίους κρατάμε σε μεταβλητές.
  • Εκτός από τις δομές επιλογής, επανάληψης και διακλάδωσης, έχουμε και δομές που συνδέονται με χρονισμό καθώς και με ύπαρξη ή όχι άλλων νημάτων.  Η  Κάθε ορίζει ένα μπλοκ εντολών που εκτελείται ανά τακτά χρονικά διαστήματα, χωρίς να είναι νήμα. Η Κύριο.Έργο είναι ένα νήμα που εκτελείται όσο υπάρχουν άλλα νήματα. Η Μετά ορίζει ένα νήμα που θα εκτελεστεί μετά από κάποιο χρονικό διάστημα μια φορά.
  • Η γλώσσα υποστηρίζει οκνηρή αποτίμηση αν θέλουμε, καθώς και πέρασμα συναρτήσεων με αναφορά (και συναρτήσεων ομάδων με αναφορά). Επίσης υπάρχει τρόπος να περάσουμε ένα μέρος τμήματος με αναφορά ώστε όταν τρέχει να τρέχει σαν να είναι στο τμήμα (χωρίς να έχει τις στατικές και το σωρό τιμών του τμήματος, αλλά με θέαση μεταβλητών και άλλων τμημάτων και συναρτήσεων του τμήματος). Αυτός ο τρόπος ορίζει αυτό που λέμε call back.
  • Επιπλέον, σε ότι αφορά τον τρόπο κλήσης, μπορούμε να καλέσουμε ένα τμήμα αλλάζοντας ένα ή περισσότερα εσωτερικά τμήματα κατά την κλήση με ένα άλλο που θα δώσουμε στη κλήση (αυτό λέγεται διακόσμηση ή decoration). Έτσι ένα τμήμα μπορεί να εκτελεστεί με διαφορετικό τρόπο αν θέλουμε, και έχουμε σχεδιάσει να μπορεί να αλλάζει.

Το περιβάλλον της γλώσσας

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

  • Προκαθορισμένα αντικείμενα περιέχονται στη φόρμα της κονσόλας. Αυτή αποτελείται από αρκετά επίπεδα. Το πίσω επίπεδο, Περιθώριο, που δύναται να καταλαμβάνει όλη την οθόνη του υπολογιστή, το Επίπεδο που είναι αυτό που γράφουμε όταν ανοίγει η άμεση εκτέλεση εντολών, τα 32 επίπεδα από το Επίπεδο 1 μέχρι το Επίπεδο 32 τα οποία λειτουργούν σαν το βασικό ή και με την δυνατότητα των διαφανειών, όπου ορίζονται τα σημεία πλήρους διαφάνειας (λέγονται και Παίκτες και αναλογούν σε hardware sprites), το επίπεδο του Εκτυπωτή, και η Επιφάνεια. Το επίπεδο του εκτυπωτή έχει μέγεθος σελίδας εκτυπωτή, και μπορεί να οριστεί ο προσανατολισμός του. Η επιφάνεια είναι μια φόρμα πίσω από τη βασική φόρμα του περιβάλλοντος και καθορίζει το βάθος διαφάνειας της βασική φόρμας. Δηλαδή αν αλλάξουμε διαφάνεια στην βασική φόρμα η επιφάνεια ορίζει το αν θα βλέπουμε κάτι πίσω από τη βασική φόρμα ή ένα χρώμα πχ το μαύρο ή μια συγκεκριμένη εικόνα. Στην επιφάνεια δεν μπορούμε να γράψουμε.
  • Τα καθορισμένα από το χρήση επίπεδα είναι οι φόρμες χρήστη. Αν ορίσουμε μια φόρμα Φόρμα1 τότε θα υπάρχει το Επίπεδο Φόρμα1. Σε κάθε φόρμα χρήστη μπορούμε να χρησιμοποιούμε στοιχεία φορμών, άλλα για λίστες και άλλα για κείμενο μιας ή περισσοτέρων γραμμών, καθώς και το σύνθετο να έχουμε σε ένα στοιχείο και μια γραμμή κειμένου και μια αναδυόμενη λίστα. Αυτά τα στοιχεία τα δουλεύουμε με γεγονότα, με συναρτήσεις εξυπηρέτησης γεγονότων. Μπορούμε να φτιάξουμε πίνακες ομοειδών φορμών με πίνακες ομοειδών στοιχείων και με μια συνάρτηση εξυπηρέτησης να λαμβάνουμε τον αριθμό φόρμας και τον αριθμό στοιχείου φόρμας. Οι φόρμες μπορούν να ανοίγουν ως κυρίαρχες (modal) ώστε οι προηγούμενες από αυτές να μην μπορούν να επιλεχθούν από το χρήστη αν δεν κλείσουμε την κυρίαρχη φόρμα. Μπορούμε να έχουμε πολλαπλές κυρίαρχες φόρμες. Όλο το σύστημα διεπαφής με τις φόρμες χρήστη είναι πρωτότυπο στη Μ2000 (γράφτηκε για την Μ2000).
  • Σε κάθε επίπεδο μπορούμε να εκτελέσουμε εντολές που τυπώνουν γράμματα χωρίς να αλλάζουν το φόντο, να τυπώνουν με καθαρισμό γραμμής (μια εντολή το κάνει η Τύπωσε Πάνω). Ως προς το πως τυπώνουμε, υπάρχει η Τύπωσε που σχετίζεται με στήλες και το δρομέα χαρακτήρων, και μπορεί ανά στήλη να γράφει με την στοίχιση που θέλουμε, περιορίζοντας το αποτέλεσμα στη γραμμή, η Αναφορά χωρίς στήλες όπου αναπαράγει κείμενο  με στοίχιση ακόμα και πλήρη (και από αριστερά και από δεξιά) για όσες γραμμές θέλουμε ή όσες χρειάζονται αν δεν το ορίσουμε, ορίζοντας το πλάτος που θέλουμε σε χαρακτήρες ή σε διάστημα εικονοστοιχείων, η Επιγραφή που γράφει με διάφορους τρόπους, ακόμα και με γωνία, βάσει δρομέα γραφικών
  • Τα επίπεδα εκτός από αυτό του εκτυπωτή έχουν λειτουργία χωριστής οθόνης, όπου ορίζουμε ένα πάνω μέρος στατικό και ένα κάτω μέρος με δυνατότητα ολίσθησης. Επίσης μπορούμε να ορίζουμε περιοχή εμφάνισης ώστε ότι είναι εκτός περιοχής να μην αλλάξει (κάτι σαν μάσκα δηλαδή). Υπάρχουν δυο σύνολα εντολών, ένα για γραφικά 2 διαστάσεων, με λειτουργία καρτεσιανών και πολικών συντεταγμένων, καθώς και με επιλογή ομαλών γραμμών (GDI+) ή γρήγορων γραμμών (GDI32) και ένα για εικόνες, όπου μπορούμε να φορτώσουμε εικόνες ή να παράγουμε με αντιγραφή μέρους από το επίπεδο που θέλουμε, σε αλφαριθμητικά ή σε διαρθρώσεις μνήμης, και να τις χειριστούμε ως προς την εμφάνισή τους με το μέγεθος που θέλουμε, την αλλαγή αναλογίας ύψους/πλάτους, την περιστροφή και την διαφάνειά τους, και σε ένα χρώμα ως προς το 100% και σε όλη την εικόνα ως διαφάνεια εικόνας.
Περιλαμβάνεται ένα απλό σύστημα χρηστών, όπου με μια εντολή π.χ. Χρήστης ΑΛΕΚΟΣ αλλάζει ο χρήστης, αλλάζοντας τον φάκελο με τα αρχεία και τους υποφακέλους για τον χρήστη ΑΛΕΚΟ και επιπλέον όλες οι προσβάσεις για εγγραφή στο δίσκο περιορίζονται σε αυτόν το φάκελο και τους υποφακέλους (και στο πρόχειρο). Επιπλέον μπορεί κανείς σε ένα αρχείο Desktop.inf να βάλει εντολές που θα τρέχουν με την είσοδο στον χρήστη, ώστε να αλλάζουν τα χρώματα, το μέγεθος και η γραμματοσειρά, και το διάστιχο μεταξύ των γραμμών χαρακτήρων

Περιλαμβάνεται βοήθεια όπου με την εντολή  βοήθεια, ή την βοήθεια και μια λέξη  ή το ctrl+F1 ανοίγει η βοήθεια (στο διορθωτή μαρκάρουμε μια λέξη και με το crl+F1 βλέπουμε τον ορισμό της). Η βοήθεια υπάρχει και στα ελληνικά για τις ελληνικές εντολές και αγγλικά για τις αγγλικές.

Επιπρόσθετα αντικείμενα:

Στην κονσόλα, στη βασική φόρμα, υπάρχει αντικείμενο που δείχνει σελίδες html, και υπάρχει τρόπος να δείχνουμε φόρμες και να παίρνουμε αποτελέσματα, χωρίς χρήση server. Υπάρχει αντικείμενο που δείχνει βίντεο. Υπάρχει αντικείμενο που δείχνει μια αναδυόμενη λίστα για επιλογές (δουλεύει σύγχρονα, δηλαδή περιμένει την επιλογή μας, και ασύγχρονα, να πέρνει διαδοχικά πολλές επιλογές πριν κλείσουμε την λίστα). Για αναπαραγωγή ήχων και φωνής χρησιμοποιούμε ειδικές εντολές. Για ήχους μπορούμε να παίξουμε ένα αρχείο ήχου σύγχρονα ή ασύγχρονα, να παίξουμε νότες με το εσωτερικό μεγάφωνο - αυτό κάνει το διερμηνευτή να περιμένει την εκτέλεση της νότας, βάσει διάρκειας που δίνουμε. Υπάρχουν εντολές που δημιουργούν νήματα για το Midi, για να στέλνουμε κομμάτια μουσικής (γραμμένα σε αλφαριθμητικό με έναν συμβολικό τρόπο)  ανά φωνή με επιλογή οργάνου, τα οποία παίζουν στο περιθώριο.

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

Υπάρχουν τα αντικείμενα: Μαθηματικά που δίνει αρκετές συναρτήσεις μαθηματικών, και για 3d σχεδίαση. Πληροφορίες που δίνει πληροφορίες για το σύστημα, καθώς και άλλα όπως το Σταθμός που δημιουργεί Socket για συνδέσεις TCP/IP και το οποίο δουλεύει με γεγονότα.

Η γλώσσα χειρίζεται Έγγραφα (κείμενα), προγραμματιστικά, με τον τύπο Έγγραφο που ενώ φαίνεται ως αλφαριθμητικό εσωτερικά είναι αντικείμενο με μια διπλή συνδεδεμένη λίστα παραγράφων, όπου κάθε παράγραφος είναι ένα αλφαριθμητικό. Στη πράξη μπορεί να είναι περισσότερα, γιατί αυτό βοηθάει να ξεχωρίζουν οι γραμμές μιας παραγράφου στον διορθωτή, όταν έχουμε αναδίπλωση λέξεων (εξ ορισμού έχουμε και αλλάζει με το F1). Ένα αρχείο κειμένου μπορεί να φορτωθεί ή να σωθεί με μια εντολή και με επιλογή τρόπου ANSI (βάζουμε και κωδικοσελίδα αν θέλουμε), UTF-8, UTF-16LE και UTF-16BE, ενώ διαβάζει αυτόματα το σύστημα κατά την φόρτωση, καθώς και το σύστημα αλλαγών γραμμών. Υπάρχουν εντολές για σώσιμο σε υπάρχον αρχείο με συγχώνευση (γράφεται στο τέλος), και για φόρτωση αρχείου σε υπάρχον έγγραφο, γράφεται και αυτό στο τέλος του εγγράφου.

Χειρισμός Αρχείων

Υπάρχει χειρισμός αρχείων κειμένων κατά γραμμή με την Τύπωσε και την Γράψε (αυτή βάζει ειδικούς χαρακτήρες, και φτιάχνει CVS αρχεία), τόσο σε μορφή ANSI (8bit) όσο και σε Unicode (16bit UTF-16LE). Τα αρχεία μπορούν να είναι για εισαγωγή, εξαγωγή, συμπλήρωση ή πεδία.
Επίσης μπορούμε να χειριστούμε και δυαδικά αρχεία με χρήση διαρθρώσεων (γράφουμε ή διαβάζουμε όσο το μήκος της διάρθρωσης).
Ειδικά για τις διαρθρώσεις έχουμε εντολή που παίρνει ένα αρχείο και γυρίζει μια νέα διάρθρωση με όλο το αρχείο.
Μπορούμε να συμπεριλάβουμε στο κώδικα δυαδικά δεδομένα σε μορφή Base64 την οποία εφαρμόζει άμεσα (απλά λέμε ποιο αρχείο θέλουμε και μας το φέρνει το σύστημα στο κείμενο σε μορφή Base64)

Μέγεθος Αρχείων/Μνήμης και Αυλοί.
Το μέγεθος αρχείων που μπορεί να χειριστεί η εφαρμογή του διερμηνευτή της Μ2000 πρακτικά είναι απεριόριστο (>4Gbytes). Η μνήμη όμως που μπορεί να χειριστεί είναι το πολύ 2Gbyte (32bit εφαρμογή). Μπορούμε όμως να τρέχουμε πολλές εφαρμογές της Μ2000, ακόμα και να επικοινωνούν μεταξύ τους με σύστημα Πελάτη Εξυπηρετητή που φτιάχνουμε με Αυλούς (named pipes).

Χειρισμός βάσεων δεδομένων

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

Χειρισμός Σειριακών Θυρών
Υπάρχει αντικείμενο με γεγονότα για τη χρήση σειριακών θυρών. Υπάρχει πρόγραμμα στο Info που δείχνει πως συνδέουμε ένα Arduino τσιπάκι μέσω σειριακής και τι πρέπει να βάλουμε στο Arduino για να έχουμε επικοινωνία αμφίδρομη (να στέλνουμε εντολές και να βλέπουμε μηνύματα).

Έλεγχος Εκτέλεσης - Σφάλματα

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

  • Όταν συμβαίνει ένα λάθος εμφανίζεται μήνυμα. Σπάνια δεν υπάρχει μήνυμα, όπου στο κώδικα υπάρχει χαρακτήρας μη αποδεκτός και στο σημείο ο διερμηνευτής περιμένει τερματισμό εντολής το δέχεται ως τερματισμό κώδικα, χωρίς να αναφέρει λάθος. Αυτά τα λάθη φαίνονται με την έλεγχο εκτέλεσης. Μπορούμε τα λάθη να τα ελέγχουμε κατά την εκτέλεση με την δομή Δες. Υπάρχει περίπτωση το λάθος να είναι στο κώδικα της γλώσσας, και αυτό το θα μας το δείξει ο διερμηνευτής (αυτά βγαίνουν πάντα στα αγγλικά). Αν έχουμε επιλέξει Ελληνικά τότε τα μηνύματα λάθους του διερμηνευτή θα είναι στα ελληνικά αλλιώς θα είναι στα αγγλικά. Υπάρχει έλεγχος υπερχείλισης σε ακέραιους 32 και 16 bit. Υπάρχει έλεγχος ορίων στους πίνακες. Υπάρχει έλεγχος διπλού κλειδιού στις Καταστάσεις (εκτός του τύπου Ουράς, που δέχεται διπλά κλειδιά). Και στους σωρούς δεν μπορούμε να ζητάμε να φέρουμε το 15ο στοιχείο στη κορυφή όταν δεν υπάρχει 15ο στοιχείο. Μπορούμε στις παραμέτρους να ζητάμε συγκεκριμένο τύπο και εδώ θα έχουμε έλεγχο λάθους.
  • Αν έχουμε μια γενική Α και στο τμήμα δώσουμε το Α=5 τότε το Α θα είναι τοπικό, δεν θα αλλάξει η τιμή της γενικής. Αν δώσουμε το Α<=5 τότε θα αλλάξει η τιμή της γενικής. Αν πριν την εκχώρηση δώσουμε το Α++ θα αυξηθεί κατά 1 η γενική. Γενικά μπορεί να μην φανεί λάθος ενώ νομίζουμε ότι χειριζόμαστε μια γενική. Ο διερμηνευτής, επειδή δίνει προτεραιότητα στις τοπικές, θα δουλέψει με τις νέες τιμές και το πιθανότερ είναι να μην βγει λάθος. Η εκχώρηση τιμής με το <= δουλεύει για τις γενικές και τα μέλη ομάδων μέσα σε συναρτήσεις μελών ομάδων. Στους πίνακες η εκχώρηση μαζικών τιμών γίνεται με το :=, έτσι το Πίνακας Α(10) : Α(3):=1,2,3 θα βάλει από το Α(3) τις τιμές 1, 2, 3. Στις άλλες θέσεις δεν θα υπάρχει αριθμός, αλλά θα λογαριάζεται σε εκφράσεις το 0. Μια Τύπωσε Τύπος$(Α(0)) θα μας δώσει το Empty δηλαδή κενός (είναι υποτύπος μιας τύπου Variant μεταβλητής). Μια Τύπωσε Α() θα δώσει μερικές κενές στήλες και μόνο σε τρεις τα 1, 2 και 3. Η Τύπωσε δίνεται και ως ?
  • Στις διαρθρώσεις μνήμης αν δώσουμε κάτι εκτός περιοχής, είτε την αρχή του είτε σε μέγεθος, επειδή γίνεται έλεγχος μας επιστρέφει μήνυμα λάθους (οι διαρθρώσεις φτιάχτηκαν με σκοπό να μην πέφτει το σύστημα από διάβασμα ή γράψιμο ανύπαρκτης μνήμης).
  • Το πλήκτρο Esc διακόπτει το πρόγραμμα. Διακόπτει και τα νήματα. Αυτό το πλήκτρο μπορεί να γίνει ανενεργό με την εντολή Διαφυγή. Το ctrl+C κάνει διακοπή αφού μας ρωτήσει αν θέλουμε. Το Break κάνει διακοπή, πάλι με ερώτηση, σβήνοντας το πρόγραμμα- εκτός και αν έχουμε κάποια φόρμα χρήστη, η οποία δεν αφήνει άμεσα να γίνει η διακοπή, αλλά θα γίνει όταν το μήνυμα πάει στην κονσόλα (η κονσόλα είναι η αρχική οθόνη όπου δίνουμε εντολές άμεσα, όπως εκεί που συγγράφουμε τα τμήματα και τις συναρτήσεις μας).


Συνδεσιμότητα

Η γλώσσα Μ2000 μπορεί να δημιουργεί οποιοδήποτε αντικείμενο των Windows είναι διαθέσιμο και μπορεί να δημιουργηθεί χωρίς ειδική άδεια (κάτι σαν κωδικός). Μπορούμε να δούμε τι έχει ένα αντικείμενο, σε ιδιότητες και μεθόδους. Μπορούμε να καλέσουμε μεθόδους, καθώς και να αλλάξουμε ιδιότητες ή να διαβάσουμε ιδιότητες ή να ορίσουμε μεταβλητές συνδεδεμένες με ιδιότητες. Αν κάποια αντικείμενα διαθέτουν γεγονότα μπορούμε να τα διαχειριστούμε ορίζοντας το αντικείμενο με γεγονότα. Υπάρχει το παράδειγμα textout που με χρήση γεγονότων από το αντικείμενο των Windows για την ομιλία, να γράφουμε κάθε λέξη που προφέρει, την στιγμή που την προφέρει.
Μπορούμε να συνδέσουμε εξωτερικές βιβλιοθήκες dll, και των Windows, και της C (διαφέρει ο τρόπος κλήσης συναρτήσεων). Στην βοήθεια της όρισε υπάρχουν δυο παραδείγματα, το ένα ανοίγει ένα unicode message box των windows, και το άλλο καλεί την συνάρτηση printf της C.

Αρχείο Εγκατάστασης

Στο αρχείο εγκατάστασης υπάρχει το αρχείο info.gsb, ένα αρχείο περίπου 700kb, με έναν αριθμό τμημάτων τα οποία είναι παραδείγματα για τη γλώσσα.
Κατά την εγκατάσταση εμφανίζεται ένα μήνυμα στα αγγλικά και στο κάτω μέρος του μηνύματος φαίνεται πώς μπορούμε να φορτώσουμε το τμήμα αυτό (και με το F1 να το σώσουμε στο φάκελο του χρήστη). Αυτό το πρόγραμμα με το που φορτώνει δείχνει μια σελίδα με πληροφορίες και προγραμματίζει τα πλήκτρα λειτουργιών F1 έως  F12 (και επιπλέον μερικά με συνδυασμό SHIFT) για να εμφανίζει άμεσα το πρόγραμμα.

Δείτε το σκάκι!

Εικόνες από προγράμματα σε Μ2000




































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

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

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