forum.math.uoa.gr

Forum του Τμήματος Μαθηματικών
Ημερομηνία 13 Δεκ 2017, 20:54

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]




Δημιουργία νέου θέματος Απάντηση στο θέμα  [ 17 δημοσιεύσεις ]  Μετάβαση στην σελίδα 1, 2  Επόμενο
Συγγραφέας Μήνυμα
 Θέμα δημοσίευσης: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 21 Δεκ 2006, 22:06 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Εδώ και κάτι χρόνια είχα γράψει μια γλώσσα προγραμματισμού εφαρμογών με συνοδευτικά προγράμματα. Επειδή λόγω ηλικίας δεν έχω χρόνο να ασχοληθώ..σκέφθηκα να ζητήσω από μια φοιτητική κοινότητα να ασχοληθεί με αυτή.

Λίγα λόγια για την γλώσσα Μ2000 (Σκοπός δημιουργίας της γλώσσας)

Αναζητούσα μια δωρεάν γλώσσα για μαθητές σχολείου, που να φτιάχνει ολοκληρωμένες μικρές και εύκολες εφαρμογές. Αφού δεν βρήκα κάτι δωρεάν, αποφάσισα να φτιάξω μια γλώσσα (το είχα ξανακάνει παλαιότερα το 85, σε μικροϋπολογιστές της εποχής), που θα περιλάμβανε γραφικά 2D με καρτεσιανές και πολικές συντεταγμένες, πολυμέσα και βάσεις δεδομένων. Ξεκινησα από το 1997 και έφθασα στηνέκδοση 5 μετά από πέντε χρόνια!

Το περιβάλλον και τα συνοδευτικά προγράμματα της γλώσσας τα έφτιαξα με την Visual Basic 5 enterprise edition.

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

2. Σωρός Τιμών. Η γλώσσα μπορεί να αποθηκεύει τιμές εκτός από μεταβλητές και σε έναν σωρό όπου οι τιμές μπορεί να είναι αριθμητικές ή αλφαριθμητικές και εισάγονται by value (αυτούσιες και όχι δείκτες στις τιμές). Οι συναρτήσεις και οι διαδικασίες δέχονται τιμές μέσω του σωρού αυτού. Οι συναρτήσεις και οιδιαδικασίες δεν δηλώνονται για τον αριθμό και το είδος των παραμέτρων που δέχονται. Ωστόσο οι συναρτήσεις δηλώνονται για το είδος του αποτελέσματος που γυρνάνε. Ο σωρός τιμών είναι χρήσιμος και για τις βάεις δεοδμένων, για να επιστρέφονται μεταβλητός αριθμός τιμών. Το καλό εδώ είναι ότι δεν χρειάζονται δείκτες..ή handlers για ένα heap, γιατί είναι ένας σωρός.

3. Έφτιαξα έναν interpreter, χωρις tokenized μορφή της λίστας των εντολών ενός προγράμματος σε Μ2000. Το πρόγραμμα εκτελείται μέσα σε αναδρομικές συναρτήσεις γραμμένες σε Visual Basic...και έχει υπόσταση ένα αλφαριθμητικό (μαζί με τις αλλαγές γραμμών), κώδικας που τρέχει αποκόπτεται, τμήμα που τρέχει σε βρόγχο είναι το όρισμα μιας συνάρτησης! Οι εντολές ανανωρίζονται με Select Case. O επεξεργαστής αλφαριθμητικών παραστάσεων είναι και αυτός ένα σύνολο αναδρομικών συναρτήσεων και select case. Υποστηρίζονται τοπικές μεταβλητές και τοπικές συναρτήσεις και διαδικασίες (εξαφανίζονται μετά το πέρας της συνάρτησης ή της διαδικασίας που τα δημιούργησε)

4. Η γλώσσα έχει και αγγλικές και ελληνικές εντολές, καθώς και άμεση βοήθεια στα ελληνικά.

5. Τα προγράμματα μπορούν να τρέχουν βηματικά (και να βλέπουμε τις εντολές που θα εκτελέσει το περιβάλλον)

6. Συνοδεύεται με πρόγραμμα συγγραφή προγραμμάτων (IDE), και πρόγραμμα που φτιάχνει εφαρμογές συνδέοντας πρόγραμμα και απαιτούμενα αρχεία για την εγγαρφή σε CD (μετά τρέχουν με autorun).



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

