Hobby Basic, ένας μικρός διερμηνευτής για την κονσόλα των Windows

Η επερχόμενη έκδοση 2.4.1 της Hobby BASIC ενισχύει τον continuation character, τον χαρακτήρα backslash (\), προσθέτοντας νέες δυνατότητες. Αυτή η φαινομενικά μικρή αλλά σημαντική επέκταση διαμορφώνει ριζικά τη σύνταξη της Hobby BASIC από εδώ και πέρα.

Παράδειγμα continuation character πριν την έκδοση 2.4.1:


Κώδικας:
print \
"hello"
Ισοδύναμο με: print "hello"

Ο περιορισμός στην προηγούμενη έκδοση:

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

Παραδείγματα που προκαλούν σφάλμα σύνταξης:
Κώδικας:
print \
     ← κενή γραμμή
"hello"

Κώδικας:
print \
! Αυτό είναι σχόλιο
"hello"
Και τα δύο ισοδύναμα με: Syntax Error

Δεν είχα προβλέψει αυτή τη σύνταξη, παρόλο που είναι απολύτως λογική και αναμενόμενη από τους χρήστες.

Η νέα έκδοση 2.4.1 διορθώνει αυτή την παράλειψη. Ας δούμε το παράδειγμα ξανά:
Κώδικας:
print \            ! Συνέχιση στην επόμενη γραμμή
                   ! <-- Αυτό το κενό επιτρέπεται τώρα στην 2.4.1
"Καλημέρα κόσμε"   ! Η εντολή ολοκληρώνεται εδώ

Η διαφορά είναι σημαντική: προσφέρει μεγαλύτερη ευελιξία στον κώδικα και, κατ' επέκταση, στον προγραμματιστή, ενώ ταυτόχρονα βελτιώνει την αναγνωσιμότητα.


Line Continuation Support για την εντολή TIMES!


Η εντολή TIMES:
• Εκτελεί εντολές πολλές φορές σε μία γραμμή
• Χρησιμοποιεί τη μεταβλητή V3 ως μετρητή (zero-based: 0 έως n-1)
• Δέχεται πολλαπλές εντολές χωρισμένες με άνω κάτω τελεία :
• Κάνει inline loops χωρίς να χρειάζεται ξεχωριστή γραμμή για FOR/NEXT

Παράδειγμα:
Κώδικας:
times repeatCount  swap 0, 0, 80, 11, 0, 12 : title repeatCount-V3 : wait 120

Το παραπάνω ισοδυναμεί με:
Κώδικας:
FOR i = 0 TO repeatCount-1
    swap 0, 0, 80, 11, 0, 12
    title repeatCount-i
    wait 120
NEXT i

H TIMES δεν υποστήριζε continuation character. Με την έκδοση 2.4.1 μπορούμε να σπάμε τα loops σε πολλές γραμμές χρησιμοποιώντας τον χαρακτήρα backslash (\) !

Παλιά σύνταξη (έως 2.4.0):
Κώδικας:
times 10 print "Hello" : print "World" : wait 100

Ή ακόμα χειρότερα για nested loops:
Κώδικας:
times 5 times 5 print "X:", V3;" Y:", V3

Νέα σύνταξη (2.4.1):
Κώδικας:
times 10 \
 print "Hello" : \
 print "World" : \
 wait 100

Παραδείγματα της TIMES με continuation:


Test 1: Βασικό test με single line
Κώδικας:
times 3 print "Hello"
Output: Hello 3 φορές


Test 2: Multi-line με backslash
Κώδικας:
times 3 \
    print "Line 1" : \
    print "Line 2" : \
    print "Line 3"
Output:
Line 1
Line 2
Line 3
Line 1
Line 2
Line 3
Line 1
Line 2
Line 3



Test 3: Backslash μέσα σε quotes
Κώδικας:
times 2 \
    print "This has backslash \\ in string" : \
    print "Another with '\' quote"
Output: Να τυπώσει τα strings όπως είναι (δεν να θεωρηθεί continuation)


