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

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« στις: 24 Ιούλ 2015, 11:59:33 μμ »
Μετά από 15 χρόνια με μια δεκαετία σε παύση, η γλώσσα Μ2000, (Μαθητής 2000) έφθασε στην έκδοση 8 με χειρισμό αντικειμένων. Οι εντολές είναι σε δύο γλώσσες, ελληνική και αγγλική, όπως και τα μηνύματα λάθους.
Στα πλεονέκτημα της είναι η χρήση κλάσεων, ομάδων, τμημάτων και συναρτήσεων, ρουτινών, νημάτων (για παράλληλη διεργασία), καθώς και ένα ολοκληρωμένο περιβάλλον εκτέλεσης, με γραφικά, 2 διαστάσεων, με καρτεσιανές και πολικές συντεταγμένες, χρήση εικόνων, αρχείων ήχου και βίντεο, χρήση βάσεων δεδομένων και ODBC, χρήση συνθεσάιζερ φωνής και παραγωγή μουσικής με νότες, σε 16 φωνές και 128 όργανα, χρήση σωληνώσεων για δημιουργία πελάτη εξυπηρετητή, και τέλος επικοινωνία με αντικείμενα εφαρμογές όπως το Word και το Excel.
Η γλώσσα Μ2000 είναι γραμμένη σε Visual Basic 6 και δεν χρησιμοποιεί κάποιες ιδιαίτερες βιβλιοθήκες αλλά κοινές του συστήματος. Έχει δε δικό της σύστημα διαλόγων οι οποίοι προσαρμόζωνται στο μέγεθος μαζί με το μέγεθος των γραμμάτων.
Ο κώδικας είναι ανοικτός
Δείτε αναφορές εδώ georgekarras.blogspot.gr

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

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #1 στις: 31 Ιούλ 2015, 02:02:22 μμ »
Αυτή την εποχή γράφω το Language Definition στα αγγλικά. Αμέσως μετά θα το γράψω στα Ελληνικά, εφόσον όλες οι εντολές είναι στα ελληνικά.
Για να τρέξει το περιβάλλον της γλώσσας χρειάζονται δυο αρχεία το m2000.exe και το Help2000.mdb. Με την πρώτη εκκίνηση Ctrl+U ή Ρυθμίσεις για να ρυθμίσετε χρώματα και μέγεθος γραμμάτων καθώς και διάστοιχο (line spacing). Θα τα βρείτε στον κώδικα (κατεβαίνουν με zip). Το αρχείο m2000.exe είναι υπογεγραμμένο οπότε δεν υπάρχει θέμα "παραβίασης". Το ca.crt που υπαρχει στο κώδικα μπορεί να χρησιμοποιηθεί ως πιστοποιητικό ρίζας.

Ο κώδικας είναι ανοικτός εδώ και για όσους θέλουν να κάνουν αλλαγές χρειάζονται την Visual Basic 6 Enterprise Εdition και  μια αναφορά στην Idispatch.tlb που περιλαμβάνεται στο κώδικα.
Αυτή τη στιγμή είναι στην έκδοση 8 και αναθεώρηση 18. Προφανώς θα έλθουν και άλλες αναθεωρήσεις. Επίσης το αρχείο Help2000.Mdb εμπλουτίζεται ακόμα (έχει περίπου 400 εντολές σε ελληνικά και αγγλικά και λείπουν ακόμα)



bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #2 στις: 24 Αύγ 2015, 01:10:36 μμ »
Παράδειγμα "σκακιέρες"...ή πως να σχηματίσεις σκακιέρα με πιόνια σε τρία μεγέθη στην οθόνη (αυτό δεν μπορεί να το κάνει η ΓΛΩΣΣΑ).

http://georgekarras.blogspot.gr/2015/08/2000_24.html

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #3 στις: 03 Νοέ 2015, 01:47:59 μμ »
Ευχαριστώ τον Alkis, για αυτόν τον χώρο!
Βεβαίως και δεν θέλω να καταχραστώ το χώρο. Και σε καμία περίπτωση να κάνω Pagerank (αυτό δεν το είχα σκεφτεί Alkis...είσαι φοβερός...όλες ιδέες).
Θα αναρτήσω κάτι μόνο αν δω ότι ενδιαφέρει το προσωπικό των δημοτικών-γυμνασίων και λυκείων, ή και μαθητές,  το πεδίο εφαρμογής του Φόρουμ. (Αλλιώς θα λεγόταν το Στέκι της Πληροφορικής)...
Και πάλι ευχαριστώ!


alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5144
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #4 στις: 03 Νοέ 2015, 02:44:20 μμ »
Ευχαριστώ τον Alkis, για αυτόν τον χώρο!
Βεβαίως και δεν θέλω να καταχραστώ το χώρο. Και σε καμία περίπτωση να κάνω Pagerank (αυτό δεν το είχα σκεφτεί Alkis...είσαι φοβερός...όλες ιδέες).
Θα αναρτήσω κάτι μόνο αν δω ότι ενδιαφέρει το προσωπικό των δημοτικών-γυμνασίων και λυκείων, ή και μαθητές,  το πεδίο εφαρμογής του Φόρουμ. (Αλλιώς θα λεγόταν το Στέκι της Πληροφορικής)...
Και πάλι ευχαριστώ!

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

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #5 στις: 11 Νοέ 2015, 11:56:58 πμ »
Ένα μικρό πρόγραμμα που φτιάχνει τρία καταγραφικά με είσοδο από τρεις ταλαντωτές. Σε κάθε ένα σχηματίζουμε μια ταλάντωση από ένα σχήμα ακολουθώντας την αλλαγή ύψους σε σχέση με καθένα από τα 120 τμήματά του. Δεν υπάρχει γλώσσα με τόσες λίγες γραμμές εντολών να φτιάξουμε κάτι ανάλογο. Είδα και το MicroWorlds το οποίο σαν προτέρημα έχει την χρήση στοιχείων ελέγχου όπως sliders για πέρασμα τιμών, αλλά οι εντολές περιορίζονται μέσα σε μια εκπαιδευτική φόρμα με ελάχιστες δυνατότητες παραμετροποίησης της εξόδου. Σε αντίθεση η Μ2000 όπως φαίνεται και από το παράδειγμα εστιάζει στη διαμόρφωση της οθόνης με πλήρη έλεγχο σε επίπεδο γραφικών. Τα καταγραφικά δουλεύουν με αποθήκευση τμήματος εικόνας και στο επόμενο δέκατο του δευτερολέπτου την επανατοποθετούν κατά ένα βήμα που έχουμε ορίσει, και έτσι πετυχαίνουμε οριζόντια ολίσθηση σε τρία τμήματα στην οθόνη. Αν το δει κανείς πιο τεχνικά, η αποθήκευση εξόδου και η επαναχρησιμοποίησή  της, είναι μια λειτουργία ανάδρασης, με την οθόνη να γίνεται στοιχείο εισόδου. Κάθε νέα εμφάνιση είναι αποτέλεσμα τριών ταλαντωτών και της ανάδρασης της οθόνης.
http://georgekarras.blogspot.com/2015/11/blog-post_10.html

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #6 στις: 22 Νοέ 2015, 02:13:21 μμ »