Γιώργος Καρράς
Συγγραφέας μαζί με τον Δρ. Χαρ. Γκούβα, της "Η Ιστορία της Πληροφορικής", Νεα Σύνορα Λιβάνη, 1998 (Αφιερωμένο στη Λέσχη Πληροφορικής Πρέβεζας).

Επίσημος τόπος georgekarras.blogspot.gr


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 01 Αύγ 2015, 11:20 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Έχουν περάσει 9 χρόνια και όπως βλέπω ουδείς ενδιαφέρθηκε! Δεν πειράζει όμως, γιατί παρά τα 48 μου χρόνια συνεχίζω ακάθεκτος...και τώρα έχουμε την έκδοση 8 της γλώσσας με πολλά καλά.
Να ξεκαθαρίσω ότι η γλώσσα Μ2000 δεν γράφτηκε για να ξεπεράσει την C++ ή άλλες υψηλού επιπέδου γλώσσες. Όμως ως μια επίσης υψηλού επιπέδου γλώσσα γράφτηκε για παιδιά που θα ήθελαν την ευκολια της Basic να τρέξουν κώδικα, να τον σταματήσουν, να διασκεδάσουν μαθαίνοντας. Οι τυπικές γλώσσες όπως η C++ δεν είναι καθόλου "διασκεδαστικές" με την έννοια ότι για να πετύχεις διάφορα πράγματα πρέπει να κάνεις πολλά για να ξεκινήσεις, χρειάζεσαι background...
Με την Μ2000 χτίζεις το bagkground που δεν έχεις. Και αυτό γιατί πιάνει πολλά θέματα. Η έκδοση 8 έχει κλάσεις και ομάδες δεδομένων (ως αντικείμενα). Επειδή ήθελα η γλώσσα να μην έχει μόνο ένα μικρό σύνολο εντολών με την έννοια ότι έχει ένα κανάλι εισόδου και ένα εξόδου..και τέρμα, υπάρχουν εντολές για πολλά καλά όπως γραφικά, πολυμέσα, βάσεις δεδομένων (μέχρι και ODBC χρησιμοποιεί κανείς), αλλά και πιο εξεζητημένα όπως νήματα για πολυεπεξεργασία, ασύγχρονες επικοινωνίες με σωληνώσεις, αυτοματισμό γραφείου (διαχείριση άλλων εφαρμογών όπως Word μέσω αντικειμένων που ορίζουμε στη γλώσσα κατά το πρότυπο COM), χρήση εξωτερικών ρουτινών (dll του λειτουργικού συνήθως). Το δε περιβάλλον της γλώσσας έχει δικές του φόρμες που μεγενθύνονται, έχει δικό του επεξεργαστή κειμένου και δεν κάνει χρήση καμίας ειδική βιβλιοθήκης. Για να τρέξει το περιβάλλον χρειάζονται δυο αρχεία, το M2000.exe και το Help2000.mdb (το αρχείο βοήθειας είναι βάση δεδομένων). Δεν χρειάζεται να έχουμε την Access ή κάποια άλλη εφαρμογή για να τρέξουν. Το DAO (σύστημα βάσεων δεδομένων) και η συνοδευτική βιβλιοθήκη της Vb6 υπάρχει σε όλα τα λειτουργικά από τα Vista και μετά (πάντα σε Microsoft). Σε ubuntu τρέχει μεν με το wine αν και καλύτερα είναι να τρέξει σε VirtualBox σε Xp ή 7.

Υπάρχει ένα ημιτελές ακόμα Language Definition εδώ στην αγγλική γλώσσα, το οποίο όμως τελειώνει, και φυσικά υπάρχει η βοήθεια που έχει αρκετά στοιχεία μέσα καθώς και το blog εδώ: georgekarras.blogspot.gr

