Up to Main Index Up to Journal for August, 2023
JOURNAL FOR THURSDAY 17TH AUGUST, 2023
______________________________________________________________________________
SUBJECT: Performance improvements and range/next loops
DATE: Thu 17 Aug 19:14:04 BST 2023
Yesterday I surprised people with an impromptu release of Mere ICE v0.0.5 :)
Quite a quick turn around with some big features in only ten days…
Well, I’m not letting up. I’ve managed to improve the performance of the new
if-elif-else-fi blocks and for/next loops. Looks like that 5% performance hit
is getting smaller all the time. Speaking of for/next loops…
I just got this working:
animals = [string] "a" "ant", "b" "bat", "c" "cat"
range letter animal animals
printf "%s is for %s\n" letter animal
next
Is that a new range statement? Yes it is :) That code produces:
a is for ant
b is for bat
c is for cat
How about nested ranges? No problem:
data = [string](
"animals" []string("ant" "bat" "cat"),
"colours" [int](1 "aqua", 2 "blue" 3, "charcoal"),
"fruits" [string]("green" "apple", "yellow" "banana", "red" "cherry"),
"numbers" []int(3 5 7),
)
range kd vd data
printf "%8s = " kd
range k v vd
printf "%6v: %-8v" k v
next
println
next
That code produces:
animals = 0: ant 1: bat 2: cat
colours = 1: aqua 2: blue 3: charcoal
fruits = green: apple red: cherry yellow: banana
numbers = 0: 3 1: 5 2: 7
You can use break and continue statements like a normal for/next loop. With a
range/next loop array and map variables, literals or function call results can
be iterated — as you would expect. For example these also work:
range letter animal [string] "a" "ant", "b" "bat", "c" "cat"
printf "%s is for %s\n" letter animal
next
range letter animal call data
printf "%s is for %s\n" letter animal
next
data: func
return [string] "a" "ant", "b" "bat", "c" "cat"
endfunc
A range/next loop sort of works with strings. For example:
range x y "♠♣♥♦" // Produces: ♠ <nil>
println x " " y // ♣ <nil>
next // ♥ <nil>
// ♦ <nil>
So don’t use ‘y’ in the above and it’s okay. To be honest I hadn’t actually
coded for strings yet. The first time I tried strings I was surprised it
worked as well as it did…
It’s close, but not ready for prime-time release yet. There is another minor
todo, I need to add some clean-up after the range/next loop. Then I need to
write tests and document range. Give me a few days ;)
--
Diddymus
Up to Main Index Up to Journal for August, 2023