Test 4: Complex expressions με arithmetic
Κώδικας:
times 4 \
    x = V3 * 10 : \
    print "Iteration ", V3, " value ", x
Output:

Iteration 0 value 0
Iteration 1 value 10
Iteration 2 value 20
Iteration 3 value 30



Test 5: Nested commands με graphics
Κώδικας:
times 5 \
    color \
    RND(15), RND(15) : \
    paint V3*5, V3*5, 5, 5, -1, 1
Output: 5 διαφορετικά χρωματισμένα κουτιά


Test 6: Με κενή γραμμή continuation
Κώδικας:
times 3 \
    print "Start" : \
    \
    print "Middle" : \
    \
    print "End"
Output:

Start
Middle
End
Start
Middle
End
Start
Middle
End



Test 7: Πολλαπλά backslashes σε διαφορετικές γραμμές
Κώδικας:
times 2 \
    a = 1 : b = 2 : \
    \
    c = a + b : \
    \
    print "Sum = ", c : \
    \
    wait 100
Output:

Sum = 3
Sum = 3



Test 8: Backslash στο τέλος χωρίς κενό
Κώδικας:
times 3 print "Test"\
    : print "Continued"
Output:
Test
Continued
Test
Continued
Test
Continued



Test 9: Backslash με κενά και σχόλια
Κώδικας:
times 3 \

    ! Σχόλιο \

    print "Hello" : \

    print "World"
Output:
Hello
World
Hello
World
Hello
World



Test 10: Zero count
Κώδικας:
times 0 \
    print "This should not print"
print "Skipped"
Output: Μόνο Skipped


Προχωρημένα παραδείγματα της TIMES με continuation:


Nested TIMES
Κώδικας:
print "Nested TIMES test:"
times 2 \
    print "Outer ", V3, ":" : \
    times 3 \
        print "  Inner ", V3
inkey

Nested FOR/TIMES με Full Continuation Support

Κώδικας:
for \
    outer = 1 \
    to 3 \
    
    print "┌─ OUTER ITERATION ", outer, " ───────────────────────┐" : \
    
    for \
        middle = 1 \
        to 4 \
        
        print "│  Middle: ", middle, " " : \
        
        times \
            2 \
            
            print "│    Times[", V3, "] " : \
            
            if \
                V3 = 0 \
                then \
                    print "First " : \
                else \
                    print "Second" : \

        print "│"
        
    next \
    middle : \
    
    print "└──────────────────────────────────────────────┘" : \
    print  ! Blank line
    
next \
outer

Δυναμικός Υπολογισμός Μέσου Όρου Πινάκων
Κώδικας:
    forever#
    dim data[5,5].RND 10000
    data[].SIZE
    array_length = V0
   
    times array_length : \
        sum = 0 : \

        times 5 \
            value = data[V3,V3] : \
            sum = sum + value : \
            average = sum / 5 : \
            print "row ", V3, " average: ", average
 
    goto forever

Σε κάθε αναβάθμιση, προσπαθώ να κάνω τη σύνταξη της Hobby BASIC πιο ελεύθερη και ευέλικτη για τον προγραμματιστή, διατηρώντας παράλληλα τη λογική της και το βασικό BASIC-style. Το περιβάλλον είναι χτισμένο από το μηδέν σε 100% Win32 Assembly, με χειροποίητο parser, μηδέν εξαρτήσεις και απευθείας byte επεξεργασία.

Νέα Παραδείγματα στην έκδοση 2.4.1

Στην ενημέρωση 2.4.1 προστέθηκαν δύο νέα παραδείγματα:
  1. CIRCLES.BAS - Multiple Random Circles Generator
    Δημιουργεί τυχαίους κύκλους με διαφορετικά μεγέθη, χρώματα και θέσεις.
  2. EQUALIZER.BAS - Πλήρως παραμετροποιήσιμο Equalizer / VU Meter
    Προσομοίωση οπτικού equalizer με μπάρες που αντιδρούν σε τυχαίες τιμές.
Screenshots από την κονσόλα των Windows 11.



10 years of fun with Hobby BASIC.
 
Τελευταία επεξεργασία:
Πίσω
Μπλουζα