LiveCode 10 - what are your thoughts on the new features?

Mark Waddingham mark at livecode.com
Wed Sep 8 09:20:34 EDT 2021


On 2021-09-08 13:09, Ben Rubinstein via use-livecode wrote:
> I'm also excited by the items in this list, at least the ones that I 
> understand.
> 
> I am a bit disturbed by the Tail Expressions one, because to the
> extent that I do understand it, I don't see how this doesn't break
> existing code that passes an array, and will do so in the worst way,
> i.e. silently, leaving the developer to figure out what's going on by
> the secondary or tertiary effects. Am I wrong?

It requires an explicit '...':

     put 1 into tFoo[1]
     put 2 into tFoo[2]

     myHandler tFoo -- passes a single argument: the array tFoo
     myHandler ... tFoo -- passes two arguments: 1, 2 (the elements of 
tFoo)

Interesting your missing of the all important operator being required 
reminds of a mistake I did make way back when I added the ability to use 
a sequence array as an array index...

   put tArray[tFoo] into tBar -- evaluates as tArray[1][2]

I really should have thought to require explicit syntax there. i.e.

   put tArray[... tFoo] into tBar

The reason here is performance - if I had done that it would mean the 
engine would known that in the case of:

   put tArray[tFoo]

That it will only ever generate a path of length 1 to index the array - 
rather than pretty much all array expressions potentially being 
unbounded in length.

You live, you learn.

> I'm very pleased about constant expressions. I do wonder whether this
> raft of changes might also be the moment to do something about this
> nasty little weirdness:
> https://quality.livecode.com/show_bug.cgi?id=18390

Well constant expressions do alleviate that problem a bit:

     constant kFormatArg = format("\"%s\"")

     put format(kFormatArg, "Hello") => "Hello"
     put format("\"%s\"", "Hello") => "Hello"

i.e. The use of `\` escapes in format, generates characters which format 
otherwise skips over as content - except `\` itself, so you have to be a 
little careful there. i.e.

    constant kFormatArg = "\\\\%s"

    put format(kFormatArg, "Hello") => "\Hello"
    put format("\\%s", "Hello") => "\Hello"

In regards to your comment on that report then yes that is a good idea - 
albeit a breaking change. However, I think that is probably best 
considered as part of a package of changes which improve the expression 
of string constants generally. After all, if tooling is going to be 
updated, it is better to do so 'all in one go', rather than in dribs and 
drabs. Multi-line string literals (as mentioned previously) would go 
into that 'package'.

Another thing we could consider at that point is adding a 'f' prefix to 
literals which imply they are C-style escaped (basically a contraction 
of 'format')... Indeed, we could even make that a way to introduce 
variable interpolation.

Also, at that point I'd probably suggest that we also allow ' or " to 
delimit strings.

So f'...' or f"...", '...\'...', "...\"...", '''...''', """...""".

(Specifically here I'm proposing that there would be no semantic 
difference between ' and " - they would merely enable trivial inclusion 
of the other quote type).


> I also wonder whether this might be the moment to introduce another
> bit of (completely non-breaking) syntactic sugar:
> https://quality.livecode.com/show_bug.cgi?id=8945

Hehe - with integers being unbounded, there are plenty more version 
numbers in the future ;)

Warmest Regards,

Mark.

-- 
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps




More information about the use-livecode mailing list