Γλώσσα Προγραμματισμού Μ2000 έκδοση 8

Ξεκίνησε από bugman, 24 Ιουλ 2015, 11:59:33 ΜΜ

« προηγούμενο - επόμενο »

bugman

#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 και εύκολα μπορούμε να φτιάχνουμε φόρμες με στοιχεία ελέγχου (τα οποία παρέχει η γλώσσα και είναι φτιαγμένα σε αυτήν και εμφανίζονται το ίδιο σε κάθε λειτουργικό).

bugman


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

bugman

#48
Εκδόθηκε διαδικτυακά ο σύντομος οδηγός της Μ2000. Γίνεται αναφορά στα υποδείγματα προγραμματισμού, και περισσότερο στα βασικά, το Προστακτικό Προγραμματισμό, το Συναρτησιακό, τον αντικειμενοστραφή Προγραμματισμό και τον Με γεγονότα Προγραμματισμό.
Αναφέρεται στην έκδοση 9.8 αναθεώρηση 13, την τελευταία ως σήμερα.
Υπάρχει σε pdf και σε Epub.

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

bugman

Επειδή γίνεται λόγος για αντικείμενα στη νέα ύλη, σκέφτηκα και έγραψα μια ανάρτηση στο 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, απλό παράδειγμα

bugman

Έφτιαξα ένα επτασέλιδο pdf, που δείχνει μέσα στις σελίδες του μια ιδέα από τη Μ2000.
Θα ήθελα τις εντυπώσεις σας!

bugman

Ολοκληρώθηκε η έκδοση 9.8 της Μ2000 (τελική αναθεώρηση 40). Στο παρεχόμενο info.gsb μπήκε και ένα τμήμα ΓΛΩΣΣΑ το οποίο δημιουργεί ένα παραθυρικό διορθωτή της ΓΛΩΣΣΑΣ, με χρωματισμό εντολών και εκτέλεση με κλήση του γλώσσα.exe. Επίσης υπάρχει το τμήμα cs που δημιουργεί έναν παραθυρικό διορθωτή για την c# και μπορούμε από το μενού να επιλέξουμε μετάφραση και εκτέλεση.(στην αρχή μας ζητάει να του υποδείξουμε ποιο .Net framework θέλουμε). Υπάρχει και ο mEditor και αυτός παρόμοιος διορθωτής (editor), για την Μ2000, με ταυτόχρονη εμφάνιση σε ξεχωριστό EditBox βοήθειας για εντολές που επιλέγουμε με απλό κλικ.

Στη  συνημμένη εικόνα φαίνονται οι τρεις διορθωτές (τρέχει ο καθένας σε ξεχωριστό διερμηνευτή Μ2000), καθώς και δυο εφαρμογές σε κονσόλα της Μ2000, η μια με αλλαγή σχήματος σε κυκλικό και με διαφάνεια (ένα ρολόϊ).

bugman

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

bugman