Ο κώδικας είναι πολύ μεγάλος αφού περιλαμβάνει εκτός από τη γλώσσα και όλο το σύστημα για τα νήματα, πολυεπεξεργασία, καθώς και το παραμικρό μέχρι την ρουτίνα εισαγωγής γραμμάτων -υποστηρίζει όλα τα πληκτρολόγια και όλα τα dead keys, η εφαρμογή υποστηρίζει Unicode, UTF8, UTF16LE UTF16BE αλλά και Ansi. Επίσης όλα τα στοιχεία ελέχγου (controls) εκτός από την φόρμα εκτυπωτή (αυτό δεν γίνεται να το φτιάξω...ο καθένας έχει τη δική του), είναι γραμμένα εξ αρχής, ακόμα και τα comb box, και έχουν όλα δυνατότητα μεγένθυσης - πράγμα που δεν έχουν οι φόρμες των windows..
Μπορεί κανείς να τον κατεβάσει από εδώ

Το Μ2000.exe αρχείο είναι υπογεγραμμένο με το ca.crt ως ριζικό πιστοποιητικό. Μπορεί κανείς σε Visual Basic 6 Enterprise edition να ανοίξει τον κώδικα (αν και είναι σε απλό txt, ανοίγει και χωρίς να μπει στη vb6). Στη vb6 για να τρέξει πρέπει να συνδεθεί μια type library η idispatch.tlb (η οποία βρίσκεται στη συλλογή αρχείων zip από τον τόπο παραπάνω). Αυτή η βιβλιοθήκη τύπου χρησιμοποιείται μόνο για να τρέξει η Μ2000 στο περιβάλλον της Vb6 και όχι στο exe αρχείο (ουσιαστικά δεν περιλαμβάνει ρουτίνες αλλά τον τρόπο χειρισμού του interface idispatch μέσω του οποίου χειριζόμαστε εφαρμογές όπως Word και Excel.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 20 Νοέμ 2015, 23:01 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Ωραίο παράδειγμα με τρία καταγραφικά. Το ένα παίρνει εισαγωγή από Τρίγωνο, το άλλο από Εξάγωνο και το άλλο από κύκλο!
http://georgekarras.blogspot.gr/2015/11 ... st_10.html


εδώ είναι ένα βίντεο με την έξοδο του προγράμματος:
https://youtu.be/rf_TCqk7w58


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 27 Νοέμ 2015, 23:47 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Να και ένα ωραίο πρόγραμμα (απλό) για εκπαίδευση στη κατάταξη!
http://georgekarras.blogspot.gr/2015/11/2000_27.html
Εικόνα:
http://1.bp.blogspot.com/-f206RRPAY9I/VlidawMmagI/AAAAAAAAD7w/zuNJtwwwZlU/s1600/katataxi.png


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 07 Δεκ 2015, 13:58 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Πολυεπεξεργασία:
http://georgekarras.blogspot.gr/2015/12/107.html

Η έκδοση 8 έχει φτάσει στην αναθεώρηση 107. Έχει φθάσει στην ολοκλήρωση του επιπέδου 8, και από δω και πέρα μόνο τυχόν bug θα φτιαχτούν (αν αναφερθούν). Ξεκινάει η συγγραφή του εγχειρίδιου
Υπάρχει στην αγγλική εδώ https://drive.google.com/open?id=0BwSrr ... zd0OENvWlU αλλά είναι παλιάς αναθεώρησης, μη ολοκληρωμένο. Υπάρχουν πολλά ακόμα!

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


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 21 Δεκ 2015, 16:01 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Έκδοση 8 αναθεώρηση 122
Αν δεν βρεθεί Bug...σταματάω την ανάπτυξη μέχρι να γραφτεί το εγχειρίδιο! Υπάρχει ενσωματωμένη βοήθεια (με Βοήθεια και τη λέξη, ή στο διορθωτή με ctrl+f1 ή από το μενού, στη λέξη που έχουμε επιλέξει), αλλά και αυτή θέλει αναθεώρηση-εμπλουτισμό.
Υπάρχει ένα pdf στην Αγγλική εδώ https://drive.google.com/open?id=0BwSrr ... zd0OENvWlU το οποίο θα εμπλουτιστεί αυτές τις μέρες. Και πάνω σε αυτό θα γίνει η ελληνική έκδοση. Είχε γραφτεί πριν φτιάξω το σύστημα αυτόματου χρωματισμού του κώδικα, καθώς γράφουμε και την αντιγραφή στο πρόχειρο σε Html Format.

Στην τελευταία αναθεώρηση 122 (δείτε εδώ: http://georgekarras.blogspot.gr/2015/12/122-lazy.html) έβαλα επιστροφή πολλών τιμών από μια συνάρτηση τα πακετάρει σε έναν πίνακα, υπήρχε η επιστροφή πίνακα αλλά όχι με =1,2,3 \\ που γυρίζει πίνακα με τρία στοιχεία.
Επίσης υπάρχει τρόπος περάσματος περιβάλλοντος για οκνηρή αποτίμηση. Δηλαδή περνάμε μια συνάρτηση που θα αποτιμηθεί σε μια συνάρτηση ή ένα τμήμα και κατά την αποτίμηση θα είναι σαν να βρίσκεται στο τμήμα που δημιουργήθηκε! Στη Μ2000 μπορούμε να περνάμε αναφορές σε συναρτήσεις και αυτές είναι ουσιαστικά αντιγραφές κώδικα, σε ορισμένες δε περιπτώσεις συνοδεύονται και από αναφορά το ονόματος χώρου που δημιουργήθηκαν. Έτσι αν περάσουμε με αναφορά μια συνάρτηση αντικειμένου τότε η συνάρτηση θα συνεχίσει να βλέπει τις μεταβλητές του αντικειμένου (ως στατικές). Αυτό δεν γίνονταν για κανονικές συναρτήσεις. Τώρα φτιάχνουμε συναρτήσεις που ουσιαστικά είναι κώδικας του τμήματος που επιστρέφει τιμή ως ανώνυμη συνάρτηση. Έχω επεκτείνει το λογισμό εδώ, με το να χρησιμοποιήσω μια συνάρτηση με όνομα ως ανώνυμη!
Στο παρακάτω παράδειγμα η Συνάρτηση αα δεν θα χρησιμοποιηθεί με το όνομά της παρά μόνο για να πάρουμε την αναφορά σε αυτή. Κατά την εκτέλεση θα έχει το όνομα του τμήματος που δημιουργήθηκε και για το λόγο αυτό η μεταβλητή α που υπάρχει στο τμήμα θα φαίνεται στην αα (Αφού αα δεν υπάρχει πια στη κλήση)
Στο τμήμα Β περνάμε δυο ανώνυμες συναρτήσεις, απλά η πρώτη παίρνει το κώδικα από ένα όνομα που θα πεταχτεί!
Η μεταβλητή Χ θα δημιουργηθεί στο αρχική τμήμα αλλά στο πέρας της εκτέλεσης της συνάρτησης θα διαγραφεί. Δηλαδή δημιουργείται και διαγράφεται σε κάθε κλήση της ββ() στη γραμμή ? ββ(ι)
Το ? είναι η τύπωσε σε συντομία!
Η συνάρτηση οκν$() παίρνει το κώδικα και τον κάνει ανώνυμη συνάρτηση. Η &αα() δίνει αλφαριθμητικό τον ορισμό της.
Στο τμήμα Β η Διάβασε βλέπει το & και αναζητεί ή πίνακα ή ορισμό συνάρτησης (αλφαριθμητικό με ένα μπλοκ μέσα με αγκύλες). (οι πίνακες καταχωρούνται ως αντικείμενα εσωτερικά, δηλαδή πιάνουν μια θέση στο σωρό τιμών, την ειδική στοίβα που αφήνουμε ή παίρνουμε τιμές από τις κλήσεις σε τμήματα, ή μόνο αφήνουμε σε κλήσεις σε συναρτήσεις)


Κώδικας:
α=10
Συνάρτηση αα {
      Διάβασε Χ
      α+=Χ
      =Χ
}
Τμήμα Β {
     Διαβασε &ββ(), &ββ$()
     Για ι=1 έως 10 {
      ? ββ(ι), ββ$()
      }     
}

Κάλεσε Β, οκν$(&αα()), οκν$(μεσ$("αλφα123456789",τυχαιος(1,10)))
Τύπωσε α \\ Τυπώνει 65


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 06 Ιαν 2016, 02:57 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Αναθεώρηση 135 (η πιο καλή)
Ανέβασα στο blog παραδείγματα με δυαδικό δένδρο, συνδεδεμένη λίστα, πίνακα κατακερματισμού.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 08 Φεβ 2016, 14:04 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Αναθεώρηση 153,
μπήκαν στις κλάσεις οι ετικέτες Ιδιωτικό: (Private:) και Δημόσιο: (Public), που ξεχωρίζουν στο ορισμό μια κλάσεις τι είναι ιδιωτικό και τι δημόσιο.
Η γλώσσα έχει ολοκληρωθεί ως προς τον σχεδιασμό της.
Μπορεί να αποτελέσει εργαλείο για Αντικειμενοστραφή Προγραμματισμό.

Spoiler:
\\ Παράδειγμα Κλάσης στη Μ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
              Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
              .Φύλαξε
              Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
      }
}


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 22 Μαρ 2016, 12:10 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Καλά νέα, αισίως η αναθεώρηση έφθασε στο 194. Τώρα η Μ2000 ενσωματώνει γραφικό περιβάλλον για το χρήστη. Με απλά λόγια φτιάχνουμε παράθυρα και βάζουμε button, textbox,listbox, editbox, checkbox και μπορούμε στην επιφάνεια του παραθύρου να γράψουμε και να σχεδιάσουμε. Θα προσθέσω και άλλα αντικείμενα.
Τα μηνύματα από τα στοιχεία διαβάζονται από συναρτήσεις που φτιάχνουμε σε Μ2000. Το ωραίο είναι ότι τρέχουν άμεσα από το περιβάλλον τα παράθυρα, η Μ2000 είναι interpreter, που δεν φτιάχνει ενδιάμεσο κώδικα, ακολουθεί το κείμενο, ακόμα και όταν εξυπηρετεί μηνύματα από τα παράθυρα. Τις μεταβλητές και τις συναρτήσεις τις βρίσκει με χρήση συνάρτησης κατακερματισμού, άμεσα, σε χρόνο γραμμικό. Ελαφρώς χάνουμε λίγο χρόνο ακόμα αν η λέξη είναι μεγάλη, αλλά δεν είναι τίποτα, επειδή αποφεύγουμε σειριακή ή άλλου τύπου αναζήτηση. Οι συγκρούσεις απαιτούν σειριακή αναζήτηση, αλλά αυτή γίνεται σε ξεχωριστή λίστα, με τα ονόματά που λ έχουν το ίδιο νούμερο θέσης στο πίνακα, και πάντα πρώτο είναι το τελευταίο που μπήκε, έτσι αν ψάχνουμε τοπική μεταβλητή θα βρεθεί με την πρώτη προσπάθεια σχεδόν πάντα.Τα ονόματα μεταβλητών έχουν και το όνομα του τμήματος ή συνάρτησης που ανήκουν. Ο πίνακας κατακερματισμού παίρνει ίδια κλειδιά, χωρίς πρόβλημα, αφού στη γλώσσα πάντα το πιο πρόσφατο είναι θεατή από τη ροή του προγράμματος. Επίσης μπορεί να μεταβάλλεται γρήγορα διότι κρατάει την ενδιάμεση τιμή της συνάρτησης κατακερματισμού που σχετίζεται με τη λέξη, και φτιάχνει νέα λίστα μόνο με πράξεις πάνω στη τιμή που είναι 32 bit αριθμός, και το νέο μέγεθος του πίνακα.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 16 Απρ 2016, 10:00 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Συναρτήσεις λάμδα στη Μ2000
http://georgekarras.blogspot.gr/2016/04 ... st_16.html
Οι συναρτήσεις τύπου λάμδα είναι συναρτήσεις που "μένουν" σε μεταβλητές. Μπορούμε να τις χειριστούμε σαν μεταβλητές, να τις αλλάξουμε, να τις δώσουμε με τιμή ή αναφορά, να κάνουμε επιστροφή. Όμως χρησιμοποιούνται σαν συναρτήσεις.
Επιπλέον μπορούν την ώρα που δημιουργούνται να συλλάβουν μεταβλητές-πίνακες-αντικείμενα ως αντίγραφα και να χρησιμοποιούνται ως τοπικές, χωρίς όμως να χάνονται, εκτός και αν χαθεί η μεταβλητή που δηλώνει την λάμδα συνάρτηση. Με την αντιγραφή της λάμδα έχουμε αντίγραφο και όλων αυτών που έχουμε συμπεριλάβει στο σώμα της.
Επειδή η Μ2000 επιστρέφει ή αριθμούς-αντικείμενα ή λέξεις-αντικείμενα, πρέπει να καθορίσουμε τι θέλουμε ανάλογα με τη χρήση της Λάμδα ή της Λάμδα$
Α=Λάμδα Κ=1 ->{=Κ : Κ++}
Κάθε φορά που θα καλούμε την Α η εσωτερική Κ θα αυξάνει κατά ένα
Τύπωσε Α()
Με την αντιγραφή σώνεται και η κατάσταση της Κ
Β=Α
Οπότε αν χρησιμοποιήσουμε την Α() πέντε φορές και αποφασίσουμε ότι πρέπει να γυρίσουμε πίσω αρκεί αυτό
Α=Β και έχουμε την επιστροφή της Α στην κατάσταση που καταχωρήσαμε στη Β


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 07 Μάιος 2016, 13:38 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
1. Θα ήθελα εδώ να αναφέρω ότι ο κώδικας, του διερμηνευτή της Μ2000, δεν είναι πια σε Visual Basic 5 (όπως αναφέρεται στην αρχική ανάρτηση) αλλά εδώ και μερικά χρόνια είναι σε Visual Basic 6. Ως γλώσσα η Visual Basic 6 φαίνεται ως παλιό προϊόν, αλλά η αλήθεια είναι ότι η παλαιότητα δεν έχει να κάνει κάτι με την χρησιμότητά της. Και αυτό συμβαίνει γιατί τα στοιχεία των windows, του λειτουργικού, είναι εύκολα προσβάσιμα από την
γλώσσα. Μεγάλο θέμα όμως έχει με την μη υποστήριξη unicode σε φόρμες του GUI, του γραφικού περιβάλλοντος. Ενώ ως γλώσσα μπορεί κανείς να φτιάχνει εκδόσεις σε ότι γλώσσα θέλει, δεν μπορεί να αναμείξει γλώσσες.
Όμως επειδή έχει δυνατότητες να συνδέεται με το λειτουργικό, και επιπλέον επειδή χρησιμοποιεί αλφαριθμητικά σε UTF16 (άρα σε unicode), μπορούμε να φτιάξουμε δικά μας παράθυρα, και γενικά στοιχεία ελέγχου (controls) για φόρμες.
Στο διερμηνευτή της Μ2000 πράγματι αυτό γίνεται, και όντως έχει δικά του παράθυρα και στοιχεία ελέγχου (μια σειρά από χρήσιμα στοιχεία), που είναι Unicode, και επιπλέον εμφανίζονται με τον ίδιο τρόπο σε οποιοδήποτε λειτουργικό, από Xp και πάνω.

