Σάββατο, 4 Ιουνίου 2016

Αναθεώρηση 26 -(τελευταίες...πινελιές)

Στην αναθεώρηση 26, έβαλα το ESC να σταματάει ένα While True {}, ένα Repeat {}  Always, ένα Do { } Until false, στο νορμάλ τρόπο εκτέλεσης.

Γενικά υπάρχουν 3 τρόποι εκτέλεσης κώδικα:
  1. Αργά
  2. Γρήγορα
  3. Γρήγορα !
Ο πρώτος εισάγει περισσότερο χρόνο για το λειτουργικό, οπότε γίνονται συχνότερα οι ανανεώσεις οθόνης και το διάβασμα του πληκτρολογίου
Ο τρίτος τρόπος δεν κάνει καμία ανανέωση οθόνης αν δεν την ανανεώσουμε με εντολή Refresh ή Ανανέωση.
Ο νορμάλ τρόπος κάνει ανανεώσεις επιλεκτικά (όχι τυχαία), βάσει ενός μετρητή. Μια Ανανέωση 1000 θα πει στο σύστημα να ανανεώνει κάθε 1 δευτερόλεπτο.

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

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

Επιπλέον έχω γράψει μερικές σημειώσεις για τον κώδικα, την χρήση τοπικών μεταβλητών και ρουτινών.

\\ Δοκιμές ταχύτητας
Φόρμα 80,40
\\ ορίζουμε τοπικές μεταβλητές - δεν είναι απαραίτητο, αλλά πρέπει να είναι στη αρχή του κώδικα
\\ ... και πάντως όχι σε επανάληψη.
Τοπικές α, ι, χ1,χ2,χ3, εμφάνιση=αληθές, επαναλήψεις=10000
\\ $(4,10), αναλογική γραφή, με χρήση στηλών 20 χαρακτήρων μη αναλογικών
Τύπωσε $(4, 10),
\\ εντός τμημάτων οι εντολές Αργά και Γρήγορα θέλουν το πρόθεμα Θέσε
\\ Το "Θέσε" στέλνει τις εντολές στο CLI, μεταφραστή γραμμής
      Θέσε Αργα
\\ οι ρουτίνες καλούνται ή με την Διαμέσου (Gosub) ή άμεσα
\\ Στα ονόματα των ρουτινών κεφαλαία-πεζά-τονισμένα είναι σημαντικά
\\ ... αυτό συμβαίνει γιατί είναι ετικέτες που αναζητούνται στο κώδικα άμεσα από το τέλος
\\ δεν ισχύει αυτός ο περιορισμός στις μεταβλητές και τα ονόματα οπουδήποτε αλλού
\\ ... αυτό συμβαίνει γιατί αυτά τα αναγνωριστικά βρίσκονται σε λίστα πάντα κεφαλαία
\\ και κάθε φορά που τα αναζητούμε, ο μετφραστής τα κάνει κεφαλαία, χωρίς τόνους και τα βρίσκει.
      Έλεγχος(&χ1)
      Θέσε Γρήγορα
      Έλεγχος(&χ2)
      Τύπωσε "Περίμενε λίγο, το επόμενο τεστ δεν κάνει ανανέωση οθόνης"
      Ανανέωση
      Θέσε Γρήγορα !
      Έλεγχος(&χ3)
      Θέσε Γρήγορα
      Οθόνη
Αποτελέσματα("Με")
      επαναλήψεις=30000
      Τύπωσε "Περίμενε λίγο, τα επόμενα τεστ δεν εμφανίζουν κάτι στην οθόνη"
      Ανανέωση
      εμφάνιση=ψευδές
      Θέσε Αργα
      Έλεγχος(&χ1)
      Θέσε Γρήγορα
      Έλεγχος(&χ2)
      Θέσε Γρήγορα !
      Έλεγχος(&χ3)
      Θέσε Γρήγορα
Αποτελέσματα("Χωρίς")
Πλάγια
\\ η εντολή αναφορά εμφανίζει κείμενο με στοίχιση (justification) με αναδίπλωση λέξης (έχει πολλές παραλλαγές)
\\ επιπλέον αν προκαλεί ολίσθηση τότε ενεργοποιείται  ένα σύστημα κράτησης μετά από ορισμένες ολισθήσεις για να δούμε το κείμενο
\\ και με το πάτημα του διαστήματος να πάμε στα επόμενα, πάλι μέρος του κειμένου.
Αναφορά {Ενδέχεται το Γρήγορα ! να είναι πιο αργό από το Γρήγορα, γιατί ο φόρτος εξαρτάται και από τα προγράμματα που τρέχουν στο περιθώριο και εδώ, στη δεύτερη σειρά δικιμών,  η διαφορά των δυο είναι μικρή και μπορεί να καλυφθεί από καθυστέρηση στο περιθώριο}
\\ η εντολή πλάγια δουλεύει ως διακόπτης, μπορούμε να δώσουμε και τιμή Πλάγια 1 και Πλάγια 0
\\ μπορούμε να γνωρίζουμε τη θέση του (δίνει 0 ή -1, ενώ δέχεται 0 ή μη μηδενική τιμή για -1, αληθές)
Πλάγια
Τέλος
\\ η εντολή τέλος (κάνει έξοδο) δεν χρειάζεται γιατί αν δει το Ρουτίνα ο διερμηνευτής θα κάνει αυτόματα έξοδο
\\ Στις ρουτίνες ότι φαίνεται στο κυρίως τμήμα, φαίνεται και στη ρουτίνα
\\ η α$ είναι τοπική, η &χ είναι τοπική και νέα κάθε φορά, ώστε να αποδίδεται νέα αναφορά.
\\ μπορούμε να έχουμε τοπικές μεταβλητές
Ρουτίνα Αποτελέσματα(α$)
      Αναφορά "Σχέση ταχύτητας Αργά-Γρήγορα-Γρήγορα!"
      Τύπωσε α$+" εμφάνιση"
      Τύπωσε   "Γρήγορα/Αργα", @(στήλη(2)), μορφη$( "{0:2:-10}%",(χ1-χ2)/χ1*100)
      Τύπωσε  "Γρήγορα !/Αργα",@(στήλη(2)), μορφη$( "{0:2:-10}%",(χ1-χ3)/χ1*100)
      Τύπωσε  "Γρήγορα !/Γρήγορα",@(στήλη(2)), μορφη$( "{0:2:-10}%",(χ2-χ3)/χ2*100)
Τέλος Ρουτίνας
Ρουτίνα Έλεγχος(&χ)
      Αν εμφάνιση Τότε Οθόνη
      Αναλυτής
      Για ι=1 έως επαναλήψεις {
            α=ι
       Αν εμφάνιση Τότε Τύπωσε α,
      }
      Αν εμφάνιση Τότε Τύπωσε
      χ=Φόρτος
      Αν εμφάνιση Τότε Τύπωσε χ
Τέλος Ρουτίνας