#53
Για όποιους τους ενδιαφέρει, έχω ανεβάσει την 9.9 αναθ. 1 και περιλαμβάνει πληθώρα προγραμμάτων, και ορισμένα παιχνίδια όπως:

  • Chessgame: Σκάκι, χωρίς AI, παίζει για δυο παίκτες με όλους τους κανόνες και μπορούμε να πάμε, όπως επίσης μπορούμε να δώσουμε με ένα αλφαριθμητικό κατά Forsyth–Edwards Notation (FEN) την τρέχουσα θέση (κοντά στις 1000 γραμμές κώδικα). Το πρόγραμμα στο τέλος της παρτίδας δίνει στο πρόχειρο όλες τις κινήσεις σε FEN σειρές.
  • Snake: το παιχνίδι φιδάκι, με τέσσερις παίχτες που παίζει μόνο του γραμμένο με ελληνικές εντολές.
  • TTT: τρίλιζα, αυτό έχει AI αλλά ελάχιστες φορές μπορεί να χάσει!
  • Pa15: Παζλ με μπερδεμένα 15 κουτάκια και λείπει το 16ο για να τα μετακινούμε. Είναι κώδικας από Commodore Basic με λίγες αλλαγές.
  • Game: Το παιχνίδι 2048 μόνο με κείμενο.
  • Minesweeper: Ναρκαλιευτής. Μπορούμε εύκολα μέσα από το κώδικα να αλλάξουμε το μέγεθος.
  • Wumpus: Παιχνίδι με μετακίνηση σε δωμάτια όπου το καθένα έχει τρεις πόρτες (εξάγωνη δομή).
  • Pong: Παιχνίδι τύπου Pong με αντίπαλο τον υπολογιστή. Έχει μερικές διαφοροποιήσεις και θέλει συγκέντρωση, γιατί η μπάλα γίνεται γρήγορη καμία φορά.
  • Guess και Guess1: Απλά παιχνίδια για εύρεση ενός αριθμού ανάμεσα σε ένα διάστημα.
  • BJ: Black Jack έως τέσσερις παίχτες με όλους τους κανόνες.
  • KB:Πλήκτρα πιάνου. Παίζει με επιλογή από τρία όργανα, συγχορδίες. Με καλό πληκτρολόγιο παίζει μέχρι και οκτώ νότες μαζί. Οι νότες μπορούν να κρατηθούν με το πλήκτρα, και στο σαξόφωνο πατώντας νέα πλήκτρα προσθέτουμε ήχο! Με το διάστημα δυναμώνουμε την νότα που θα πατηθεί αμέσως μετά. Παίζει και η drum machine, αλλά εκεί καλύτερα να δώσει κάποιος κάποιο σωστό ρυθμό, γιατί εγώ έδωσα ό,τι να είναι, δεν ξέρω μουσική εκτός από τα βασικά.

Εκτός από τα παιχνίδια υπάρχουν και προγράμματα επίδειξης όπως:


  • Demo1: Πρόγραμμα σε παράθυρο με εμφάνιση 3D σχήματος που περιστρέφεται στο χώρο και αλλάζει κάθε τόσο προσανατολισμό. Δουλεύει με την βιβλιοθήκη Math, με μαθηματικά τετραδονίων.
  • Towers: Hanoi Towers. δείχνει τις κινήσεις για τρεις και τέσσερις δίσκους. Η ρουτίνα είναι τέσσερις γραμμές κώδικα.
  • Pend: Pendulum-Εκκρεμές. δείχνει με γραφικά και κίνηση ένα εκκρεμές που κινείται βάσει παραμέτρων βαρύτητας.
  • Textout: Πρόγραμμα φωνητικής ανάγνωσης κειμένου (αγγλικού) με ταυτόχρονη επίδειξη των λέξεων στην οθόνη. Το πρόγραμμα δείχνει την χρήση γεγονότων και χρησιμοποιεί το SAPI το σύστημα των Windows για την ανάγνωση κειμένων.
  • Compiler: Πρόγραμμα 785 γραμμών που περιλαμβάνει Λεκτικό Αναλυτή, Συντακτικό Αναλυτή, Παραγωγή Κώδικα και Εκτέλεση σε Εικονική Μηχανή. Το πρόγραμμα της επίδειξης παράγει ένα γραφικό Mandelbrot με κείμενο αντί για χρώμα.
  • Lisp:Ένας διερμηνευτής της Lisp (υποσυνόλου της γλώσσας, με 300 γραμμές κώδικα).
  • Crypto: RIPEMD-160bit κωδικοποίηση, βγάζει ένα hash αριθμό των 160bit, που είναι μοναδικός για το κείμενο που δίνουμε. Δουλεύει άψογα, αλλά όχι "επαγγελματικά", δηλαδή γρήγορα που γίνεται κανονικά σε γλώσσα μηχανής.
  • LZW: συμπίεση και αποσυμπίεση κειμένου με τον αλγόριθμο LZW.
  • MAZE: Παραγωγή λαβύρινθου με απλό τρόπο
  • MAZE2: Παραγωγή λαβύρινθου με depth-first search, και επίδειξη καθώς το κατασκευάζει. Δουλεύει συνέχεια με διαφορετικά μεγέθη λαβυρίνθων.
  • CAL: Εμφάνιση ημερολογίου με εικόνα textart του Σνούπι. Μπορούμε μέσα από το πρόγραμμα να το ρυθμίσουμε να το τυπώνει (γεμίζει μια Α4 σελίδα), για όσες χρονιές θέλουμε και σε όποια γλώσσα θέλουμε (στο παράδειγμα το δείχνει στα ελληνικά και στα αγγλικά).
