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

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

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

bugman

#15
Η γλώσσα Μ2000 ολοκληρώθηκε με την εισαγωγή ιδιωτικών και δημόσιων μεταβλητών/πινάκων/τμημάτων/συναρτήσεων/ομάδων στις ομάδες (αντικείμενα της Μ2000).

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

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

Κώδικας: javascript
\\ Παράδειγμα Κλάσης στη Μ2000
Κλάση Αλφα {
Ιδιωτικό:
      χ=1, ψ=1
      παράγοντας=1, παλιά_τιμή
      Συνάρτηση Μηδεν {
            = (.χ=0 και .ψ=0) ή .παράγοντας=0
      }
Δημόσιο:
      Τμήμα  παράγοντας {
              Διάβασε .παράγοντας
      }
      Τμήμα Φύλαξε {
            άλλαξε .παλιά_τιμή, .παράγοντας      
      }
      Τμήμα Αλφα {
            Αν όχι κενό τότε Διάβασε .παράγοντας
      }
      Τμήμα ΆλλαξεΧΨ {
            Διάβασε χ1, ψ1
            .χ<=χ1/.παράγοντας
            .ψ<=ψ1/.παράγοντας
            Αν .Μηδεν() τότε Λάθος "Μηδέν"
      }
      Συνάρτηση ΔώσεΧ {
            =.χ*.παράγοντας
      }
      Συνάρτηση ΔώσεΨ {
            =.ψ*.παράγοντας
      }
}

Α=Αλφα(10)
Α.ΆλλαξεΧΨ 100,50
Τύπωσε Α.ΔώσεΧ(), Α.ΔώσεΨ()
Α.παράγοντας 5
Τύπωσε Α.ΔώσεΧ(), Α.ΔώσεΨ()
\\ καμία από τις παρακάτω δεν είναι έγκυρες εκφράσεις
\\ οι μεταβλητές είναι ιδωτικές
Τύπωσε Έγκυρο(Α.παράγοντας), Έγκυρο(Α.χ)   \\0  0
Πίνακας Α(100)=Αλφα()
Για ι=0 έως 99 {
      Α(ι).ΆλλαξεΧΨ ι**2+1, ι**3+1            
}
Τύπωσε "οκ"
Για ι=5 έως 6 {
      Για Α(ι) {
              Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
              .Φύλαξε
              .παράγοντας 10
              Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
              .παράγοντας 50
              Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
              .Φύλαξε
              Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
      }
}

bugman


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

Κώδικας: javascript
\\ Παράδειγμα 1
κ=1
\\ αρχείο unicode με διαχωρισμό εξαγωγής σε αριθμούς-γράμματα
\\ https://en.wikipedia.org/wiki/Comma-separated_values
Άνοιξε "αλφα.cvs" για ευρεία εξαγωγή ως κ
Γράψε #κ, "Ένα όνομα", 100, 3213, "Привет игровая площадка!"
Κλείσε #κ
Αναμονή 100
Άνοιξε "αλφα.cvs" για ευρεία εισαγωγή ως κ
Ενώ όχι Τέλος(#κ) {
      Εισαγωγή #κ, Α$,Α, Β, Β$
      Τύπωσε Α$,Α, Β, Β$
}
Κλείσε #κ
\\ Παράδειγμα 2
κ=1
\\ χωρίς χρήση BOM (ενδεικτικού χαρακτήρα)
Άνοιξε "αλφα.txt" για ευρεία εξαγωγή ως κ
Τύπωσε #κ, "Γεια χαρά ! == Привет игровая площадка!"
Κλείσε #κ
Αναμονή 100
Άνοιξε "αλφα.txt" για ευρεία εισαγωγή ως κ
Ενώ όχι Τέλος(#κ) {
      Γραμμή Εισαγωγής #κ, Α$
      Τύπωσε Α$
}
Κλείσε #κ
\\ Παράδειγμα 3
κ=1
\\ με χρήση BOM (ενδεικτικού χαρακτήρα)
Άνοιξε "αλφα.txt" για ευρεία εξαγωγή ως κ
Τύπωσε #κ, χαρκωδ$(0xFEFF)+"Γεια χαρά ! == Привет игровая площадка!"
Κλείσε #κ
Αναμονή 100
Άνοιξε "αλφα.txt" για ευρεία εισαγωγή ως κ
Ενώ όχι Τέλος(#κ) {
      Γραμμή Εισαγωγής #κ, Α$
      Τύπωσε Μεσ$(Α$,2)
}
Κλείσε #κ

bugman

#17
Αποφάσισα να γράψω ένα εγχειρίδιο στα ελληνικά (η γλώσσα τελείωσε ως προς την έκδοση 8, θα γίνουν μόνο διορθώσεις αν χρειαστούν). Υπάρχουν 8 τεύχη, και κάθε μέρα ή δυο μέρες θα βάζω και ένα ακόμα. Στο πέμπτο έχω ωραίο παράδειγμα με αντικείμενα!

