Προς το περιεχόμενο

Ενημέρωση για τη Μ2000 (Γλώσσα προγραμματισμού)


M2000

Προτεινόμενες αναρτήσεις

 

Οι διαφορές αρχίζουν όταν δούμε ότι η Μ2000 έχει φωλιασμένες συναρτήσεις και τμήματα. Εδώ έχουμε διαφορά και με την java. Έστω στο τμήμα alfa έχουμε τα τμήματα beta και delta. Πριν καλέσουμε την alfa τα beta και delta δεν είναι "δημοσιευμένα", δεν υπάρχουν δηλαδή, παρά μόνο ως ορισμοί στην alfa. Δεν μπορούμε να καλέσουμε το Alfa.beta 

 

Δηλαδή θα μπορούσαμε να πούμε πως η Μ2000 έχει "υπο-συναρτήσεις" που δηλώνονται μέσα σε συναρτήσεις ?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι βέβαια, αλλά πρέπει να κατανοήσεις η δήλωση ορισμού δεν φτιάχνει την συνάρτηση αλλά την βάζει σε μια λίστα, όπου το όνομα είναι εντός σκοπού. Μόλις κληθεί τότε "εφαρμόζεται" ο κώδικάς της σε ένα νέο αντικείμενο εκτέλεσης. Αν καλέσει τον εαυτό της τότε ξεκινάει νέο αντικείμενο εκτέλεσης με τον κώδικά της. Δηλαδή ενώ σε γλώσσες με compiler ή P-code, έχουμε μια συνάρτηση σε γλώσσα μηχανής ή ενδιάμεσο κώδικα, και λογικά έχει μια διεύθυνση, στη Μ2000 δουλεύει με την χρήση αντικειμένων εκτέλεσης, κάτι σαν μικρoί υπολογιστές, και αντί για διεύθυνση έχει "σειρά εμφάνισης" και όνομα.