Και άλλα πολλά όπως αλγόριθμοι Qsort, Bubble sort, Shell Sort, και ανάγνωση UTF8 αρχείου ανά χαρακτήρα (παίζει να έχει από έναν έως τρεις θέσεις 8bit, για κάθε unicode σε UTF8) (η γλώσσα έχει αυτόματο μετατροπέα, αλλά δουλεύει σε ολόκληρο κείμενο, στο παράδειγμα δείχνει πώς γίνεται ο έλεγχος για να βγουν σωστά οι χαρακτήρες). Επίσης υπάρχουν παραθυρικοί (σε παράθυρο δηλαδή) διορθωτές για την Μ2000 με βοήθεια για κάθε αναγνωριστικό, mEditor, ο διορθωτής της ΓΛΩΣΣΑΣ, ο διορθωτής της C#, cs, και μέσα από αυτόν κάνουμε και compiling, και ο html διορθωτής, htmleditor. Όλοι οι διορθωτές έχουν χρωματισμό κώδικα, και είναι προγράμματα σε Μ2000 με γραφικό περιβάλλον.

Όλα αυτά (και άλλα που δεν αναφέρθηκαν) υπάρχουν σε ένα αρχείο προγράμματος, το info.gsb το οποίο βρίσκεται στο αρχείο εγκατάστασης της γλώσσας. Το αρχείο είναι μεγάλο (20132 γραμμές, 735.596 bytes σε UTF-8 κωδικοποίηση), και γιατί έχει πολύ κώδικα μέσα αλλά και γιατί έχει εικόνες που είναι γραμμένες με Base64 κωδικοποίηση σαν κείμενο. Ο mEditor το φορτώνει σε δευτερόλεπτα και το χρωματίζει κιόλας. Το αρχείο περιλαμβάνει τμήματα και το καθένα είναι είναι πρόγραμμα. Τα φορτώνουμε μια φορά, και αυτό εκτελεί εντολές για να ετοιμάσει κάποια πλήκτρα λειτουργιών (F1 έως F12 και με SHIFT) και να μας δείξει βασικές πληροφορίες. Μπορούμε να δούμε το κώδικα από κάθε τμήμα με το Edit η το Σ (επειδή σχεδόν όλα είναι στα αγγλικά μάλλον το Edit θα παίξει περισσότερο), με χρωματισμό εντολών. Υπάρχει βοήθεια για κάθε αναγνωριστικό της γλώσσας, τα οποία είναι σε δυο γλώσσες, ελληνικά και αγγλικά, και στη βοήθεια  όταν βλέπουμε το ελληνικό μας λέει και για το αγγλικό και μπορούμε με ένα κλικ στο όνομα να ανοίξουμε την βοήθεια στα αγγλικά. Ο προγραμματισμός φορμών δεν είναι στην βοήθεια, αλλά υπάρχουν παραδείγματα, εγχειρίδιο που περιγράφει τα αντικείμενα των φορμών, τις ιδιότητες, τις μεθόδους και τα γεγονότα.

Θέλω εδώ να ευχαριστήσω τον Άλκη για την φιλοξενία. Αυτή η έκδοση είναι η πιο ολοκληρωμένη που έχω φτιάξει. Δηλαδή δεν θα ήθελα κάτι άλλο για την γλώσσα. Υπάρχει μια ιδέα για μια πιο γρήγορη έκδοση με χρήση AST διερμηνευτή, αλλά ήδη όπως είναι για το σκοπό που γράφτηκε η γλώσσα έχει ικανοποιητική ταχύτητα.
Γ.Κ.

bugman