Εγχειρίδιο της Μ2000 σε τεύχη

bugman

Έβαλα γεγονότα Events στη  Μ2000. Μπορεί κανείς να βάζει ή να βγάζει συναρτήσεις σε ένα Γεγονός, και όταν στέλνουμε δεδομένα πάνε σε όλες, ας πούμε συναρτήσεις εξυπηρέτησης του γεγονότος (multicast λέγεται αυτό). Μπορούμε να περνάμε και με αναφορά ώστε να επιστρέφουμε τιμές από το σημείο που σηκώσαμε ένα γεγονός (καλέσαμε μάλλον). Το παράδειγμα είναι γραμμένο με τις αγγλικές εντολές της Μ2000, μπορεί να γραφτεί και με τις ελληνικές. Εδώ σηκώνουμε ένα OnSpaceBar γεγονός που έχουμε δημιουργήσει, και ένα νήμα ξεκινάει μια εργασία, πρώτα όμως απενεργοποιεί  (hold) το αντικείμενο OnSpaceBar για να μην δεχτεί άλλα μηνύματα και μετά συνεχίζει (ενώ παράλληλα το Main.Task εξυπηρετεί, π.χ. μπορούμε να διακόψουμε τη διεργασία), και στο τέλος ενεργοποιεί (release) ξανά το γεγονός. Συνάμα για να έχει ενδιαφέρον, ένα αντικείμενο έχει δυο γεγονότα και μέσα από αυτά καταγράφει πόσες γραμμές εμφανίζουμε και πόσες ολοκληρωμένες εργασίες έκανε το νήμα. Το νήμα απλά μας δείχνει το ποσοστό ολοκλήρωσης (το μοιράζουμε σε 30 διαστήματα). Για το νήμα και το κύριο έργο που είναι νήμα και αυτό δίνουμε ένα αριθμό, σε χιλιοστά του δευτερολέπτου που θα ξεκινάει ο κώδικάς τους (δεν μπορεί να ξεκινήσει ενώ ήδη τρέχει γιατί όταν τρέχει ένα νήμα έχει βγεί από την ουρά αναμονής και είναι στην ουρά εκτέλεσης, και μόνο όσα νήματα είναι σε αναμονή δύναται να ξεκινήσουν). Ο τρόπος που δίνουμε "Εργασία" στο νήμα είναι με το να κάνουμε εκτέλεση εντολών από άλλο νήμα, με την execute. Με την εντολή Data βάζουμε στο τέλος του σωρού τιμών..τιμές  (από εκεί διαβάζει η Διάβασε ή Read). Τα νηματα στο ίδιο τμήμα έχουν κοινές τις μεταβλητές και τις συναρτήσεις, αλλά χωριστά τις στατικές μεταβλητές και τον σωρό τιμών (την ουρά). Επίσης τα νήματα δεν έχουν όνομα αλλά αριθμό, και αν βάλουμε τον ορισμό σε επανάληψη θα μας φτιάξει ο διερμηνευτής κάμποσα!

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

Κώδικας: javascript
Event OnSpaceBar {
      Read  t, a$, b
}
Class Inform1 {
Private:
      total, complete
Public:
      Event AddOne { }
      Event Print { 
            Read what$
      }
      Function Any {      
                  Read a$
                      .total++
                     Print a$
            }    
      Function AddNow {
            .complete++
      }
      Module Init {
           Event .Print new .Any()
           Event .AddOne new .AddNow()
      }
      Module PrintHelp {
            Call Event .Print
      }
      Module AddHelp {
            Call Event .AddOne
      }
      Module TotalPrint {
            Print "Total Lines:", .total
            Print "Complete Works:", .complete
      }
}
Global Group Inform=Inform1()
\\ fix references when we have an instance
Inform.init
Function OnSpaceHandler {
      Read  thr, t$, kk
      Thread thr execute data t$, kk 
      \\ we need the global here
      Inform.PrintHelp "ok"
}
Event OnSpaceBar New OnSpaceHandler() 

Thread {
      Static a$, payload, t 
      If t=0 Then {
            Inform.PrintHelp "no job......yet"
            If Not Empty Then {
                  Event OnSpaceBar Hold
                  Read a$, payload
                  t=payload
            }
       } Else {
             Inform.PrintHelp format$("working {0:2}%",(payload-t)/payload*100)
             t--
             If t<1 Then Event OnSpaceBar Release : Inform.AddHelp
       }      
} As theThread Interval 50

Main.Task 50 {
      select case inkey$
      case ""
            Inform.PrintHelp "wait...."
      case " "
            Call Event OnSpaceBar, theThread, "hello", 30  
      else
            break
      end select
}
Threads Erase
Inform.TotalPrint