Από το facebook...(δεν ξέρω αν βγαίνει...το έβαλα δοκιμαστικά).
Αν θέλει κανείς να επικοινωνήσει για θέματα της Μ2000 είμαι εδώ: https://www.facebook.com/Lightmotion

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #7 στις: 23 Νοέ 2015, 11:54:11 πμ »
Απαντήσεις σε συχνές ερωτήσεις εδώ http://georgekarras.blogspot.gr/p/blog-page_22.html

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #8 στις: 21 Δεκ 2015, 09:27:20 μμ »
Ένα θέμα που σίγουρα θα έχει απασχολήσει καθηγητές πληροφορικής είναι το πώς μπορεί κάποιος να δείξει δυαδικά νούμερα και να τα χειριστεί, π.χ. με ολίσθηση, περιστροφή, να αλλάξει κάποια bit, και επιπλέον να δει τη διαφορά του Sign από τον Unsign ακέραιο
Αυτές γίνονται με εργασίες με δυαδικό εδώ  (και οι μεταβλητές που χρησιμοποιώ είναι πραγματικές, οι συναρτήσεις για το δυαδικό δουλεύουν "λογικά" και όχι άμεσα σε bits στην μνήμη - αφού έχουμε πραγματικούς εδώ)
http://georgekarras.blogspot.gr/2015/12/blog-post_21.html

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #9 στις: 21 Δεκ 2015, 11:37:32 μμ »
Ο κώδικας είναι και στο github. (αλλά τα ελληνικά μου τα χαλάει - κάτι δεν έχω ρυθμίσει μάλλον- πάντως κατεβαίνει κανονικά, τα αρχεία είναι οκ. Κάθε νέα αναθεώρηση θα τη βάζω και εκεί και στο dropbox.

https://github.com/M2000Interpreter/Version8/

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #10 στις: 29 Δεκ 2015, 09:18:44 μμ »
Πιανάκι στη Μ2000 (με κλαβιέ..ζωγραφιστό)
Εδώ είναι η εικόνα: http://4.bp.blogspot.com/-SqXPhDJBOlo/VoLSr2ILqYI/AAAAAAAAD_A/tQ8MNzEhGMI/s1600/piano.png
Παίζει σαν πιάνο, με συγχωρδίες, και εμφανίζει τα πατημένα πλήκτρα στο κλαβιέ. Όταν σηκώνουμε το πλήκτρο απελευθερώνεται η "φωνή"
http://georgekarras.blogspot.gr/2015/12/004.html


bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #11 στις: 05 Ιαν 2016, 03:48:22 πμ »
Αναθεώρηση 135.
Ανέβασα και παραδείγματα ένα πολύ δυνατό με πίνακα κατακερματισμού, και ένα με συνδεδεμένη λίστα (όπου μαζί δίνω και ένα αντικείμενο ΜΕΜ που παρέχει Malloc και MFree σε εσωτερική μνήμη για αντικείμενα.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #12 στις: 06 Ιαν 2016, 02:30:04 πμ »
Αφού έφτιαξα με Μ2000 το αντικείμενο ΜΕΜ που δίνει μια Malloc για αντικείμενα, συμπλήρωσα τα παραδείγματα με ένα δένδρο αναζήτησης (μάλιστα στο ίδιο αντικείμενο "μνήμης" έβαλα δυο δένδρα).

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #13 στις: 19 Ιαν 2016, 11:57:29 πμ »
Αναθεώρηση 140.
Στατικές μεταβλητές. Βασικές μόνο, όχι πίνακες. Στατικές και σε νήματα, παρόλο που βλέπουν τις μεταβλητές του τμήματος που ανήκουν..βάσει λεξικού, αλλά όχι βάσει αντικειμένου εκτέλεσης, και οι στατικές ανήκουν σε αυτό.Επιπλέον νέα εντολή για νήματα για εκτέλεση εντολής σε νήμα από άλλο νήμα..
Μπορούμε να καλούμε  ρουτίνες μόνο με το όνομα με τις παρενθέσεις, χωρίς τη Διαμέσου ή Gosub, εφόσον δεν υπάρχει πίνακας με το θείο όνομα, οπότε εκεί υποχρεωτικά το ξεχωρίζουμε με την εντολή Διαμέσου.. Οι ρουτίνες δεν  έχουν δικό τους αντικείμενο εκτέλεσης, οπότε μπορούν να κληθούν από όποιο νήμα και αν αναφέρονται σε στατικές τότε αυτές θα είναι του νήματος και όχι του τμήματος που ανήκει το νήμα.
Αντικείμενο εκτέλεσης έχουν τα τμήματα, οι συναρτήσεις και τα νήματα., Αν ένα τμήμα κληθεί από άλλο τμήμα οι στατικές θα ανήκουν στο αντικείμενο εκτέλεσης που δίνει το πατρικό αντικείμενο. Έτσι αν δέκα νήματα καλέσουν το ίδιο τμήμα, και αυτό έχει στατικές μεταβλητές, θα έχει διαφορετικές για κάθε νήμα., και αν το τμήμα κληθεί από το τμήμα που εκκίνησε τα δέκα νήματα ( τρέχουν παράλληλα δηλαδή), θα έχει επίσης ξεχωριστές στατικές. Περιπτώσεις κοινών στατικών έχουμε στην αναδρομική κλήση και σε μια ακόμα που λέγεται κλείσιμο...δηλαδή στέλνουμε σε μια κλήση μέρος του τρέχοντος περιβάλλοντος οπότε κάθε φορά που το χρησιμοποιούμε είναι σαν να τρέχουμε κώδικα από ένα αντικείμενο εκτέλεσης που είναι απόγονος αυτού που κλείσαμε αλλά με κοινές μεταβλητές, και στατικές.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #14 στις: 02 Φεβ 2016, 02:30:15 μμ »
Οι αναθεωρήσεις σταματούν στην 147..και για την ώρα βγαίνει η 147 ως stable και η 151 δίνεται ως unstable. Χρειάζεται να εξεταστεί και άλλο. Στην 150 άλλαξε εσωτερικά ο τρόπος καταχώρησης, αναζήτησης, διαγραφής..μεταβλητών, πινάκων, τμημάτην, συναρτήσεων, αντικειμένων, με χρήση πινάκων κατακερματισμού. Αν και η σειριακή αναζήτηση για πρόσφατες μεταβλητές είναι γρήγορη, ο τρόπος καταχώρησης στη 147 έχει λογαριθμική απόκριση, ενώ με το πίνακα κατακερματισμού  έχουμε γραμμική.
« Τελευταία τροποποίηση: 07 Φεβ 2019, 11:33:46 πμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #15 στις: 08 Φεβ 2016, 02:25:56 μμ »
Η γλώσσα Μ2000 ολοκληρώθηκε με την εισαγωγή ιδιωτικών και δημόσιων μεταβλητών/πινάκων/τμημάτων/συναρτήσεων/ομάδων στις ομάδες (αντικείμενα της Μ2000).

Εδώ είναι ένα δείγμα κώδικα. Δείχνει πως φτιάχνουμε μια κλάση, πως φτιάχνουμε ένα αντικείμενο Α, ποιος φτιάχνουμε ένα πίνακα με αντικείμενα. Η Μ2000 χωρίζει τα αντικείμενα σε επώνυμα και ανώνυμα. Στους πίνακες έχουμε ανώνυμα αντικείμενα. Τα ανώνυμα αντικείμενα μπορούν να αντικατασταθούν, ή να πάρουν πρόσκαιρα όνομα και να επεκταθούν με κάποιο άλλο. Τα επώνυμα (ή στατικά θα έλεγε κανείς), μπορούν να επεκταθούν, να αντιγραφούν (η Κλάση Αλφα { } δημιουργεί μια συνάρτηση που επιστρέφει ομάδα, επιστρέφει μια ανώνυμη ομάδα, και αν θέλουμε τη δίνουμε σε στοιχείο πίνακα ή σε μεταβλητή).
Στη Μ2000 οι συναρτήσεις μπορούν να επιστρέφουν πίνακες και αντικείμενα. Επίσης επειδή ελέγχουμε τον σωρό τιμών (την είσοδο στο τμήμα και στην συνάρτηση, μπορούμε να ρυθμίζουμε τη απόκριση ανιχνεύοντας τι είσοδο έχουμε. Στη κλάση άλφα έχουμε τον κατασκευαστή, τμήμα άλφα, που κοιτάει αν έχει κάτι ο σωρός και εδώ δεν ελέγχει αν είναι αριθμός - θα μπορούσε να το κάνει και αυτό).
Ότι έχει δηλωθεί στο μέρος με την ετικέτα ιδιωτικό: είναι ορατά μόνο στις συναρτήσεις και τα τμήματα του της κλάσης (αλλά όχι σε τμήματα και συναρτήσεις που μπορούμε να ορίσουμε σε αυτές).

Το παρακάτω πρόγραμμα τρέχει κανονικά στο περιβάλλον του διερμηνευτή της Μ2000. Θα μπορούσε κάποτε αυτή η διάρθρωση να περιλαμβάνει και τύπους αντικειμένων, αλλά δεν έχουν για την ώρα (τα αντικείμενα στη Μ2000 δεν έχουν τύπο. Η μόνη περίπτωση "τύπου" είναι η κοινή συνύπαρξη σε πίνακα που έχει δηλωθεί με ένα αντικείμενο, όπου οι συναρτήσεις και τα τμήματα  γίνονται πάγια για όλα τα στοιχεία, όμως μπορούμε να έχουμε πίνακα με διαφορετικές ομάδες σε σύνθεση, δεν είναι ανάγκη να δηλωθεί κοινή τιμή). Οι πίνακες στη Μ2000 είναι δυναμικοί, δηλαδή αντί να χρειαζόμαστε κάποια ειδική malloc για να κάνουμε χώρο για αντικείμενα, μπορούμε να κάνουμε επέκταση σε ένα πίνακα. Δείτε όμως ότι ένα αντικείμενο μπορεί να έχει πίνακες και σε αυτούς άλλα αντικείμενα.
Γενικά στην Μ2000 προβάλλεται η ελευθερία σκέψης και όχι οι περιορισμοί που έχουν την αξία τους βέβαια σε μεγάλα έργα ώστε να αποφεύγονται λάθη, ειδικά όταν ταιριάζουμε κώδικα από διάφορες πηγές.
Εδώ η Μ2000 απευθύνεται σε εκείνους που ενδιαφέρονται για τις ιδέες περισσότερο, να τις αναπτύξουν, και μετά φτιάχνουν κάποια απλή εφαρμογή. Στο Blog έχω δώσει παραδείγματα, με δυαδικά δένδρα, πίνακες κατακερματισμού, ακόμα και μια malloc για οποιοδήποτε αντικείμενο, γραμμένη σε Μ2000.

Κώδικας: Javascript
  1. \\ Παράδειγμα Κλάσης στη Μ2000
  2. Κλάση Αλφα {
  3. Ιδιωτικό:
  4.       χ=1, ψ=1
  5.       παράγοντας=1, παλιά_τιμή
  6.       Συνάρτηση Μηδεν {
  7.             = (=0 και .ψ=0) ή .παράγοντας=0
  8.       }
  9. Δημόσιο:
  10.       Τμήμα  παράγοντας {
  11.               Διάβασε .παράγοντας
  12.       }
  13.       Τμήμα Φύλαξε {
  14.             άλλαξε .παλιά_τιμή, .παράγοντας      
  15.       }
  16.       Τμήμα Αλφα {
  17.             Αν όχι κενό τότε Διάβασε .παράγοντας
  18.       }
  19.       Τμήμα ΆλλαξεΧΨ {
  20.             Διάβασε χ1, ψ1
  21.             .χ<=χ1/.παράγοντας
  22.             .ψ<=ψ1/.παράγοντας
  23.             Αν .Μηδεν() τότε Λάθος "Μηδέν"
  24.       }
  25.       Συνάρτηση ΔώσεΧ {
  26.             =*.παράγοντας
  27.       }
  28.       Συνάρτηση ΔώσεΨ {
  29.             =*.παράγοντας
  30.       }
  31. }
  32.  
  33. Α=Αλφα(10)
  34. Α.ΆλλαξεΧΨ 100,50
  35. Τύπωσε Α.ΔώσεΧ(), Α.ΔώσεΨ()
  36. Α.παράγοντας 5
  37. Τύπωσε Α.ΔώσεΧ(), Α.ΔώσεΨ()
  38. \\ καμία από τις παρακάτω δεν είναι έγκυρες εκφράσεις
  39. \\ οι μεταβλητές είναι ιδωτικές
  40. Τύπωσε Έγκυρο(Α.παράγοντας), Έγκυρο(Α.χ)   \\0  0
  41. Πίνακας Α(100)=Αλφα()
  42. Για ι=0 έως 99 {
  43.       Α(ι).ΆλλαξεΧΨ ι**2+1, ι**3+1            
  44. }
  45. Τύπωσε "οκ"
  46. Για ι=5 έως 6 {
  47.       Για Α(ι) {
  48.               Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
  49.               .Φύλαξε
  50.               .παράγοντας 10
  51.               Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
  52.               .παράγοντας 50
  53.               Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
  54.               .Φύλαξε
  55.               Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
  56.       }
  57. }
« Τελευταία τροποποίηση: 13 Φεβ 2016, 12:12:38 μμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #16 στις: 13 Φεβ 2016, 12:10:22 μμ »

Από την αναθεώρηση 157 η Μ2000 τρέχει χωρίς να χρειάζεται να ρυθμίσουμε τα Ελληνικά ως γλώσσα για προγράμματα που δεν υποστηρίζουν Unicode (υπήρχάν δυο τρία λάθη που απέτρεπαν την δυνατότητα αυτή).
Το παρακάτω πρόγραμμα τρέχει σε οποιοδήποτε υπολογιστή με Windows από Xp και πάνω (με οποιαδήποτε γλώσσα). Με την λέξη "Ευρεία" χρησιμοποιούμε Unicode UTF16LE.
Το τρίτο παράδειγμα γράφει το BOM το χαρακτήρα που δηλώνει τι είναι (UTF-16LE), ώστε με διπλό κλικ στο αρχείο να ανοίξει στο Notepad ως unicode.

Κώδικας: Javascript
  1. \\ Παράδειγμα 1
  2. κ=1
  3. \\ αρχείο unicode με διαχωρισμό εξαγωγής σε αριθμούς-γράμματα
  4. \\ https://en.wikipedia.org/wiki/Comma-separated_values
  5. Άνοιξε "αλφα.cvs" για ευρεία εξαγωγή ως κ
  6. Γράψε #κ, "Ένα όνομα", 100, 3213, "Привет игровая площадка!"
  7. Κλείσε #κ
  8. Αναμονή 100
  9. Άνοιξε "αλφα.cvs" για ευρεία εισαγωγή ως κ
  10. Ενώ όχι Τέλος() {
  11.       Εισαγωγή #κ, Α$,Α, Β, Β$
  12.       Τύπωσε Α$,Α, Β, Β$
  13. }
  14. Κλείσε #κ
  15. \\ Παράδειγμα 2
  16. κ=1
  17. \\ χωρίς χρήση BOM (ενδεικτικού χαρακτήρα)
  18. Άνοιξε "αλφα.txt" για ευρεία εξαγωγή ως κ
  19. Τύπωσε #κ, "Γεια χαρά ! == Привет игровая площадка!"
  20. Κλείσε #κ
  21. Αναμονή 100
  22. Άνοιξε "αλφα.txt" για ευρεία εισαγωγή ως κ
  23. Ενώ όχι Τέλος() {
  24.       Γραμμή Εισαγωγής #κ, Α$
  25.       Τύπωσε Α$
  26. }
  27. Κλείσε #κ
  28. \\ Παράδειγμα 3
  29. κ=1
  30. \\ με χρήση BOM (ενδεικτικού χαρακτήρα)
  31. Άνοιξε "αλφα.txt" για ευρεία εξαγωγή ως κ
  32. Τύπωσε #κ, χαρκωδ$(0xFEFF)+"Γεια χαρά ! == Привет игровая площадка!"
  33. Κλείσε #κ
  34. Αναμονή 100
  35. Άνοιξε "αλφα.txt" για ευρεία εισαγωγή ως κ
  36. Ενώ όχι Τέλος() {
  37.       Γραμμή Εισαγωγής #κ, Α$
  38.       Τύπωσε Μεσ$(Α$,2)
  39. }
  40. Κλείσε #κ
  41.  

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Νέα Τεύχη!
« Απάντηση #17 στις: 15 Φεβ 2016, 09:52:38 μμ »
Αποφάσισα να γράψω ένα εγχειρίδιο στα ελληνικά (η γλώσσα τελείωσε ως προς την έκδοση 8, θα γίνουν μόνο διορθώσεις αν χρειαστούν). Υπάρχουν 8 τεύχη, και κάθε μέρα ή δυο μέρες θα βάζω και ένα ακόμα. Στο πέμπτο έχω ωραίο παράδειγμα με αντικείμενα!

Εγχειρίδιο της Μ2000 σε τεύχη
« Τελευταία τροποποίηση: 17 Φεβ 2016, 02:58:38 πμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #18 στις: 02 Μάρ 2016, 08:24:01 μμ »
Έβαλα γεγονότα Events στη  Μ2000. Μπορεί κανείς να βάζει ή να βγάζει συναρτήσεις σε ένα Γεγονός, και όταν στέλνουμε δεδομένα πάνε σε όλες, ας πούμε συναρτήσεις εξυπηρέτησης του γεγονότος (multicast λέγεται αυτό). Μπορούμε να περνάμε και με αναφορά ώστε να επιστρέφουμε τιμές από το σημείο που σηκώσαμε ένα γεγονός (καλέσαμε μάλλον). Το παράδειγμα είναι γραμμένο με τις αγγλικές εντολές της Μ2000, μπορεί να γραφτεί και με τις ελληνικές. Εδώ σηκώνουμε ένα OnSpaceBar γεγονός που έχουμε δημιουργήσει, και ένα νήμα ξεκινάει μια εργασία, πρώτα όμως απενεργοποιεί  (hold) το αντικείμενο OnSpaceBar για να μην δεχτεί άλλα μηνύματα και μετά συνεχίζει (ενώ παράλληλα το Main.Task εξυπηρετεί, π.χ. μπορούμε να διακόψουμε τη διεργασία), και στο τέλος ενεργοποιεί (release) ξανά το γεγονός. Συνάμα για να έχει ενδιαφέρον, ένα αντικείμενο έχει δυο γεγονότα και μέσα από αυτά καταγράφει πόσες γραμμές εμφανίζουμε και πόσες ολοκληρωμένες εργασίες έκανε το νήμα. Το νήμα απλά μας δείχνει το ποσοστό ολοκλήρωσης (το μοιράζουμε σε 30 διαστήματα). Για το νήμα και το κύριο έργο που είναι νήμα και αυτό δίνουμε ένα αριθμό, σε χιλιοστά του δευτερολέπτου που θα ξεκινάει ο κώδικάς τους (δεν μπορεί να ξεκινήσει ενώ ήδη τρέχει γιατί όταν τρέχει ένα νήμα έχει βγεί από την ουρά αναμονής και είναι στην ουρά εκτέλεσης, και μόνο όσα νήματα είναι σε αναμονή δύναται να ξεκινήσουν). Ο τρόπος που δίνουμε "Εργασία" στο νήμα είναι με το να κάνουμε εκτέλεση εντολών από άλλο νήμα, με την execute. Με την εντολή Data βάζουμε στο τέλος του σωρού τιμών..τιμές  (από εκεί διαβάζει η Διάβασε ή Read). Τα νηματα στο ίδιο τμήμα έχουν κοινές τις μεταβλητές και τις συναρτήσεις, αλλά χωριστά τις στατικές μεταβλητές και τον σωρό τιμών (την ουρά). Επίσης τα νήματα δεν έχουν όνομα αλλά αριθμό, και αν βάλουμε τον ορισμό σε επανάληψη θα μας φτιάξει ο διερμηνευτής κάμποσα!

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

Κώδικας: Javascript
  1. Event OnSpaceBar {
  2.       Read  t, a$, b
  3. }
  4. Class Inform1 {
  5. Private:
  6.       total, complete
  7. Public:
  8.       Event AddOne { }
  9.       Event Print {
  10.             Read what$
  11.       }
  12.       Function Any {      
  13.                   Read a$
  14.                       .total++
  15.                      Print a$
  16.             }    
  17.       Function AddNow {
  18.             .complete++
  19.       }
  20.       Module Init {
  21.            Event .Print new .Any()
  22.            Event .AddOne new .AddNow()
  23.       }
  24.       Module PrintHelp {
  25.             Call Event .Print
  26.       }
  27.       Module AddHelp {
  28.             Call Event .AddOne
  29.       }
  30.       Module TotalPrint {
  31.             Print "Total Lines:", .total
  32.             Print "Complete Works:", .complete
  33.       }
  34. }
  35. Global Group Inform=Inform1()
  36. \\ fix references when we have an instance
  37. Inform.init
  38. Function OnSpaceHandler {
  39.       Read  thr, t$, kk
  40.       Thread thr execute data t$, kk
  41.       \\ we need the global here
  42.       Inform.PrintHelp "ok"
  43. }
  44. Event OnSpaceBar New OnSpaceHandler()
  45.  
  46. Thread {
  47.       Static a$, payload, t
  48.       If t=0 Then {
  49.             Inform.PrintHelp "no job......yet"
  50.             If Not Empty Then {
  51.                   Event OnSpaceBar Hold
  52.                   Read a$, payload
  53.                   t=payload
  54.             }
  55.        } Else {
  56.              Inform.PrintHelp format$("working {0:2}%",(payload-t)/payload*100)
  57.              t--
  58.              If t<1 Then Event OnSpaceBar Release : Inform.AddHelp
  59.        }      
  60. } As theThread Interval 50
  61.  
  62. Main.Task 50 {
  63.       select case inkey$
  64.       case ""
  65.             Inform.PrintHelp "wait...."
  66.       case " "
  67.             Call Event OnSpaceBar, theThread, "hello", 30  
  68.       else
  69.             break
  70.       end select
  71. }
  72. Threads Erase
  73. Inform.TotalPrint
  74.  

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #19 στις: 09 Μάρ 2016, 10:51:52 πμ »
Αφού έβαλα το αντικείμενο Γεγονός ήρθε η ώρα για GUI, διεπαφή με παραθυρικό περιβάλλον. Τα παράθυρα που φτιάχνει η VB6 δεν κάνουν για την M2000, για αρκετούς λόγους. Ένας είναι ότι δεν είναι unicode,  υποχρεωτικά εξυπηρετούν μια γλώσσα. Ένας άλλος είναι ότι σπάνε την ροή νημάτων, τη πολυεπεξεργασία δηλαδή, αν μετακινήσει κανείς τη φόρμα, ή αν κρατάει πατημένο το κουμπί που την κλείνει.
Ήδη από το 2014 έχω φτιάξει τις βασικές, πχ άνοιγμα αρχείου, με δικά μου παράθυρα, τα οποία δεν σταματούν τα νήματα, είναι unicode, και βγαίνουν ακριβώς  τα ίδια σε οποιαδήποτε Windows.
Στην αναθεώρηση 183 έχω βάλει φόρμες χρήστη, προς το παρόν μόνο buttons βάζουμε, αλλά σε λίγες μέρες θα έχω φτιάξει τους wrappers για τα υπόλοιπα. Οι wrappers είναι ενδιάμεσα αντικείμενα. Επειδή στις φόρμες χρήστη τα αντικείμενα όπως buttons μπαίνουν κατά  βούληση, χρειάζονται ένα αντικείμενο να μαζεύει τα μηνύματά κάθε στοιχείου, ένα για το καθένα. Για να υπάρχει δηλαδή έλεγχος του κλικ, πρέπει να δηλωθεί μια άμεση σχέση. Εφόσον η φόρμα μας θα πάρει άγνωστο αριθμό γραφικών στοιχείων διεπαφής, δεν θα μπορεί άμεσα να διαχειριστεί τα γεγονότα που έχουν.και παράγουν αυτά. Τα αντικείμενα wrappers, παίρνουν τα μηνύματα από το αφοσιωμένο  γραφικό στοιχείο τους και το στέλνουν στη φόρμα, η οποία κρατάει ένα αντικείμενο Γεγονός της Μ2000, και το πυροδοτεί, μεταφέροντας το μήνυμα, από το στοιχείο και μια αναφορά στή φόρμα. Η αναφορά μπορεί να χρησιμοποιηθεί στον αποδέκτη των μηνυμάτων, για επικοινωνία με τη φόρμα πριν εκτελέσει αυτός το κλικ για παράδειγμα σε ένα button.
Το ενδιαφέρον στη Μ2000 είναι ότι με τη χρήση νημάτων μπορούμε να φτιάξουμε παράδειγμα, το έχω αναρτήσει, όπου η εκτέλεση των μηνυμάτων  να γίνεται ασύγχρονα. Πχ. σε ένα button έχω βάλει να ανοίγει ένα message box, φτιαγμένο με στοιχεία της Μ2000, το οποίο σταματάει την ροή εντολών περιμένοντας να πατήσουμε Εντάξει ή Άκυρο. Χωρίς την ασύγχρονη λειτουργία, κανένα άλλο μήνυμα δεν θα ήταν αποδεκτό. Βάζοντας τη αναμονή του message box σε νήμα, και επειδή έχει σχεδιαστεί να επιτρέπει την εκτέλεση νημάτων, συνεχίζει το σύστημα να δέχεται έτσι μηνύματα. Στο παράδειγμα που έχω ανεβάσει χρησιμοποιώ διπλό νήμα. Γιατί αν το ένα είναι σε αναμονή, τα μηνύματα συσσωρεύονται, και θα εκτελεστούν στην συνέχεια, ενώ με το δεύτερο νήμα εκτελούνται άμεσα. Με δύο μεταβλητές ελέγχω αν ένα νήμα, από τα δύο για την εκτέλεση  των μηνυμάτων, είναι μπλοκάρισμένο και δεν το τροφοδοτώ.
ΓΚ

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #20 στις: 10 Μάρ 2016, 09:37:52 μμ »
Ανέβασα το τεύχος 27 του εγχειριδίου με δυο προγράμματα για γραφήματα! Η Μ2000 χρησιμοποιεί Twips και έτσι μπορεί με τις ίδιες εντολές να τυπώνει σε εκτυπωτή (1440 Twips σε εκτυπωτή είναι πάντα μια ίντσα).

« Τελευταία τροποποίηση: 25 Σεπ 2019, 12:54:58 μμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #21 στις: 13 Μάρ 2016, 04:37:53 μμ »
Αυτό το καιρό βάζω GUI για το χρήστη στην Μ2000. Δηλαδή να μπορεί κανείς να φτιάξει τα δικά του παράθυρα με στοιχεία ελέγχου. Τα γραφικά που έδειξα στο προηγούμενο μήνυμα μπορούν να βγουν στο παράθυρο αλλά επιπλέον έχουμε buttons και textboxes.
Θέλω να δω πώς θα ονομάζω τα buttons, textboxes, combo και άλλα στα ελληνικά!
Καμία πρόταση ή αν υπάρχει κάποια αποδεκτή ελληνική ορολογία, θα ήταν επιθυμητή!
Ευχαριστώ!
Εικόνα από το τελευταίο παράδειγμα με τρία παράθυρα και τρία νήματα που σχεδιάζουν (και μεις μπορούμε να σχεδιάσουμε, με κύκλους, με το ποντίκι, αφού το μήνυμα MouseMove το παίρνουμε και εκτελούμε το κώδικα που θέλουμε). Μια μεταβλητή Ν γράφει πόσα παράθυρα θα φτιαχτούν (σε πίνακα) και σε κάθε παράθυρο φτιάχνουμε ένα πίνακα στοιχείων με δυο Buttons.
Το πρόγραμμα στη Μ2000 είναι στα αγγλικά (υπάρχουν και οι ελληνικές εντολές) αλλά έχω θέμα με το πως θα λέω τα στοιχεία στα ελληνικά!

Στις τελευταίες εκδόσεις της γλώσσας Μ2000 συμπεριλαμβάνεται ένα πρόγραμμα, το info.gsb με πολλά τμήματα (πάνω από 17k γραμμές κώδικα σε Μ2000) και περιλαμβάνει και αυτό το πρόγραμμα ακόμα καλύτερο, δηλαδή μπορούμε σε μια φόρμα υπάρχει ένα πλήκτρο γράφε Test Me το οποίο ανοίγει τη φόρμα Έλεγχος και παρόλο που τρέχουν νήματα, μπορούμε να βλέπουμε το κώδικα όπως εκτελείται, και στα νήματα.

« Τελευταία τροποποίηση: 25 Σεπ 2019, 12:52:00 μμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #22 στις: 04 Απρ 2016, 12:55:52 πμ »
Αναθεώρηση 199,
Μπήκε ένα ComboBox στο Gui, και μπήκαν συναρτήσεις Lambda. Η κύρια χρησιμότητά τους είναι μπαίνουν ως παράμετροι, μαζί με τιμές που κρατάνε εσωτερικά, και μπορούν να επιστρέφουν άλλες συναρτήσεις.


Παρακάτω το πρόγραμμα εκτελεί αυτό [size=78%]Κάλεσε[/size][size=78%] Για_Κάθε_Ένα(Περιοχή([/size][size=78%]1,11[/size][size=78%])[/size][size=78%], [/size][size=78%]Κύβος[/size][size=78%], [/size][size=78%]ΣτηνΟθόνη) [/size]

Και τα τέσσερα αναγνωριστικά είναι λάμδα συναρτήσεις. Σε μια γραμμή φαίνεται τι θέλουμε να κάνουμε. Θα τυπώσουμε στην οθόνη τον κύβο από το κάθε ένα από τα 1 έως το 10 (όχι το 11, Range αλά Python).
Η ιδέα για το Range είναι να χρησιμοποιείται μέχρι να φέρει λάθος!  Η Δες  { } είναι μια εντολή που εκτελεί ένα μπλοκ μια φορά, και αν έρθει λάθος απλά τερματίζει το μπλοκ, και "θάβει" το λάθος. Η εντολή Κυκλικά αναγκάζει ένα μπλοκ να εκτελεστεί ξανά. Λειτουργεί ως χειριστής σημαίας. Δηλαδή βάζει σε μια σημαία στο μπλοκ..που λέει "όταν εξαντλήσεις τις εντολές τότε ξεκίνα από την αρχή". Η αριθμός παίρνει μια παράμετρο, χωρίς να χρειάζεται να την περάσουμε σε μεταβλητή. Έτσι η Τύπωσε Αριθμός τυπώνει τον αριθμό που δίνουμε στην συνάρτηση ΣτηνΟθόνη
Όταν καλούμε την Για_Κάθε_Ένα οι συναρτήσεις περνούν με αντιγραφή. Αντιγράφονται σε άλλα αντικείμενα "λάμδα". Ειδικά στην Περιοχή() έχουμε αντιγραφή της συνάρτησης που μας δίνει. Όταν δεν χρησιμοποιούμε παρενθέσεις, αντιγράφουμε τη συνάρτηση, ενώ με παρενθέσεις εκτελούμε τη συνάρτηση.


Και τα τέσσερα είναι εδώ:


Περιοχή = λάμδα-> {
      Διάβασε Αρ, Τε
      =λάμδα Αρ, Τε-> {
            Αν Τε>ΑρΤότε {
                  =Αρ
                  Αρ++
            }  Αλλιώς Λάθος "Τέρμα"
      }
}
Κύβος=λάμδα-> αριθμός**3
ΣτηνΟθόνη = λάμδα->{Τύπωσε Αριθμός}
Για_Κάθε_Ένα = λάμδα-> {
      Διάβασε Περ, Συναρ, Εξ
      Δες {
      Κάλεσε Εξ(Συναρ(Περ()))
      Κυκλικά
      }
}
\\Σε μια γραμμή εκτέλεση!
Κάλεσε Για_Κάθε_Ένα(Περιοχή(1,11), Κύβος, ΣτηνΟθόνη)

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #23 στις: 06 Μάι 2016, 02:23:38 μμ »
Ανέβασα την έκδοση 8.1 (rev. 7)
Τα πρόσθετα σε αυτήν την έκδοση είναι οι πίνακες που περιέχουν πίνακες (jagged arrays) και μια ειδική λίστα η Κατάσταση (ή inventory) όπου μπαίνουν με κλειδιά διάφορα είδη μεταβλητών, και έχει σταθερό χρόνο για εισαγωγή, εύρεση, διαγραφή, δηλαδή ανεξάρτητο από το μέγεθος των στοιχείων. Μπορούμε να εκτελούμε ταξινόμηση (γίνεται εσωτερικά με quicksort γρήγορα γιατί η λίστα κρατάει δείκτες). Εσωτερικά η Κατάσταση δουλεύει με πίνακα κατακερματισμού και τα δεδομένα είναι σε πίνακα που μεγαλώνει (διπλασιάζεται) όταν χρειάζεται (άρα πρακτικά υπάρχει ένα πέναλτι στο χρόνο εισαγωγής αλλά σπανίζει, αφού έχουμε εκθετική αύξηση του χώρου, το ίδιο ισχύει και για την διαγραφή).
Επιπλέον είναι ελαφρώς πιο γρήγορη η έκδοση αυτή, έκανα πρόσθετες βελτιώσεις.(καθώς και αφαιρέσεις bugs..)
Συνοψίζοντας η Μ2000 έχει τύπους μεταβλητών:
Αριθμούς - Ακέραιους- Αλφαριθμητικά- Έγγραφα (αλφαριθμητικά με παραγράφους)-Πίνακες-Καταστάσεις-Λάμδα Συναρτήσεις- Γεγονότα-Ομάδες (όλα τα υπόλοιπα, συν ομάδες συν τμήματα και συναρτήσεις).
Στα βασικά Αριθμούς - Ακέραιους- Αλφαριθμητικά μπορεί να έχει στατικές μεταβλητές ανά αντικείμενο εκτέλεσης (π.χ. αν ένα τμήμα κληθεί από διαφορετικό αντικείμενο εκτέλεσης, τότε θα έχει άλλο σετ στατικών, αυτό που σχετίζεται με το πατρικό αντικείμενο)
Επιπλέον υπάρχουν αντικείμενα διεπαφής και μπορούμε να φτιάχνουμε προγράμματα που οδηγούνται από γεγονότα.
Παραμένουν φυσικά οι βάσεις δεδομένων, τα γραφικά 2D, τα sprites και τα νήματα επεξεργασίας (Threads, εκτέλεση κώδικα με χρονικό προσδιορισμό, σε ένα ή περισσότερα αντικείμενα εκτέλεσης), όπως και το σύστημα που παίζει midi σκοπούς (μπορούμε να γράφουμε μουσική και να ορίζουμε φωνές και όργανα, και αυτά παίζουν στο περιθώριο). Παραμένει και το σύστημα πελάτη εξυπηρετητή με χρήση σωληνώσεων (namedpipes) για τοπικό δίκτυο.
Σκοπεύω στην 8.1 να βάλω και TCP/IP αλλά ακόμα το μελετώ.



bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #24 στις: 09 Ιούν 2016, 03:39:03 μμ »
Έκδοση 8.2 (αν. 1)
Έχει ολοκληρωθεί η γλώσσα. Έχει γίνει ActiveX και μπορεί να τρέχει μέσα από άλλες γλώσσες, ενώ μπορεί και η ίδια να τρέχει άλλες script γλώσσες, όπως vbScript και javascript, και μάλιστα να δίνει το αντικείμενό της ώστε αυτές οι γλώσσες να καλούν πίσω, και να δίνουν τιμές ή να χρησιμοποιούν την κονσόλα της, τα γραφικά της, τις φόρμες της.

Το M2000.exe είναι ένα μικρό πρόγραμμα που χειρίζεται το M2000.dll το οποίο βρίσκει πια με εγκατάσταση. Μπορεί κανείς να το βάλει στο Wine σε linux, τρέχει.

Ετοιμάζω το ελληνικό μικρό εγχειρίδιο για να κατατοπιστεί κανείς με τις έννοιες και τις δυνατότητες της Μ2000.
Τελευταία δυνατότητα που προστέθηκε είναι ο χειριστής (opetator) << όπου χρησιμοποιείται για εισαγωγή ρεύματος στοιχείων και μπορεί να μπει πολλαπλά:

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

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


bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #25 στις: 10 Ιούν 2016, 03:43:50 μμ »
Μια και τελείωσε η ανάπτυξη της Μ2000, έφτιαξα το φόρουμ http://m2000.forumgreek.com/
μια κοινότητα συζήτησης και παρουσίασης προγραμμάτων σε Μ2000.
Τώρα που έρχεται καλοκαίρι και υπάρχει χρόνος για τους καθηγητές, ας του ρίξουν μια ματιά, και εκεί ας κάνουν προτάσεις ή να αναφέρουν ιδέες πάνω στην χρησιμότητα της Μ2000.


bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #26 στις: 20 Ιούν 2016, 06:41:49 μμ »
Οδηγός Εγκατάστασης του διερμηνευτή της Μ2000 (τρέχει και σε Wine)
https://docs.google.com/document/d/1jK-pIlyGnrqsLKQazZpWJUEkEDhiebxEIDbJjKFO1NY/pub

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #27 στις: 01 Ιούλ 2016, 07:51:09 μμ »
Μικρό εγχειρίδιο της Μ2000 (79 σελίδες Α4)
Σε αρχείο pdf
https://drive.google.com/open?id=0BwSrrDW66vvvS2lzQzhvZWJ0RVE

28 τεύχη του εγχειριδίου (εμπλουτίζεται)
http://georgekarras.blogspot.gr/p/2000.html

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

Γ.Κ.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #28 στις: 24 Ιαν 2017, 10:57:06 πμ »
Συνεχίζεται η βελτίωση της Μ2000. Έκδοση 8.2 αναθεώρηση 13. Η αξία της γλώσσας δεν είναι στην χρήση της, αλλά στην ύπαρξή της. Με την παρουσία της από το 1999 που γράφτηκε η πρώτη έκδοση έχει την δική της επίδραση στον εκπαιδευτικό χώρο ακόμα και ως αντι-παράδειγμα. Αυτό που ήθελα, μια εύκολη γλώσσα με δυνατότητες στο σχολείο, έγινε με την επιλογή της Python. Η εκπαίδευση σε αλγόριθμους και μόνο μειώνει το ενδιαφέρον του μαθητή. Η ιδέα μου είναι  ο προγραμματισμός στο σχολείο να επιτελεί ένα χρηστικό μέσο εισαγωγής στην έννοια της εφαρμογής. Ο αλγόριθμος περιγράφει ένα συγκεκριμένο πρόβλημα, σαν μια μαθηματική άσκηση. Η εφαρμογή περιέχει μεν αλγόριθμους αλλά προσαρμόζεται στις ανάγκες του χρήστη, που σημαίνει ότι ο κάθε προγραμματιστής-μαθητής θα σκεφτεί την εφαρμογή ως προϊόν, τι χαρακτηριστικά έχει, πόσο εύκολη είναι στη χρήση, τι προρυθμίσεις παρέχει; Τελικά κάθε μαθητής θα δώσει την εικόνα της δικής του προσωπικότητας με την εφαρμογή του, και όχι απλά με την αναπαραγωγή ενός αλγόριθμου. Να περάσουμε από την απόδειξη κατανόησης, του ίδιου για όλους, στην προβολή της ικανότητας, του διαφορετικού. Έτσι θα φανούν τα παιδιά που θα το αγαπήσουν περισσότερο και θα θελήσουν να ασχοληθούν επαγγελματικά, ως κύρια δουλειά ή ως υποστηρικτή.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #29 στις: 14 Φεβ 2017, 05:30:37 μμ »
Οδηγός Εγκατάστασης και παράδειγμα με λάμδα συνάρτηση και αντικείμενο Κατάσταση (λίστα με κλειδί, εσωτερικά δουλεύεi με Πίνακα Κατακερματισμού)

Banner για την γλώσσα Μ2000.



Έχει ανανεωθεί και το "Μικρό Εγχειρίδιο"

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


bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #30 στις: 09 Μάρ 2017, 01:30:52 πμ »
Έχει ανέβει η έκδοση 8.4 όπου έχω προσθέσει πολλά στη γλώσσα, όπως αντικείμενα που γυρνούν και παίρνουν τιμές σαν μεταβλητές, καθώς και ιδιότητες μόνο για ανάγνωση ή και για εγγραφή, οι οποίες είναι και αυτές αντικείμενα, και μπορούν να έχουν συναρτήσεις, τμήματα αλλά και άλλες ιδιότητες. Επίσης τα αντικείμενα μπορούν να έχουν δικούς τους τελεστές, και έτσι να ορίσουμε πχ την πρόσθεση, και το αποτέλεσμα να είναι τιμή ή αντικείμενο. Έχει αρκετές βελτιώσεις ακόμα και στην ταχύτητα εκτέλεσης.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #31 στις: 13 Μάρ 2017, 09:18:14 πμ »
Ανέβασα έναν διερμηνευτή mini Lisp γραμμένο σε Μ2000, και μάλιστα σε δυο εκδόσεις, με Τμήματα (Διαδικασίες) και με Ρουτίνες.  Στη Μ2000 ξεχωρίζουν οι Ρουτίνες από τα Τμήματα. Οι ρουτίνες έχουν δικό τους σωρό επιστροφής ενώ τα τμήματα χρησιμοποιούν τον γενικό. Επιπλέον οι ρουτίνες βλέπουν τις μεταβλητές του τμήματος που ανήκουν ενώ τα τμήματα δεν βλέπουν, παρά μόνο ότι ορίζουμε σε αυτά και ότι είναι γενικό! Παρόλα αυτά το πρόγραμμα με τα τμήματα χρησιμοποιεί μια ειδική κλήση που κάνει τα τμήματα να τρέχουν σαν να είναι το τμήμα που τα καλεί. Από την έκδοση 8.4 έχουμε όμως εξίσου γρήγορη εκτέλεση ρουτινών (η αναζήτηση γίνεται μια φορά και καταχωρείται σε λίστα), οπότε το δεύτερο πρόγραμμα εκτελεί το κώδικα της Lisp πιο γρήγορα!


bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #32 στις: 18 Απρ 2017, 10:07:58 πμ »
Ένα ωραίο πρόβλημα για προγραμματισμό είναι το γνωστό πρόβλημα με το βοσκό, το λύκο, το πρόβατο και το χορτάρι, που πρέπει να περάσουν ένα ποτάμι, με μια βάρκα που σε αυτήν μπορεί να μπαίνει μόνο ο βοσκός και το πολύ ένα από τα άλλα τρία. Όσο είναι μαζί ο βοσκός, ο λύκος δεν τρώει το πρόβατο και το πρόβατο δεν τρώει το χορτάρι. Το πρόγραμμα πρέπει να δείχνει τι υπάρχει κάθε φορά σε κάθε όχθη, και στην βάρκα. Τερματίζει όταν όλα είναι στην όχθη προορισμού.
Το πρόγραμμα πρέπει να αποφασίζει ποιοι θα είναι οι επιβάτες στη βάρκα σε κάθε μετακίνηση.
Υπάρχει λύση σε Μ2000 με χρήση αντικειμένων, αλλά είναι δυνατόν να γραφτεί σε ΓΛΩΣΣΑ του σχολείου, ή σε Python, ασφαλώς με χρήση πινάκων. Το ενδιαφέρον του προγράμματος είναι στην αναπαράσταση των μετακινούμενων, γιατί θα πρέπει να γραφτεί και τι τρώει το καθένα ώστε να γίνεται έλεγχος.
« Τελευταία τροποποίηση: 18 Απρ 2017, 10:51:18 πμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #33 στις: 26 Ιούν 2017, 03:59:50 μμ »
Μια και τελείωσε το σχολείο, θεώρησα καλό να ενημερώσω για την τελευταία έκδοση της Μ2000 και ίσως κάποιοι καθηγητές ρίξουν μια ματιά!

Τελευταία έκδοση η 8.8 στην αναθεώρηση 11, της Μ2000. Έχω ανεβάσει παράδειγμα για την ανάγνωση json αρχείου, σε δομή δεδομένων, και πάλι την εξαγωγή κειμένου από τη δομή. Η γλώσσα Μ2000 έχει εκτός από μεταβλητές και πίνακες, ορισμένες δομές που λειτουργούν με δείκτη, και μια από αυτές είναι και ο πίνακας με δείκτη. Δείκτες δεν μπορούμε να δώσουμε εμείς, γιατί πάντα μας δείχνει η γλώσσα αυτό που δείχνουν οι δείκτες, και σε εκχώρηση η αντιγραφή του δείκτη γίνεται "αθέατα".
Τέσσερα αντικείμενα είναι με δείκτες στη Μ2000:
1. ο πίνακας με δείκτη (δεν έχει παρενθέσεις),
2. η κατάσταση (ζευγάρια ξεχωριστών κλειδιών και τιμών) - υπάρχει παραλλαγή ως "κατάσταση ουρά" όπου δέχεται όμοια κλειδιά.
3. ο σωρός τιμών (συνδεδεμένη λίστα τιμών, χρησιμοποιείται και ως στοίβα)
4. και η διάρθρωση μνήμης (τμήματα μνήμης όπου ορίζουμε μια δομή, ή πίνακα δομών, ενώσεων δομών κ.ο,κ).
Στα τρία πρώτα οι τιμές μπορεί να είναι οτιδήποτε, πχ δείκτης σε άλλη δομή, πίνακας, αντικείμενο. Στο τέταρτο οι τιμές είναι αριθμοί χωρίς πρόσημο του ενός, των δύο και των τεσσάρων bytes, πραγματικοί των οκτώ bytes, και αλφαριθμητικά των  δυο ή του ενός byte ανά χαρακτήρα.

Οι μεταβλητές στη Μ2000 είναι αριθμητικές (με % στο τέλος είναι ακέραιες, ενώ εσωτερικά είναι πραγματικές) ή αλφαριθμητικές (έχουν το $ στο τέλος), και υπάρχουν και δυο ακόμα η τύπου Μακρύς (Long) ακέραιος 32bit και το αντικείμενο Έγγραφο ως αλφαριθμητικό με χωριστές εσωτερικά τις παραγράφους.

Σε μεταβλητές μπαίνουν και δυο ακόμα ειδικά αντικείμενα, η συνάρτηση λάμδα και το αντικείμενο γεγονός, το οποίο δέχεται συναρτήσεις με αναφορά και εκτελεί με μια εντολή παράλληλες κλήσεις σε όλες τις συναρτήσεις (multicast) (κάποιες συναρτήσεις μπορεί να είναι συναρτήσεις αντικειμένων τύπου ομάδας οπότε στέλνουμε μηνύματα μέσω των γεγονότων)

Οι ομάδες είναι αντικείμενα που μπορεί να έχουν όλα τα παραπάνω και επιπλέον τμήματα (διαδικασίες δηλαδή), συναρτήσεις, άλλες ομάδες, να επιστρέφουν τιμή ή να δέχονται τιμή ή και τα δύο, να έχουν ιδιότητες (ομάδες που δέχονται τιμές ή δίνουν ή κάνουν και τα δύο). Δεν υπάρχει χωριστή αναφορά σε διεπαφή στα αντικείμενα αυτά, και δεν έχουμε δείκτες σε αυτά. Μπορούμε έμμεσα να έχουμε δείκτες αν τοποθετήσουμε τις ομάδες σε κάποια από τα 1 έως 3 αντικείμενα με δείκτες.

Στο παράδειγμα που δίνω στο Blog για την ανάγνωση των json αρχείων, όλες οι τιμές τοποθετούνται σε ομάδες μέσα σε Καταστάσεις όταν το jsον έχει αντικείμενα με ζευγάρια τιμών και σε πίνακες με δείκτη όταν έχει πίνακα. Ακόμα όμως και οι καταστάσεις και οι πίνακες είναι πρώτα σε ομάδες καταχωρημένες. Έτσι όλη η δομή ξεκινάει με μια ομάδα που μπορεί να έχει πίνακα ή κατάσταση και μέσα σε αυτά άλλες ομάδες με οτιδήποτε τιμές δέχεται το json αρχείο. Το πρόγραμμα έχει γραφτεί με εντολές της Μ2000 στα αγγλικά. Αν κάποιος το τρέξει με Δοκιμή Α (έστω στο Α έχουμε αντιγράψει το πρόγραμμα) θα μπορέσει να το εκτελέσει βήμα προς βήμα. Μπορεί σε διάφορα σημεία να βάζει την εντολή Δοκιμή "τίτλος" και τότε σταματάει η εκτέλεση και δείχνει το σημείο του κώδικα που εκτελείται, και μπορούμε ε[πιπλέον  να επιλέξουμε αργή εκτέλεση ή να κλείσουμε το παράθυρο του ελέγχου, ή να δώσουμε διακοπή, ή να εμφανίσουμε τιμές που θέλουμε (υπάρχει μια Τύπωσε στη φόρμα αυτή για να εμφανίζει τιμές).
Οποιοσδήποτε το δοκιμάσει ας γράψει εδώ τα συμπεράσματά του!

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #34 στις: 18 Ιούλ 2017, 12:58:58 μμ »
Τελική έκδοση 8.9 αναθεώρηση 14. Έχει γραφτεί 100% η βοήθεια, και στο blog εμφανίζονται όλα τα αναγνωριστικά εντολών και συναρτήσεεων, στα ελληνικά και στα αγγλικά (υπάρχουν και προγράμματα για το πως μέσα από τη γλώσσα διαβάζουμε τη βοήθεια σε αρχείο txt και το ανοίγουμε σε WordPad).
Με Βοήθεια Όλα ή Help All έχουμε τις λίστες αυτές ομαδοποιημένες.
Καλό Καλοκαίρι!

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #35 στις: 18 Δεκ 2017, 06:50:22 μμ »
Η έκδοση 9 της γλώσσας υπάρχει διαθέσιμη (αναθεώρηση 33). Γράφω το "Προγραμματίζοντας με τη Μ2000" πάνω σε αυτήν την έκδοση.
Αυτή η έκδοση προχωράει περισσότερο τα αντικείμενα Ομάδα εισάγοντας την Υπερκλάση, ενώ παραμένουν ως τιμές (και όχι αναφορές) όταν τα έχουμε σε μεταβλητές. Η Υπερκλάση μπορεί να έχει μοναδικά στοιχεία και όλα τα αντικείμενα που σχετίζονται με αυτήν μπορούν να έχουν πρόσβαση σε αυτά. Επειδή τα αντικείμενα Ομάδες έχουν δυνατότητα να έχουν άλλες ομάδες εσωτερικά, αυτές οι ομάδες μπορούν να συνδέονται με άλλες Υπερκλάσεις, και έτσι μια ομάδα με έμμεσο τρόπο να συνδέεται με περισσότερες από μια Υπερκλάσεις!

Αυτή είναι η τελική έκδοση!

Στην εικόνα φαίνονται δυο προγράμματα που τρέχει το καθένα το διερμηνευτή, το πρώτο φτιάχνει μια φόρμα χρήστη για ένα Notepad, και το άλλο αλλάζει την κονσόλα της Μ2000 σε ρολόι με διαφάνεια!
« Τελευταία τροποποίηση: 23 Δεκ 2017, 01:06:04 πμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #36 στις: 25 Δεκ 2017, 02:39:52 μμ »
Καλά Χριστούγεννα
Ανέβασα ένα BLACKJACK για τέσσερις παίκτες σε Μ2000 στο blog της M2000, με δυνατότητες SPLIT και DOUBLING DOWN. Ο αριθμός παικτών μπορεί να αλλάξει από ένα σε όσο θέλουμε, στο κώδικα μόνο. Μπορεί κάποιος παίκτης να αποχωρήσει.
Καλή Διασκέδαση!

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Γλώσσα Προγραμματισμού Μ2000 έκδοση 9
« Απάντηση #37 στις: 03 Φεβ 2018, 11:42:07 μμ »
Λογικά πρέπει πια το νήμα εδώ να λέει έκδοση 9, αφού αυτή είναι εδώ και 43 αναθεωρήσεις!
Έχω ανεβάσει στο blog ένα πρόγραμμα που χρησιμοποιεί φόρμα και νήματα. Είναι σε δυο εκδόσεις, μια με ελληνικές εντολές και μια με αγγλικές. Δεν υπάρχει ανάλογο στη ΓΛΩΣΣΑ, δεν έχει φόρμες και νήματα επεξεργασίας, δεν είναι καν κάτι τέτοιο στην ύλη. Όμως μόνο πληροφοριακά θα μπορούσε κανείς να διαβάσει το κώδικα, ή ακόμα καλύτερα να κατεβάσει τη γλώσσα και να τον δοκιμάσει.

Ίσως κάποια στιγμή μπουν παραπάνω πράγματα στην ΓΛΩΣΣΑ, όπως:
1. Συναρτήσεις Αλφαριθμητικών
2. Προγραμματισμός με γεγονότα
3. Προγραμματισμός Συναρτησιακός με λάμδα συναρτήσεις.
Ελπίζω να φτάσουν στα αυτιά των υπευθύνων. Βεβαίως υπάρχει και η Python, που είναι και πιο πλούσια με μεγάλο αριθμό βιβλιοθηκών, και έχει απ' όλα τα καλά, αλλά νομίζω ότι για την python μιλάμε για τεχνολογία πληροφορικής σε άλλο επίπεδο, ανωτέρας εκπαίδευσης, όπου απαιτείται μεγάλη εμβάθυνση σε μικρό χρόνο, που αποκλείει την μέση εκπαίδευση.
Η ΓΛΩΣΣΑ με αναβάθμιση θα μπορέσει να καλύψει λίγα παραπάνω, από ότι σήμερα, και θα το κάνει πιο ενδιαφέρον το μάθημα!

Βίντεο με αγγλικές εντολές σε Ubuntu Studio με Wine (όπου έχει γίνει εγκατάσταση η Μ2000)
https://youtu.be/meAK06JrtwU
« Τελευταία τροποποίηση: 04 Φεβ 2018, 03:25:56 μμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #38 στις: 21 Φεβ 2018, 12:03:11 πμ »
Από την αναθεώρηση 48, έκδοση 9.0, μπορεί κανείς να τρέχει γλώσσα μηχανής x86 στη Μ2000, φτιάχνοντας αυτό που λέγεται Διάρθρωση Κώδικα (διάρθρωση μνήμης που παίρνει εκτελέσιμο κώδικα).
Με αυτό συμπληρώθηκαν στη Μ2000 όλα τα προγραμματιστικά παραδείγματα: Προστατικός προγραμματισμός, Συναρτησιακός, Με γεγονότα, Αντικειμενοστραφής Προγραμματισμός και τα "εξωτικά"..με αντικείμενα COM (όπως το Word), με εξωτερικές βιβλιοθήκες (dll της C), με χρήση βιβλιοθηκών του λειτουργικού και τώρα με χρήση γλώσσας μηχανής x86.
Ίσως ένα τελευταίο έμεινε (θα πάρει καιρό όμως): Η ενσωμάτωση Assembler x86 (τώρα πρέπει να δίνουμε αριθμούς).
Η Μ2000 μπορεί να τρέξει σε Wine 1.8 (σε 3.0 δεν βγαίνει η βοήθεια, έχει πρόβλημα με τα αρχεία τύπου Access)

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Γλώσσα Προγραμματισμού Μ2000 έκδοση 9.0 Αναθεώρηση 54
« Απάντηση #39 στις: 09 Μάρ 2018, 01:21:31 πμ »
1. Προσθήκη στη γλώσσα των τύπων Currency (19 ψηφία) και Decimal (29 ψηφία) (πριν υποστήριζε  double 17 ψηφία+εκθέτης 2.5 ψηφίων καθώς και 32Bit Long, και έμμεσα για αποθήκευση/ανάγνωση σε μνήμη, ακέραιους χωρίς πρόσημο των 8bit, 16bit και 32bit).


2. Βίντεο από εκτέλεση σε Linux και σε Windows 7 σε VirtualBox ταυτόχρονα. Δείχνει το παράδειγμα με την χρήση διανυσμάτων για 3D περιστροφή τριών αξόνων σε ένα παράθυρο χρήστη. Οι συναρτήσεις για τα διανύσματα είναι ενσωματωμένες σε ένα αντικείμενο Math. Τα παράθυρα εμφανίζονται ίδια σε κάθε λειτουργικό (είναι ενσωματωμένα στο περιβάλλον της γλώσσας).
http://bit.ly/2IcX2nl

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #40 στις: 15 Ιούν 2018, 10:13:15 πμ »
Ανανέωση του μικρού εγχειριδίου της Μ2000 (299 σελίδες). Έκδοση γλώσσας 9.3 αναθ. 12.
Δείτε αν υπάρχει χρόνος το εγχειρίδιο και δώστε προτάσεις, ιδέες για συμπλήρωση ή αλλσγές ή διορθώσεις.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Γλώσσα Προγραμματισμού Μ2000 έκδοση 9.3
« Απάντηση #41 στις: 22 Ιούν 2018, 04:09:41 μμ »
Για το καλοκαίρι:
Εδώ  https://github.com/M2000Interpreter/Version9/wiki/BlackJack-in-M2000-code και εδώ το ίδιο αλλά με χρώμα https://georgekarras.blogspot.com/2017/12/blackjack-verison-3-m2000-code.html είναι ο κώδικας για το BlackJack, το γνωστό παιχνίδι με κάρτες, σε M2000. Ακολουθεί τους κανόνες του παιχνιδιού με τις δυνατότητες επιπλέον παιχνιδιών μεταξύ "μάνας" και "παίκτη", ανάλογα με το τι θα είναι τα δυο πρώτα χαρτιά.
Ο κώδικας είναι γραμμένος με αγγλικές εντολές σε Μ2000, που στην ουσία είναι μια βελτιωμένη BASIC,
Στην αρχή του παιχνιδιού μια μεταβλητή κρατάει τον αριθμό των παικτών (εδώ είναι 4, αλλά μπορούμε να βάλουμε μεγαλύτερο νούμερο), και κάθε παίκτης ξεκινάει με 10000 μονάδες. Οι παίκτες μπορεί να βγουν εκτός όποτε θέλουν, ή βγαίνουν υποχρεωτικά όταν χάσουν τις μονάδες τους.
Το παιχνίδι δεν έχει γραφικά, αλλά μόνο κείμενο, με χρώμα και εμφανίζει και τα σύμβολα όπως κούπα, καρό, σπαθί, μπαστούνι (όπως τα λέμε). Για κάθε παίκτη, όπως έρχεται η σειρά του, μας ρωτάει το πρόγραμμα αν θέλουμε να πάρουμε χαρτί (hit) ή να μείνουμε εκεί που είμαστε (stand). Στην ουσία ο διάλογος γίνεται από τον dealer (την "μάνα"). Η μάνα δεν έχει ΑΙ (τεχνητή νοημοσύνη) αλλά παίζει με σταθερούς κανόνες (υποχρεωτικά). Παρόλο που εδώ θα σκεφτεί κανείς ότι με αυτόν τον τρόπο θα χάσει, είναι έτσι φτιαγμένο το παιχνίδι που πάντα κερδίζει σε βάθος χρόνου. Βρείτε τους κανόνες από το πρόγραμμα!

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

Η εντολή For έχει στο πρόγραμμα δυο παραλλαγές. Η μία είναι για την επανάληψη, και η άλλη είναι για να γίνεται μαζική προσπέλαση σε αντικείμενα. Η διαφορά φαίνεται στο δεύτερο γιατί δεν υπάρχει το = να δώσει τιμή έτσι το For Players(i) { } ανοίγει ένα μπλοκ για χειρισμό του αντικειμένου στη θέση του πίνακα Players(i). Μέσα σε ένα τέτοιο For, ονόματα μεταβλητών που ξεκινούν με τελεία αναφέρονται στα μέλη του αντικειμένου (τα οποία είναι δημόσια, σε αυτό το πρόγραμμα δεν έχουμε ιδιωτικά μέλη ομάδων, όπως λέγονται τα αντικείμενα της Μ2000)

Λοιπόν μπορεί κανείς να δώσει το δικό του BlackJack, στη γλώσσα που θα επιλέξει (εξαιρείται η ΓΛΩΣΣΑ, γιατί δεν έχει γεννήτρια τυχαίων αριθμών), όπως με Java και Python. Δεν είναι υποχρεωτικό να υποστηρίζει το πρόγραμμά σας όλα τα στοιχεία που υποστηρίζει το υπάρχον πρόγραμμα σε Μ2000.
Χρόνος που απαιτείται για να γίνει σε Java/Python και να είναι πλήρως διορθωμένο, όχι λιγότερο από ένα μήνα! Μια ωραία άσκηση λοιπόν (ενώ υπάρχει ήδη μια λύση). Αντί λοιπόν να υπάρχει "λογικό διάγραμμα", ή "εκφώνηση", υπάρχει κώδικας σε γλώσσα που δεν είναι γνωστή, αλλά είναι εύκολα κατανοητή (αν και η Μ2000 υποστηρίζει τύπους στις δηλώσεις μεταβλητών, δεν είναι απαραίτητο να δώσουμε τύπους, κάτι που μεγαλώνει πολύ τον κώδικα και εδώ δεν κερδίζουμε κάτι).
Η μεγαλύτερη δυσκολία είναι το πώς θα κάνει κανείς στην java ή στην python τις κατάλληλες δομές δεδομένων που θα κρατούν την κατάσταση του προγράμματος για όλους τους παίκτες και την μάνα, και την τράπουλα απ' όπου τραβάμε χαρτιά και κάθε φορά που τελειώνουν τα φύλα, προσθέτουμε άλλα ανακατεμένα επίσης.



bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #42 στις: 02 Ιούλ 2018, 09:43:51 πμ »
Η Μ2000 στο Rosettacode: www.rosettacode.org/wiki/M2000_Interpreter

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 9.3
« Απάντηση #43 στις: 04 Ιούλ 2018, 04:19:33 μμ »
Υπολογισμός του Pi με όσα ψηφία θέλουμε. http://www.rosettacode.org/wiki/Pi#M2000_Interpreter

Για να φτιαχτεί σε ΓΛΩΣΣΑ πρέπει να φτιάξουμε μια ουρά  FIFO (το πρώτο που μπαίνει θα βγει πρώτο) όπου θα μπαίνουν στο τέλος τιμές (ενώ διαβάζουμε από την αρχή) και κάποια στιγμή θα αυξάνουμε κατά ένα όλες τις τιμές, με τρόπο όπου θα "τραβάμε" μια τιμή θα την αυξάνουμε και μετά θα την εμφανίζουμε μέχρι να αδειάσει ο σωρός ή να μηδενιστεί ο αριθμός δεκαδικών που ζητάμε, οπότε και αδειάζουμε την ουρά, και τερματίζουμε.
Για την εμφάνιση των αριθμών (των ψηφίων) κολλητά ο ένας με με τον άλλο θα πρέπει να έχουμε ένα πίνακα αλφαριθμητικών δέκα θέσεων όπου ο κάθε αριθμός θα δίνει και τον αντίστοιχο χαρακτήρα.

Μια άσκηση προετοιμασίας για το παραπάνω πρόγραμμα είναι ένα πρόγραμμα που θα διαβάζει έναν θετικό ακέραιο αριθμό και θα τον αναπαράγει ένα προς ένα με όλα τα ψηφία του. Πχ αν δώσουμε εισαγωγή το 122323 θα πάρουμε το 1 2 2 3 2 3 χωρίς κενά αλλά το καθένα ως χαρακτήρας.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 9.4
« Απάντηση #44 στις: 11 Σεπ 2018, 12:16:41 μμ »
Η Μ2000 έχει φθάσει στην 9.4 έκδοση.
Προστέθηκε νέος τύπος ορισμού: enum ή enumaration, ή απαρ ή απαρίθμηση, δηλαδή ονόματα υπό έναν τύπο τα οποία βρίσκονται σε διάταξη, μπορούν να απαριθμηθούν, μπορούν να δώσουν το επόμενο/προηγούμενο και επιστρέφουν τιμή καθώς επίσης σε συνδυασμό με συναρτήσεις επιστρέφουν όνομα ή τύπο. Μπορούμε να ορίσουμε σε συνάρτηση, τμήμα, ή ρουτίνα μια παράμετρο να έχει τύπο συγκεκριμένη απαρίθμηση. Ορίζουμε μεταβλητές που μπορούν να πάρουν μόνο τιμές από το συγκεκριμένο τύπο. Στις πράξεις οι απαριθμήσεις λειτουργούν ως αριθμοί.
Απαρίθμηση Κατοικίδιο {Σκύλος=100, Γάτα, Χελώνα=200} : Κατοικίδιο1=Σκύλος: Τύπωσε Τύπος$(Κατοικίδιο)="Κατοικίδιο", Κατοικίδιο1=100, Κατοικίδιο1<Γάτα: Κατοικίδιο1++: Τύπωσε Κατοικίδιο1=Γάτα
Ένα_Κατοικίδιο=Κάθε(Κατοικίδιο)
Ενώ Ένα_Κατοικίδιο {
      \\ όνομα, τιμή, τύπος
       Τύπωσε Εκφρ$(Ένα_Κατοικίδιο),Εκφρ(Ένα_Κατοικίδιο), Τύπος$(Ένα_Κατοικίδιο)
}

Στο τόπο rosettacode.org υπάρχουν 223 παραδείγματα για διάφορα έργα (tasks), από απλά μέχρι και προχωρημένα.

bugman

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

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • 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

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

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

bugman

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

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

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • 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, απλό παράδειγμα

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Μια ιδέα από τη Μ2000.
« Απάντηση #50 στις: 03 Σεπ 2019, 09:58:32 μμ »
Έφτιαξα ένα επτασέλιδο pdf, που δείχνει μέσα στις σελίδες του μια ιδέα από τη Μ2000.
Θα ήθελα τις εντυπώσεις σας!

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Γλώσσα Προγραμματισμού Μ2000 έκδοση 9.8
« Απάντηση #51 στις: 15 Σεπ 2019, 01:06:33 μμ »
Ολοκληρώθηκε η έκδοση 9.8 της Μ2000 (τελική αναθεώρηση 40). Στο παρεχόμενο info.gsb μπήκε και ένα τμήμα ΓΛΩΣΣΑ το οποίο δημιουργεί ένα παραθυρικό διορθωτή της ΓΛΩΣΣΑΣ, με χρωματισμό εντολών και εκτέλεση με κλήση του γλώσσα.exe. Επίσης υπάρχει το τμήμα cs που δημιουργεί έναν παραθυρικό διορθωτή για την c# και μπορούμε από το μενού να επιλέξουμε μετάφραση και εκτέλεση.(στην αρχή μας ζητάει να του υποδείξουμε ποιο .Net framework θέλουμε). Υπάρχει και ο mEditor και αυτός παρόμοιος διορθωτής (editor), για την Μ2000, με ταυτόχρονη εμφάνιση σε ξεχωριστό EditBox βοήθειας για εντολές που επιλέγουμε με απλό κλικ.

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

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Γλώσσα Προγραμματισμού Μ2000 έκδοση 9.8 αναθ. 45
« Απάντηση #52 στις: 24 Σεπ 2019, 12:46:41 μμ »
Έβαλα και άλλα πράγματα όπως το να φαίνεται η τρέχουσα παράγραφος στο EditBox (με αναδίπλωση λέξεων ενεργή χρωματίζονται όλες οι γραμμές της παραγράφου), εφόσον δεν έχουμε επιλέξει κείμενο . Επίσης μπορούμε να επιλέγουμε τα χρώματα που θα εμφανίζει το EditBox στο χρωματισμό κώδικα.
Φτιάχτηκε και διορθωτής για html με εμφάνιση βοήθειας για όλες τις λέξεις της Html5.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 9.9 αναθ. 1
« Απάντηση #53 στις: 16 Οκτ 2019, 12:10:36 πμ »
Για όποιους τους ενδιαφέρει, έχω ανεβάσει την 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 διερμηνευτή, αλλά ήδη όπως είναι για το σκοπό που γράφτηκε η γλώσσα έχει ικανοποιητική ταχύτητα.
Γ.Κ.
« Τελευταία τροποποίηση: 16 Οκτ 2019, 12:34:12 πμ από bugman »

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #54 στις: 27 Οκτ 2019, 05:53:32 μμ »
Μ2000. Ονόματα εντολών στα ελληνικά. Και των τελεστών. Πχ η mod γράφεται υπολ ή υπόλοιπο. Μπορούμε να βάζουμε τόνους. Η γλώσσα τους αφαιρεί όταν γυρίζει κατά τη χρήση τα αναγνωριστικά σε κεφαλαία.
Υπάρχουν όλα τα στοιχεία για δομημένο προγραμματισμό. Η γλώσσα δεν φτιάχτηκε για παραγωγή επαγγελματικών βιομηχανικής κλίμακας εφαρμογών, αλλά μπορεί να χρησιμοποιηθει για εκπαιδευτικούς σκοπούς. Έχει τρία βασικά συστατικά. Χρωματισμός προγράμματος, βηματική εκτέλεση και επίδειξη του κώδικα που ακριβώς εκτελείται, και μηνύματα λάθους στα ελληνικά. Γενικά όλες οι ιδέες πάνω στη Μ2000 έχουν ελληνικό ορισμό. Πχ τα tuple λέγονται αυτόματοι πίνακες, επειδή δεν ορίζονται ξεχωριστά με όνομα. Πχ το (10,) είναι πίνακας ενός στοιχείου. Ενώ το (,) είναι ο κενός πίνακας. Βάζοντας πίνακες μέσα σε πίνακες φτιάχνουμε δομές, δεδομένων. Αυτοί οι πίνακες έχουν δείκτη, είναι αντικείμενα, έτσι ο ίδιος πίνακας μπορεί να βρίσκεται σε δύο ή περισσότερες θέσεις. Αυτή η απλή ιδέα μπορούσε να εφαρμοστεί και στην ΓΛΩΣΣΑ.
Το ζήτημα με τις γλώσσες όπως η Python είναι ο σύντομος χρόνος ζωής. Δηλαδή ο κάποιος κώδικας μετά από τρία τέσσερα χρόνια το πιθανότερο να μην παίζει. Θα είναι γραμμένος με εντολές obsolete....χαρακτηρισμενες.
Σε αυτό το σημείο η ΓΛΩΣΣΑ είναι κορυφή, δίπλα στην Μ3000, όπου η προς τα πίσω συμβατότητα είναι στο 98%.
Συνάμα όλα τα βιβλία σε ΓΛΩΣΣΑ δεν αναφέρουν. αριθμό έκδοσης της γλώσσας, λες και ήταν γνωστό ότι δεν θα αλλάξει ποτέ.
Έτσι η χρήση της ΓΛΩΣΣΑΣ έχει το πλεονέκτημα για τους συγγραφείς βιβλίων να παρέχουν για πάντα ένα ενήμερο εκπαιδευτικό πόνημα, και ας γράφτηκε το 2000.
Γιατί λοιπόν να προτιμήσουν μια άλλη γλώσσα, και έτσι να μείνουν με τα βιβλία τους για προσάναμμα.
Ξεχάσατε τις άλλες γλώσσες.θα τις ονομάσουν τεχνικές γλώσσες, και θα τις απορρίψουν. Ξεχάσατε αυτόματους πίνακες και συναρτήσεις αλφαριθμητικών. Ξεφεύγουν από το στόχο της αλγοριθμικής.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Γλώσσα Προγραμματισμού Μ2000 έκδοση 8
« Απάντηση #55 στις: 27 Οκτ 2019, 11:20:30 μμ »
Διάβασα το άρθρο του 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, να δηλώνει την συνθήκη και πόσες επαναλήψεις "σπάει" με την υπόδειξη της ετικέτας.