Μ2000. Ονόματα εντολών στα ελληνικά. Και των τελεστών. Πχ η mod γράφεται υπολ ή υπόλοιπο. Μπορούμε να βάζουμε τόνους. Η γλώσσα τους αφαιρεί όταν γυρίζει κατά τη χρήση τα αναγνωριστικά σε κεφαλαία.
Υπάρχουν όλα τα στοιχεία για δομημένο προγραμματισμό. Η γλώσσα δεν φτιάχτηκε για παραγωγή επαγγελματικών βιομηχανικής κλίμακας εφαρμογών, αλλά μπορεί να χρησιμοποιηθει για εκπαιδευτικούς σκοπούς. Έχει τρία βασικά συστατικά. Χρωματισμός προγράμματος, βηματική εκτέλεση και επίδειξη του κώδικα που ακριβώς εκτελείται, και μηνύματα λάθους στα ελληνικά. Γενικά όλες οι ιδέες πάνω στη Μ2000 έχουν ελληνικό ορισμό. Πχ τα tuple λέγονται αυτόματοι πίνακες, επειδή δεν ορίζονται ξεχωριστά με όνομα. Πχ το (10,) είναι πίνακας ενός στοιχείου. Ενώ το (,) είναι ο κενός πίνακας. Βάζοντας πίνακες μέσα σε πίνακες φτιάχνουμε δομές, δεδομένων. Αυτοί οι πίνακες έχουν δείκτη, είναι αντικείμενα, έτσι ο ίδιος πίνακας μπορεί να βρίσκεται σε δύο ή περισσότερες θέσεις. Αυτή η απλή ιδέα μπορούσε να εφαρμοστεί και στην ΓΛΩΣΣΑ.
Το ζήτημα με τις γλώσσες όπως η Python είναι ο σύντομος χρόνος ζωής. Δηλαδή ο κάποιος κώδικας μετά από τρία τέσσερα χρόνια το πιθανότερο να μην παίζει. Θα είναι γραμμένος με εντολές obsolete....χαρακτηρισμενες.
Σε αυτό το σημείο η ΓΛΩΣΣΑ είναι κορυφή, δίπλα στην Μ3000, όπου η προς τα πίσω συμβατότητα είναι στο 98%.
Συνάμα όλα τα βιβλία σε ΓΛΩΣΣΑ δεν αναφέρουν. αριθμό έκδοσης της γλώσσας, λες και ήταν γνωστό ότι δεν θα αλλάξει ποτέ.
Έτσι η χρήση της ΓΛΩΣΣΑΣ έχει το πλεονέκτημα για τους συγγραφείς βιβλίων να παρέχουν για πάντα ένα ενήμερο εκπαιδευτικό πόνημα, και ας γράφτηκε το 2000.
Γιατί λοιπόν να προτιμήσουν μια άλλη γλώσσα, και έτσι να μείνουν με τα βιβλία τους για προσάναμμα.
Ξεχάσατε τις άλλες γλώσσες.θα τις ονομάσουν τεχνικές γλώσσες, και θα τις απορρίψουν. Ξεχάσατε αυτόματους πίνακες και συναρτήσεις αλφαριθμητικών. Ξεφεύγουν από το στόχο της αλγοριθμικής.

bugman