2. Η τελευταία έκδοση της Μ2000 είναι η 8.1 και σε αυτή την έκδοση μπήκαν οι jagged πίνακες, δηλαδή πίνακες σε πίνακες, καθώς και μια δομή δεδομένων που λέγεται Κατάσταση ή Inventory και είναι μια λίστα τιμών με κλειδί αριθμό ή αλφαριθμητικό (μπορούμε να έχουμε άλλα στοιχεία με αριθμό και άλλα με αλφαριθμητικό, επειδή και ο αριθμός εγγράφεται ως αλφαριθμητικό κλειδί εσωτερικά), οι δε τιμές μπορούν να ποικίλουν ανά θέση (άρα να έχουμε μη ομοειδή λίστα). Η χρησιμότητα της Κατάστασης είναι στην εύρεση, εισαγωγή και διαγραφή σε σταθερό χρόνο. Η εύρεση γίνεται με στάνταρ συνάρτηση κατακερματισμού.(εσωτερικά χρησιμοποιείται σε δυο στάδια η συνάρτηση κατακερματισμού, το ένα έχει να κάνει με το κλειδί και το άλλο με το μέγεθος του πίνακα κατακερματισμού, ώστε σε περίπτωση που χρειάζεται να ανασυνταχθεί ο πίνακας να χρησιμοποιούνται απλοί ακέραιοι τύπου Log ως εισαγωγή στη δεύτερη συνάρτηση). Ανασύνταξη του πίνακα κατακερματισμού γίνεται αν αλλάξει διάσταση (γίνεται αυτόματα με διπλασιασμό), οπότε εκεί έχουμε ένα μικρό πέναλτι σε χρόνο, ή σε ταξινόμηση, επειδή ο πίνακας κατακερματισμού κρατάει δείκτη σε θέση δείκτη, και στη ταξινόμηση οι θέσεις δείκτη θα έχουν αλλάξει. (οι θέσεις δείκτη δείχνουν σε δομές που έχουν τις βοηθητικές τιμές, όπως το όνομα του κλειδιού, την εξαγωγή ως τον ακέραιο της πρώτης συνάρτηση κατακερματισμού, ένα δείκτη στο επόμενο με σύγκρουση κλειδιού, και το δείκτη στην πραγματική τιμή. Αν είχε υλοποιηθεί ο κώδικας με αντικείμενα, θα απαιτούσε "βοηθητικό χώρο" χωρίς τα παραπάνω περίπου 100 bytes, για κάθε εγγραφή, ενώ δεν θα είχαμε πίνακα αλλά "συνδέσεις" μεταξύ των αντικειμένων, και πίνακας κατακερματισμού θα έδειχνε στα αντικείμενα. Σε αναδιάταξη του πίνακα πάλι θα χρειάζονταν να στρώναμε του δείκτες, ενώ σε ταξινόμηση θα είχαμε πρόβλημα, γιατί τα κλειδιά δεν θα ήταν σε διάταξη πίνακα αλλά σε λίστα, άρα θα έπρεπε να γίνει ταξινόμηση σε λίστα (είναι διαφορετικό πράγμα από το να έχουμε ήδη ένα δένδρο, μια δομή λίστας φτιαγμένη για εύρεση, γιατί τότε σε κάθε εγγραφή/διαγραφή θα έχουμε χρόνους που εξαρτώνται από το μέγεθος του δένδρου, ενώ με την υλοποίηση που έχω κάνει ουσιαστικά έχουμε πέναλτι μόνο σποραδικά, και όλες τις άλλες φορές έχουμε γρήγορη εγγραφή-διαγραφή, και πάντα άμεση εύρεση)


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 11 Ιουν 2016, 15:47 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Η κοινότητα της Μ2000, http://m2000.forumgreek.com
Άνοιξε για το κοινό.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 20 Ιουν 2016, 17:39 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Οδηγίες εγκατάστασης του διερμηνευτή της Μ2000
https://docs.google.com/document/d/1jK- ... KFO1NY/pub


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 01 Ιούλ 2016, 18:54 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Μικρό εγχειρίδιο της Μ2000 (79 σελίδες Α4)
Σε αρχείο pdf
https://drive.google.com/open?id=0BwSrr ... zhvZWJ0RVE

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

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

Γ.Κ.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Γλώσσα M2000
ΔημοσίευσηΔημοσιεύτηκε: 19 Μαρ 2017, 19:58 
Χωρίς σύνδεση
Άβαταρ μέλους

Εγγραφη: 21 Δεκ 2006, 20:53
Δημοσ.: 17
Τελικά δεν τελείωσα με την ανάπτυξη της γλώσσας. Η γλώσσα έφτασε στην έκδοση 8.5. Υποστηρίζει αντικείμενα με ιδιότητες όπου ορίζουμε το αν θα έχουν αντικατάσταση και αν θα έχουν εξαγωγή τιμής, και επιπλέον ορίζουμε αν θα έχουν δείκτες. Επιπλέον στα αντικείμενα μπορούμε να ορίσουμε τελεστές. Και άλλα που δεν θα αναφέρω εδώ, για λόγους οικονομίας και φιλοξενίας!


Κορυφή
 Προφίλ  
 
Τελευταίες δημοσιεύσεις:  Ταξινόμηση κατά  
Δημιουργία νέου θέματος Απάντηση στο θέμα  [ 17 δημοσιεύσεις ]  Μετάβαση στην σελίδα 1, 2  Επόμενο

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]


Μελη σε συνδεση

Μέλη σε αυτή την Δ. Συζήτηση : Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης


Δεν μπορείτε να δημοσιεύετε νέα θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να απαντάτε σε θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επεξεργάζεστε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να διαγράφετε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση

Αναζήτηση για:
Μετάβαση σε:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group