bugman

Αφού έβαλα το αντικείμενο Γεγονός ήρθε η ώρα για GUI, διεπαφή με παραθυρικό περιβάλλον. Τα παράθυρα που φτιάχνει η VB6 δεν κάνουν για την M2000, για αρκετούς λόγους. Ένας είναι ότι δεν είναι unicode,  υποχρεωτικά εξυπηρετούν μια γλώσσα. Ένας άλλος είναι ότι σπάνε την ροή νημάτων, τη πολυεπεξεργασία δηλαδή, αν μετακινήσει κανείς τη φόρμα, ή αν κρατάει πατημένο το κουμπί που την κλείνει.
Ήδη από το 2014 έχω φτιάξει τις βασικές, πχ άνοιγμα αρχείου, με δικά μου παράθυρα, τα οποία δεν σταματούν τα νήματα, είναι unicode, και βγαίνουν ακριβώς  τα ίδια σε οποιαδήποτε Windows.
Στην αναθεώρηση 183 έχω βάλει φόρμες χρήστη, προς το παρόν μόνο buttons βάζουμε, αλλά σε λίγες μέρες θα έχω φτιάξει τους wrappers για τα υπόλοιπα. Οι wrappers είναι ενδιάμεσα αντικείμενα. Επειδή στις φόρμες χρήστη τα αντικείμενα όπως buttons μπαίνουν κατά  βούληση, χρειάζονται ένα αντικείμενο να μαζεύει τα μηνύματά κάθε στοιχείου, ένα για το καθένα. Για να υπάρχει δηλαδή έλεγχος του κλικ, πρέπει να δηλωθεί μια άμεση σχέση. Εφόσον η φόρμα μας θα πάρει άγνωστο αριθμό γραφικών στοιχείων διεπαφής, δεν θα μπορεί άμεσα να διαχειριστεί τα γεγονότα που έχουν.και παράγουν αυτά. Τα αντικείμενα wrappers, παίρνουν τα μηνύματα από το αφοσιωμένο  γραφικό στοιχείο τους και το στέλνουν στη φόρμα, η οποία κρατάει ένα αντικείμενο Γεγονός της Μ2000, και το πυροδοτεί, μεταφέροντας το μήνυμα, από το στοιχείο και μια αναφορά στή φόρμα. Η αναφορά μπορεί να χρησιμοποιηθεί στον αποδέκτη των μηνυμάτων, για επικοινωνία με τη φόρμα πριν εκτελέσει αυτός το κλικ για παράδειγμα σε ένα button.
Το ενδιαφέρον στη Μ2000 είναι ότι με τη χρήση νημάτων μπορούμε να φτιάξουμε παράδειγμα, το έχω αναρτήσει, όπου η εκτέλεση των μηνυμάτων  να γίνεται ασύγχρονα. Πχ. σε ένα button έχω βάλει να ανοίγει ένα message box, φτιαγμένο με στοιχεία της Μ2000, το οποίο σταματάει την ροή εντολών περιμένοντας να πατήσουμε Εντάξει ή Άκυρο. Χωρίς την ασύγχρονη λειτουργία, κανένα άλλο μήνυμα δεν θα ήταν αποδεκτό. Βάζοντας τη αναμονή του message box σε νήμα, και επειδή έχει σχεδιαστεί να επιτρέπει την εκτέλεση νημάτων, συνεχίζει το σύστημα να δέχεται έτσι μηνύματα. Στο παράδειγμα που έχω ανεβάσει χρησιμοποιώ διπλό νήμα. Γιατί αν το ένα είναι σε αναμονή, τα μηνύματα συσσωρεύονται, και θα εκτελεστούν στην συνέχεια, ενώ με το δεύτερο νήμα εκτελούνται άμεσα. Με δύο μεταβλητές ελέγχω αν ένα νήμα, από τα δύο για την εκτέλεση  των μηνυμάτων, είναι μπλοκάρισμένο και δεν το τροφοδοτώ.
ΓΚ

bugman

#20
Ανέβασα το τεύχος 27 του εγχειριδίου με δυο προγράμματα για γραφήματα! Η Μ2000 χρησιμοποιεί Twips και έτσι μπορεί με τις ίδιες εντολές να τυπώνει σε εκτυπωτή (1440 Twips σε εκτυπωτή είναι πάντα μια ίντσα).


bugman