Διάβασα το άρθρο του Every για το Break στα προγράμματα/υποπρογράμματα και το Return στις συναρτήσεις. Θυμήθηκα ότι από την πρώτη έκδοση της Μ2000 είχα σκεφτεί τον γενικό τύπο μιας επανάληψης, όπου μπορούν να υπάρχουν εντολές πριν και μετά την εντολή IF όπου σε σύγκριση ΑΛΗΘΗΣ εκτελούσε μια EXIT. Η ιδέα αυτή υπάρχει ακόμα και στην τελευταία έκδοση. Ένα μπλοκ εντολών {}  (η Μ2000 έχει επαναλήψεις με και χωρίς μπλοκ εντολών). Ένα οποιοδήποτε μπλοκ εντολών έχει μια κρυφή σημαία, όπου η εντολή LOOP ή ελληνικά ΚΥΚΛΙΚΑ, κάνει τη σημαία ΑΛΗΘΗΣ. Όταν το μπλοκ φτάσει στο τέλος εκτέλεσης εντολών (δηλαδή δεν έχει άλλες) κοιτάει τη σημαία και αν την δει ΑΛΗΘΗΣ εκτελεί πάλι το μπλοκ. Η φυγή από το μπλοκ μπορεί να γίνει με δυο τρόπους, να μην εκτελεστεί η LOOP άρα να έχουμε εκτέλεση του υπόλοιπου μπλοκ και κανονική έξοδο, ή  με χρήση της ΕΞΟΔΟΣ ή EXIT, να βγούμε νωρίτερα. Υπάρχει και η ΔΙΑΚΟΠΗ ή BREAK που σπάει πολλά φωλιασμένα μπλοκ μέχρι και το υποπρόγραμμα ή μέχρι μια TRY { } (ή ΔΕΣ {})
Ποιο είναι τώρα το "λογικό" πρόβλημα στη χρήση των EXIT ή BREAK και σε κάποιες γλώσσες δεν μπορεί να μπει εκ των πραγμάτων;  Αν έχουμε κάθε εντολή που δέχεται μια δική του λίστα εντολών τότε το έξοδος στη λίστα θα κάνει έξοδο από αυτή και μόνο τη λίστα. Αν θέλουμε σε μια λίστα εντολών να έχουμε μια IF και αυτή έχει ΥΠΟΧΡΕΩΤΙΚΑ αναγνωριστικά αρχής και τέλους λίστας εντολών, ΔΕΝ μπορούμε να έχουμε μια έξοδο από τη ΕΞΩΤΕΡΙΚΗ λίστα με εντολή, γιατί η εντολή θα λογαριαστεί για τη τρέχουσα λίστα του IF. Μια ιδέα είναι να μπαίνουν ετικέτες ώστε η έξοδος να δηλώνει το μπλοκ (λίστα) που θα σπάσει  Στη Java έχουμε το break το οποίο δεν σπάει οποιαδήποτε λίστα αλλά μόνο αυτών των επαναλήψεων, και μια παραλλαγή που λέγεται break label όπου βάζουμε μια ετικέτα πχ alfa: πριν από την επανάληψη που θέλουμε να σπάσουμε και μια break alfa τερματίζει τις φωλιασμένες επαναλήψεις μέχρι το επίπεδο που βρίσκεται η ετικέτα (δεν κάνει άλμα στην ετικέτα, αλλά απλά την έχει για να καταλάβει το επίπεδο φωλιάσματος στο οποίο θα τερματίσουν τα υπό αυτό φωλιασμένες επαναλήψεις και στις οποίες βρίσκεται η εντολή break με την ετικέτα. Αυτή είναι και η μόνη τύπου goto εντολή που έχει η java. Δεν γίνεται να έχεις δυο φωλιασμένα for και να βγεις με άλλο τρόπο την ώρα που θέλεις. Για αυστηρά δομημένο προγραμματισμό θα πρέπει να χρησιμοποιήσει κανείς ένα σωρό εντολές οι οποίες σε όλη την διάρκεια των επαναλήψεων θα εκτελούνται, ώστε όταν μια συγκεκριμένη συνθήκη ικανοποιηθεί να εμποδίσουν την εκτέλεση εντολών μέχρι το τέλος όλων των φωλιασμένων επαναλήψεων και να επέμβουν ακόμα και στις μεταβλητές ελέγχου των επαναλήψεων. Αντί λοιπόν όλων των πρόσθετων εντολών, αρκεί μια εντολή σε ένα ξεκάθαρο If, να δηλώνει την συνθήκη και πόσες επαναλήψεις "σπάει" με την υπόδειξη της ετικέτας.

bugman

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



bugman

Ένας ωραίος τρόπος να δει κανείς την αναδρομή με γραφικά είναι το Δένδρο του Πυθαγόρα.

Ο αλγόριθμος υπάρχει εδώ

bugman

Μια και υπάρχει καιρός που Μένουμε στο σπίτι, έγραψα ένα Τετράδιο Εισαγωγής στη γλώσσα Μ2000, στα αγγλικά, απλοποιημένο, με αρκετά προγράμματα. Το pdf αρχείο περιλαμβάνει εσωτερικά ένα odf (open document format), το οποίο σημαίνει ότι ανοίγει στο LibreOffice για διόρθωση. Αν υπάρχουν συντακτικά λάθη ή προτάσεις για βελτιστοποίηση του κειμένου παρακαλώ όπως κάνετε τις διορθώσεις και στείλτε τις.

Στο τετράδιο υπάρχει και ο κώδικας για το Σκάκι για δύο, χωρίς τεχνητή νοημοσύνη (δεν παίζουμε εναντίον του υπλογιστή,) στο οποίο ο υπολογιστής ελέγχει όλες τις κινήσεις και τις καταγράφει σε σειρές FEN (σύστημα σημείωσης σημείου παιχνιδιού στο σκάκι). Μπορούμε να ξεκινήσουμε τη σκακιέρα με μια επιλεγόμενη σειρά FEN. Τα πιόνια τα μετακινούμε με το ποντίκι. Μπορούμε να γυρίσουμε πίσω όσες θέσεις θέλουμε, μέχρι την αρχική (πχ την αρχή ενός προβλήματος). Το πρόγραμμα χρησιμοποιεί γραφικά και sprites, δηλαδή διαφάνειες που φτιάχνει από χαρακτήρες unicode για το σκάκι. Στο M2000 paper έχει 24.5 σελδες Α4 με χρωματισμένο κώδικα (1000+ γραμμές).

Το αρχείο κατεβαίνει από εδώ (το έχω βάλει και στην υπογραφή μου). Είναι σε Github. Εμφανίζεται ένα κουμπι και Download το πατάμε και το λαμβάνουμε. (το ../master/M2000language.exe είναι το αρχείο εγκατάστασης, γενικά το master πάντα θα έχει το πιο επίκαιρο πρόγραμμα του περιβάλλοντος της Μ2000).

https://github.com/M2000Interpreter/Version9/blob/master/M2000paper.pdf

bugman

Μετά από 40+ μέρες στην καραντίνα...βγήκε καπνός. Η τελική αναθεώρηση της Μ2000 είναι γεγονός.
Το αρχείο εγκατάστασης 12Mb περιλαμβάνει δυο pdf αρχεία, ένα ελληνικό με 390 σελίδες, και ένα αγγλικό με 248 σελίδες (διαφορετικό από το ελληνικό ως προς την ύλη). Επίσης περιέχει ένα αρχείο, το info.gsb με 22851 γραμμές κώδικα σε Μ2000 το οποίο περιλαμβάνει πολλά προγράμματα μαζί, όπως και έναν διορθωτή της γλώσσας ΓΛΩΣΣΑ του σχολείου, με χρωματισμό κώδικα. διάφορα προγράμματα και παιχνίδια όπως σκάκι για δύο (χωρίς να παίζει ο υπολογιστής). Τα περισσότερα προγράμματα είναι με αγγλικές εντολές. ενώ υπάρχουν και με ελληνικές (η γλώσσα έχει διπλό λεξιλόγιο ταυτόχρονα σε χρήση, και όλα τα μηνύματα λάθους υπάρχουν και στις δυο γλώσσες και μπορούμε να επιλέξουμε τη γλώσσα που θέλουμε για αυτά μέσω της εντολής Ρυθμίσεις). Τα ελληνικά παίρνουν και τόνους, αλλά δεν είναι υποχρεωτικό, και αφαιρούνται στην εκτέλεση

Θα μπορούσε να χρησιμοποιηθεί και για αλγόριθμους αλλά και για εφαρμογές πχ υπάρχει στο info πρόγραμμα pend που δείχνει ένα εκκρεμές με κίνηση, η το demo1 με κίνηση 3D με χρήση τετραδονίων (επέκταση των μιγαδικών) σε παραθυρικό περιβάλλον, αλλά και άλλα όπως και εξομοιώσεις, όπως το BANKER (αλγόριθμος του τραπεζίτη) και το PHILO το γνωστό πρόβλημα με τους πέντε φιλόσοφους και τα πέντε πιρούνια (δουλεύει με νήματα).

Καλή έξοδο από την καραντίνα!
ΓΚ