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

bugman

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

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

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

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

bugman

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


alkisg

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

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

bugman

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

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


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

bugman

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

bugman

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

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

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

bugman

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

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

bugman

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

bugman

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

bugman

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

bugman

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

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

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

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

bugman

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

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

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




bugman

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


bugman

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

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

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

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


bugman

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

bugman

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

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

bugman

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

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



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

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


bugman

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

bugman

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


bugman

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

bugman

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

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