#21
Αυτό το καιρό βάζω GUI για το χρήστη στην Μ2000. Δηλαδή να μπορεί κανείς να φτιάξει τα δικά του παράθυρα με στοιχεία ελέγχου. Τα γραφικά που έδειξα στο προηγούμενο μήνυμα μπορούν να βγουν στο παράθυρο αλλά επιπλέον έχουμε buttons και textboxes.
Θέλω να δω πώς θα ονομάζω τα buttons, textboxes, combo και άλλα στα ελληνικά!
Καμία πρόταση ή αν υπάρχει κάποια αποδεκτή ελληνική ορολογία, θα ήταν επιθυμητή!
Ευχαριστώ!
Εικόνα από το τελευταίο παράδειγμα με τρία παράθυρα και τρία νήματα που σχεδιάζουν (και μεις μπορούμε να σχεδιάσουμε, με κύκλους, με το ποντίκι, αφού το μήνυμα MouseMove το παίρνουμε και εκτελούμε το κώδικα που θέλουμε). Μια μεταβλητή Ν γράφει πόσα παράθυρα θα φτιαχτούν (σε πίνακα) και σε κάθε παράθυρο φτιάχνουμε ένα πίνακα στοιχείων με δυο Buttons.
Το πρόγραμμα στη Μ2000 είναι στα αγγλικά (υπάρχουν και οι ελληνικές εντολές) αλλά έχω θέμα με το πως θα λέω τα στοιχεία στα ελληνικά!

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


bugman

Αναθεώρηση 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

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



bugman

Έκδοση 8.2 (αν. 1)
Έχει ολοκληρωθεί η γλώσσα. Έχει γίνει ActiveX και μπορεί να τρέχει μέσα από άλλες γλώσσες, ενώ μπορεί και η ίδια να τρέχει άλλες script γλώσσες, όπως vbScript και javascript, και μάλιστα να δίνει το αντικείμενό της ώστε αυτές οι γλώσσες να καλούν πίσω, και να δίνουν τιμές ή να χρησιμοποιούν την κονσόλα της, τα γραφικά της, τις φόρμες της.

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

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

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

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


bugman

Μια και τελείωσε η ανάπτυξη της Μ2000, έφτιαξα το φόρουμ http://m2000.forumgreek.com/
μια κοινότητα συζήτησης και παρουσίασης προγραμμάτων σε Μ2000.
Τώρα που έρχεται καλοκαίρι και υπάρχει χρόνος για τους καθηγητές, ας του ρίξουν μια ματιά, και εκεί ας κάνουν προτάσεις ή να αναφέρουν ιδέες πάνω στην χρησιμότητα της Μ2000.


bugman


bugman

Μικρό εγχειρίδιο της Μ2000 (79 σελίδες Α4)
Σε αρχείο pdf
https://drive.google.com/open?id=0BwSrrDW66vvvS2lzQzhvZWJ0RVE

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

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

Γ.Κ.

bugman

Συνεχίζεται η βελτίωση της Μ2000. Έκδοση 8.2 αναθεώρηση 13. Η αξία της γλώσσας δεν είναι στην χρήση της, αλλά στην ύπαρξή της. Με την παρουσία της από το 1999 που γράφτηκε η πρώτη έκδοση έχει την δική της επίδραση στον εκπαιδευτικό χώρο ακόμα και ως αντι-παράδειγμα. Αυτό που ήθελα, μια εύκολη γλώσσα με δυνατότητες στο σχολείο, έγινε με την επιλογή της Python. Η εκπαίδευση σε αλγόριθμους και μόνο μειώνει το ενδιαφέρον του μαθητή. Η ιδέα μου είναι  ο προγραμματισμός στο σχολείο να επιτελεί ένα χρηστικό μέσο εισαγωγής στην έννοια της εφαρμογής. Ο αλγόριθμος περιγράφει ένα συγκεκριμένο πρόβλημα, σαν μια μαθηματική άσκηση. Η εφαρμογή περιέχει μεν αλγόριθμους αλλά προσαρμόζεται στις ανάγκες του χρήστη, που σημαίνει ότι ο κάθε προγραμματιστής-μαθητής θα σκεφτεί την εφαρμογή ως προϊόν, τι χαρακτηριστικά έχει, πόσο εύκολη είναι στη χρήση, τι προρυθμίσεις παρέχει; Τελικά κάθε μαθητής θα δώσει την εικόνα της δικής του προσωπικότητας με την εφαρμογή του, και όχι απλά με την αναπαραγωγή ενός αλγόριθμου. Να περάσουμε από την απόδειξη κατανόησης, του ίδιου για όλους, στην προβολή της ικανότητας, του διαφορετικού. Έτσι θα φανούν τα παιδιά που θα το αγαπήσουν περισσότερο και θα θελήσουν να ασχοληθούν επαγγελματικά, ως κύρια δουλειά ή ως υποστηρικτή.

bugman

Οδηγός Εγκατάστασης και παράδειγμα με λάμδα συνάρτηση και αντικείμενο Κατάσταση (λίστα με κλειδί, εσωτερικά δουλεύεi με Πίνακα Κατακερματισμού)

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



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

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