Το πλεονέκτημα της χρήσης κώδικα πάνω σε αντικείμενο εκτέλεσης εμφανίζεται στη χρήση νημάτων. Κάθε συνάρτηση και τμήμα μπορεί να δημιουργήσει νήματα. τα οποία είναι κώδικας που φορτώνεται σε ένα άλλο αντικείμενο εκτέλεσης και τρέχει ανά τακτά χρονικά διαστήματα. Επίσης με τη χρήση του αντικειμένου εκτέλεσης είναι σαν να έχουμε και τον debugger ενσωματωμένο (μπορεί κανείς να ανοίξει με CTRL και κάποιο γράμμα (εκτός από αυτά που έχουν κάποια σημασία, τα άλλα ανοίγουν την φόρμα Δοκιμή όπου μπορούμε να δούμε μεταβλητές και κώδικα που τρέχει...χρωματισμένος). Το μειονέκτημα είναι ότι δεν είναι τόσο γρήγορο αυτό όσο η γλώσσα μηχανής ή το p-code. Αλλά αυτό δεν είναι το ζητούμενο με την Μ2000.

 

Μια συνάρτηση στη Μ2000 δεν μπορεί "φυσιολογικά" να δει άλλες μεταβλητές εκτός από τις δικές της και ότι έχει οριστεί γενικό. Αν κάποιος ορίσει κάτι που είναι γενικό τότε το γενικό για τη συνάρτηση χάνεται, αλλά αν καλέσει αυτή κάτι άλλο, τότε το άλλο θα δει το γενικό κανονικά. Αν θέλουμε μπορούμε να ορίσουμε κάτι γενικό μέσα στην συνάρτηση, και τότε για όσο αυτή θα εκτελείται ότι δημιουργηθεί από εκείνη τη στιγμή θα βλέπει αυτό το γενικό.

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

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

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

Υπάρχουν διάφοροι τρόποι περάσματος τιμών με τον ανώτερο...αυτό που καλέσαμε να καλέσει πίσω και να εκτελεί συναρτήσεις και τμήματα....που κανονικά δεν θα έβλεπε!

 

Μπορούμε να καλέσουμε μια συνάρτηση λάμδα που είναι σε μια κατάσταση, που είναι σε ένα πίνακα που είναι σε μια κατάσταση:

 

α=λάμδα->10**αριθμός
Τύπωσε α(2) \\100
Κατάσταση άλφα= "κάτι":=α
Πίνακας β(10)
β(3)=άλφα
Κατάσταση βήτα= "κάτι άλλο":=β()
Τύπωσε βήτα("κάτι άλλο")(3)("κάτι")(5) \\100000

 

θα μπορούσε να τερματίσει η παραπάνω συναρτηση (έστω ότι είναι συνάρτηση) και να επιστρέψει το βήτα.

όλα τα άλλα θα διαγραφούν αλλά το βήτα θα δίνει αυτό Τύπωσε βήτα("κάτι άλλο")(3)("κάτι")(5)

(γιατί κρατάει αντίγραφο του πίνακα και ο πίνακας αναφορά στην κατάσταση που δεν έχει πια όνομα)
 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Έκδοση 8.1 αναθεώρηση 20.

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

Τώρα βέβαια έχω installer που βάζει αυτόματα το Regsvr32 (η Μ2000 είναι αντικείμενο όπως το Word, μπορεί να την ανοίξει κανείς μέσα από το Word, απλά υπάρχει η Μ2000 στις λίστα με τα αντικείμενα που γνωρίζουν τα Windows. Υπάρχει ένα M2000.exe με λίγα megabytes που ξεκινάει τη γλώσσα σαν αντικείμενο. Σε αυτό έχω φτιάξει τον stack σωστά (δεν χρειάζεται στο dll γιατί παντρεύεται το σωρό που έχει το πρόγραμμα exe που ανοίγει το αντικείμενο. Υπάρχει όριο 14500 κλήσεις με αναδρομή σε συναρτήσεις. Σε ρουτίνες μπορούμε να ρυθμίσουμε το όριο, γιατί δεν απασχολούν τον σωρό (οι μεταβλητές φτιάχνονται σε heap)

 

 

Το M2000,exe είναι ακριβώς αυτό (με μια φόρμα about που βγαίνει αν γράψουμε /? ή -η στην γραμμή εντολών)

Παίρνει την command line σε unicode και την δίνει στο αντικείμενο Μ2000.callback.

(αν το βάλει κανείς σε αντικείμενο μπορεί να πάρει και ένα event για τα λάθη).

VB6

Dim m As New M2000.callback
Private Declare Function GetCommandLineW Lib "KERNEL32" () As Long
Private Declare Function lstrlenW Lib "kernel32.dll" (ByVal psString As Long) As Long
Private Declare Sub PutMem4 Lib "msvbvm60" (ByVal Ptr As Long, ByVal Value As Long)
Private Declare Function SysAllocStringLen Lib "oleaut32" (ByVal Ptr As Long, ByVal Length As Long) As Long

Public Function commandW() As String
      Static mm$
      If mm$ <> "" Then commandW = mm$: Exit Function
      If m_bInIDE Then
            mm$ = Command
      Else
      Dim Ptr As Long: Ptr = GetCommandLineW
      If Ptr Then
            PutMem4 VarPtr(commandW), SysAllocStringLen(Ptr, lstrlenW(Ptr))
                  If AscW(commandW) = 34 Then
                        commandW = Mid$(commandW, InStr(commandW, """ ") + 2)
                  Else
                        commandW = Mid$(commandW, InStr(commandW, " ") + 1)
                  End If
            End If
      End If
      If mm$ = "" And Command <> "" Then commandW = Command Else commandW = mm$
End Function

Sub Main()
      Dim a$
      Debug.Assert (InIDECheck = True)
      m.Run "start"
      a$ = commandW
      If Trim$(a$) = "-h" Or Trim$(a$) = "/?" Then frmAbout.Show: Exit Sub
      If m.Status = 0 Then
            m.Cli a$, ">"
      End If
      m.ShowGui = False
      Debug.Print "ok"
End Sub

Public Function InIDECheck() As Boolean
    m_bInIDE = True
    InIDECheck = True
End Function

 

 

Επεξ/σία από M2000
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 εβδομάδες αργότερα...

Ανέβασα αφενός μια "τελική" αν όχι "από τις τελευταίες" αναθεώρηση

 

Επιπλέον ανέβασα ένα ωραίο θέμα http://georgekarras.blogspot.gr/2016/06/c-2000.html

για το πως μέσα από την Μ2000 τρέχουμε κώδικα C.

Ο κώδικας της C είναι γραμμένος σε μια ξεχωριστή συνάρτηση και από εκεί τον παίρνουμε και τον στέλνουμε στο gcc, γίνεται dll και το φορτώνουμε και μετά το χρησιμοποιούμε.

Έχω ένα παράδειγμα με δυο συναρτήσεις, στη μία περνάμε ένα πίνακα long και σε χρόνο dt τον γεμίζει με νούμερα από έναν απλό τύπο, και στην δεύτερη δίνουμε δυο long και παίρνουμε το γινόμενο.

Χρησιμοποιώ τον gcc minGW (http://www.mingw.org/)

 

Αυτός είναι ο κώδικας. Στη Μ2000 μπορούμε να φτιάχνουμε δομές (structures) και να τις περνάμε με δείκτη. Έτσι περνάμε τον πίνακα.

/* C Code for DLL 
*  from an example in M2000
*  Using gcc from http://www.mingw.org/
*  gcc -c -DBUILD_DLL adll3.c
*  gcc -shared -o adll3.dll adll3.o -Wl,--out-implib,libmessage.a
*/
long add2(long a[], long 
{
      long i, m;
      m=a[0]+2;
      for (i=0;i<b;i++)
                  a[i]=i+m ;
         return 0;
}

long mult(long num1, long num2)
{
   long product;
   product = num1 * num2;
   return product;
}
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αναθεώρηση 27, τελική.

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

Υπάρχει άμεση εγκατάσταση (την έχω φτιάξει με το Inno Setup Compiler). Δεν χρειάζεται να τρέχει με elevated rights, ούτε χρειάζεται ρύθμιση γλώσσας, τρέχει σε οποιοδήποτε περιβάλλον (είναι Unicode).

Το πρόγραμμα το φτιάχνω σε VirtualBox και είναι απομονωμένο, δεν χρησιμοποιώ άλλα προγράμματα σε αυτό. (η βάση είναι Linux)

Όποιος το χρησιμοποιήσει ας γράψει τις εντυπώσεις ή τις απορίες του!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αναθεώρηση 27, τελική.

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

Υπάρχει άμεση εγκατάσταση (την έχω φτιάξει με το Inno Setup Compiler). Δεν χρειάζεται να τρέχει με elevated rights, ούτε χρειάζεται ρύθμιση γλώσσας, τρέχει σε οποιοδήποτε περιβάλλον (είναι Unicode).

Το πρόγραμμα το φτιάχνω σε VirtualBox και είναι απομονωμένο, δεν χρησιμοποιώ άλλα προγράμματα σε αυτό. (η βάση είναι Linux)

Όποιος το χρησιμοποιήσει ας γράψει τις εντυπώσεις ή τις απορίες του!

Μέσω vigrant τρέχεις το windows vm?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Virtual Box

αυτό που αναφέρεις πρώτη φορά το βλέπω.

 

(τελική αναθεώρηση 28. έδωσα 5% ταχύτητα παραπάνω...ήξερα πώς να γίνει απλά δεν έβρισκα χρόνο και αφού τελείωσα με αυτά που είχα σκοπό...το έφτιαξα)

 

Η Assembly ακυρώθηκε...μπορεί κανείς να γράφει dll σε C και να τα χρησιμοποιεί από την Μ2000.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έκδοση 8.2

μπήκε ο χειριστής << μπορεί να δει κανείς παραδείγματα στο Blog

Κάποιοι αναρωτιούνται δημοσίως για το "ποιος ο λόγος ύπαρξης της Μ2000".

Εγώ καμία φορά σκέφτομαι "ποιος ο λόγος ύπαρξης αυτών των παιδιών...που σκέφτονται αυτά". Και τελικά η απάντηση είναι απλή:

Υπάρχει η Μ2000 γιατί το ήθελα

Υπάρχουν και αυτοί που αναρωτιούνται....και ας μην το ήθελα, γιατί το ήθελε η μάνα τους και πατέρας τους...Τι να κάνουμε θα ζήσουμε και με αυτούς, και με τις γλώσσες προγραμματισμού, και ας λέγονται Μ5 ή Μι16 ή Μπιπ. 2000

 

Η Μ2000 είναι Project ζωής. Με την 8.2 έκδοση υποτίθεται ότι τελείωσα τη δουλειά και γράφω το εγχειρίδιο στα ελληνικά (υπάρχει στα αγγλικά αλλά θέλει αναθεώρηση-εμπλουτισμό).

Αυτό που θα μείνει ακόμα και αν δεν χρησιμοποιηθεί είναι για μελέτη. Πόσες φορές μελετήσαμε κώδικα, που δεν χρησιμοποιούσαμε;

Επειδή έχει γίνει ActiveX μπορεί να ανοιχτεί ακόμα και από τη C# και να χρησιμοποιήσει κανείς το παραθυρικό περιβάλλον της Μ2000.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δοκιμή της 8.2 σε υπολογιστή με Windows 7 στο Notepad που είναι γραμμένο με την M2000 ( το στοιχείο EditBox της Μ2000 παίρνει και λίστα εντολών για χρωματισμό)

(Η Μ2000 δεν χρησιμοποιεί τα στοιχεία παραθύρων των Windows, αλλά έχει δικά της πιο απλά και εύκολα στη χρήση).

 

 

post-370421-0-87391900-1465396442_thumb.png

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ευχαριστώ για το χώρο στο Insomnia, η ανταπόκριση ήταν θετική /εξαιρουμένων κάποιον αισχρών μελών).

Η κοινότητα της Μ2000 άνοιξε εδώ: http://m2000.forumgreek.com/

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

από εγκατάσταση σε Windows 10

δεν είχα περάσει καν τα ελληνικά. Είχε ένα θέμα ότι έπρεπε να επιλεγεί πριν το setup το fax, και το inno ήθελε admin rights για να καταχωρήσει το m2000.dll (είναι ActiveX αντικείμενο, όχι Web ActiveX)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχετε πάρει την VB6 και την έχετε απλοποιήσει... δέν μου κάνει για νέα γλώσσα προγραμματισμού.. κάτι ανάλογο έχουν κάνει στο ΕΜΠ με την Pazcal που είναι υποσύνολο της C σάν "εκπαιδευτική γλώσσα" για φοιτητές που δέν ξέρουν τίποτε από προγραμματισμό..  

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators

Έχετε πάρει την VB6 και την έχετε απλοποιήσει... δέν μου κάνει για νέα γλώσσα προγραμματισμού.. κάτι ανάλογο έχουν κάνει στο ΕΜΠ με την Pazcal που είναι υποσύνολο της C σάν "εκπαιδευτική γλώσσα" για φοιτητές που δέν ξέρουν τίποτε από προγραμματισμό..  

ναι και μετα απο τυπωσε υπο , πενα κτλ θα πας να δεις printf, scanf, try/catch,  etc και δεν θα ξερεις τι διαβαζεις. Ειναι σαν να θες να μαθεις μια νεα ξενη γλωσσα πχ Αγγλικα και οι λεξεις να ειναι γραμμενες με ελληνικους χαρακτηρες και αφου εχεις ριξει 1 χρονο διαβασαμ να πας να διαβασεις κειμενο με αγγλικους χαρακτηρες και να λες "τι ειναι αυτο!?"

 

Καλη φαση σαν προσωπικο προτζεκτ αλλα δεν εχει να προσφερει τιποτα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@SIMkartaUK,

περίμενε μέχρι να δεις το εγχειρίδιο χρήσης. Προφανώς αν δεις αυτό της Μ2000 και εκείνο της VB6 θα αντιληφθείς ότι δεν έχουν καμία σχέση.

Ασφαλώς αν μάθεις να οδηγείς αυτόματο αμάξι και δεν πάρεις ποτέ τέτοιο στη ζωή σου, δεν θα σου χρησιμεύσει. Όμως πόσοι έμαθαν με ταχύτητες και μετά πήγαν σε αυτόματο χωρίς εξετάσεις; Όλοι όσοι τελικά πήραν αυτόματο. Έτσι ξεκινούν όλοι με το ευτελές και μετά αν τους κάτσει πάνε και στο άλλης, μεγαλύτερης αξίας. Αν πούμε ότι η c++ και η c είναι τοπ γλώσσες, τότε η εκκίνηση με αυτές είναι λάθος. θα κάνεις δέκα μέρες να βρεις γιατί ο δείκτης πήγε αλλού για αλλού. Πρέπει να έχεις καλό έλεγχο, και δεν θα τον αποκτήσεις με το δύσκολο αλλά με την τριβή από το εύκολο. Όποιος νομίζει ότι προγραμματισμός είναι να θυμάται τι κάνει η printf και όχι το πότε θα την χρησιμοποιήσει, χάνει την έννοια του προγραμματισμού. Ο προγραμματισμός είναι σαν το σκάκι. Όλες οι εντολές είναι μπροστά σου. Ανοίγεις το εγχειρίδιο και τις βρίσκεις. Ψάχνεις το διαδίκτυο για ιδέες, πάλι βρίσκεις. Όμως θα φτιάξεις μια υπηρεσία τύπου LinkedIn που ο άλλος την πούλησε 26 δις δολάρια; Τι σου λείπει; Όχι η γλώσσα αλλά το σχέδιο. 

Η Μ2000 σε μαθαίνει το σχέδιο, να σχεδιάζεις το πρόγραμμά σου. Άμα το μάθεις παίζεις σε κάθε γλώσσα. Είναι μια γλώσσα για να φτιάχνεις γρήγορα εφαρμογές, αλλά δεν έχει wizards...Ο Wizard είσαι εσύ!


@Spect, 

η Μ2000 έχει και αγγλικές εντολές (έχει δυο λεξικά), άρα δεν υπάρχει θέμα με τι θα γράψεις. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators

Το σχεδίο στο μαθαίνουν οι αλγόριθμοι όλα τα αλλά τα μαθαίνεις με την πράξη στην γλώσσα που θα επιλέξεις να ασχοληθείς ανάλογα με το τι θες να φτιάξεις.

 

Δεν έχω δει τις αγγλικές εντολές αλλά αν δεν έχουν σχέση με την γενική ορολογία που παίζει πάλι θα σε μπερδεύει

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επισκέπτης
Αυτό το θέμα είναι πλέον κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...