Are string comparisons short-circuited? Topic is solved

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
pneumatic
Posts: 338
Joined: 05 Dec 2016, 01:51

Are string comparisons short-circuited?

15 Apr 2021, 08:28

Code: Select all

abc := "abc" , def := "def"
if (abc = def)  ;short circuit?
In this case, will AHK compare each and every character in abc with def, or will it start by comparing, say, "a" with "d", see that it's not equal, and exit the comparison loop since if the two first characters don't match the whole strings couldn't possibly match.

Thanks
User avatar
boiler
Posts: 16931
Joined: 21 Dec 2014, 02:44

Re: Are string comparisons short-circuited?  Topic is solved

15 Apr 2021, 09:06

This simple test seems to demonstrate that it is short-circuited. The one with the late difference consistently takes multiple times longer to complete than the one with the early difference.

Code: Select all

gosub AssignVars
DllCall("QueryPerformanceFrequency", "Int64*", freq)

DllCall("QueryPerformanceCounter", "Int64*", CounterBefore)
if (ref = earlyDiff)
	same := 1
DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
earlyChange := "Early change:`t" . (CounterAfter - CounterBefore) / freq * 1000 " ms"

DllCall("QueryPerformanceCounter", "Int64*", CounterBefore)
if (ref = lateDiff)
	same := 1
DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
lateChange := "Late change:`t" . (CounterAfter - CounterBefore) / freq * 1000 " ms"
MsgBox, % earlyChange "`n" lateChange
return

AssignVars:
ref =
(
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus vel viverra dui, id dictum felis. In dapibus erat at quam faucibus, sit amet iaculis ante sodales. Fusce vitae tortor sit amet enim viverra rutrum eu eu ligula. Donec hendrerit dictum venenatis. Nam id metus in nibh congue placerat. Donec tempor vel libero convallis venenatis. Sed pellentesque risus metus, a cursus magna scelerisque in. Donec non aliquam ante. Vestibulum sed convallis leo, vitae convallis ex. Aliquam ac tempor nibh, a gravida nulla. Aenean posuere mauris eu risus sodales, nec vehicula est rhoncus.

Ut arcu sapien, ultrices eu velit at, molestie lacinia urna. Proin dignissim scelerisque augue, non venenatis massa. Aenean id nisi malesuada, cursus nisi a, ornare nibh. Quisque eget vestibulum turpis, nec consectetur ligula. Proin non faucibus eros. Donec eleifend vestibulum dolor vel maximus. Quisque vel aliquet mauris.

Donec varius felis nec metus sollicitudin convallis. Integer auctor dignissim arcu et bibendum. Curabitur at nulla sed mi tincidunt facilisis quis a nisi. Suspendisse faucibus tortor a suscipit ultrices. Aliquam sodales pretium aliquet. Donec lacinia nisi eu lacus faucibus rhoncus. Duis ac placerat lacus, sit amet consequat magna. In sit amet tristique eros. Sed vehicula arcu ut pellentesque volutpat. Pellentesque venenatis ornare aliquet.

Vivamus vulputate ante in orci scelerisque, sed commodo arcu ullamcorper. Nullam consectetur, velit a efficitur cursus, odio lorem placerat sem, at cursus arcu nisl non diam. Morbi nec nibh non augue malesuada fringilla. Curabitur viverra euismod odio, id egestas neque vehicula nec. Quisque fermentum turpis ipsum, elementum scelerisque augue fringilla vel. Mauris auctor scelerisque commodo. Etiam porttitor nec felis at semper. Aenean non scelerisque libero. Cras ac tincidunt massa, id condimentum enim. Donec et dolor ullamcorper, condimentum justo sed, fringilla tortor. Fusce ut diam suscipit, sagittis lorem eget, lacinia enim. Nunc sed porttitor libero. Pellentesque tempor, dui quis pellentesque fermentum, sem dolor commodo mauris, sed sollicitudin orci lorem vitae eros. Sed nec sodales mi.

Aenean ultricies, tortor non pellentesque hendrerit, ex libero faucibus nisl, in convallis turpis diam sed ex. Etiam pretium augue nec mi mattis vehicula. Donec id dolor nec nisi imperdiet dignissim. Sed eget cursus velit, non finibus nisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sit amet risus dui. Donec feugiat feugiat sodales. Cras in aliquam lectus. Donec congue purus ex, at sagittis ipsum blandit tincidunt. Maecenas gravida nunc a vestibulum aliquam. Sed pulvinar porttitor mauris ut aliquam. Donec id justo et nunc aliquet aliquam sed ut diam. Aenean rutrum augue in metus aliquet, ac lacinia justo feugiat. Duis dui ante, congue dapibus massa ut, aliquet ultrices ante. Aliquam at finibus mauris.
)

earlyDiff =
(
Lore* ipsum dolor sit amet, consectetur adipiscing elit. Phasellus vel viverra dui, id dictum felis. In dapibus erat at quam faucibus, sit amet iaculis ante sodales. Fusce vitae tortor sit amet enim viverra rutrum eu eu ligula. Donec hendrerit dictum venenatis. Nam id metus in nibh congue placerat. Donec tempor vel libero convallis venenatis. Sed pellentesque risus metus, a cursus magna scelerisque in. Donec non aliquam ante. Vestibulum sed convallis leo, vitae convallis ex. Aliquam ac tempor nibh, a gravida nulla. Aenean posuere mauris eu risus sodales, nec vehicula est rhoncus.

Ut arcu sapien, ultrices eu velit at, molestie lacinia urna. Proin dignissim scelerisque augue, non venenatis massa. Aenean id nisi malesuada, cursus nisi a, ornare nibh. Quisque eget vestibulum turpis, nec consectetur ligula. Proin non faucibus eros. Donec eleifend vestibulum dolor vel maximus. Quisque vel aliquet mauris.

Donec varius felis nec metus sollicitudin convallis. Integer auctor dignissim arcu et bibendum. Curabitur at nulla sed mi tincidunt facilisis quis a nisi. Suspendisse faucibus tortor a suscipit ultrices. Aliquam sodales pretium aliquet. Donec lacinia nisi eu lacus faucibus rhoncus. Duis ac placerat lacus, sit amet consequat magna. In sit amet tristique eros. Sed vehicula arcu ut pellentesque volutpat. Pellentesque venenatis ornare aliquet.

Vivamus vulputate ante in orci scelerisque, sed commodo arcu ullamcorper. Nullam consectetur, velit a efficitur cursus, odio lorem placerat sem, at cursus arcu nisl non diam. Morbi nec nibh non augue malesuada fringilla. Curabitur viverra euismod odio, id egestas neque vehicula nec. Quisque fermentum turpis ipsum, elementum scelerisque augue fringilla vel. Mauris auctor scelerisque commodo. Etiam porttitor nec felis at semper. Aenean non scelerisque libero. Cras ac tincidunt massa, id condimentum enim. Donec et dolor ullamcorper, condimentum justo sed, fringilla tortor. Fusce ut diam suscipit, sagittis lorem eget, lacinia enim. Nunc sed porttitor libero. Pellentesque tempor, dui quis pellentesque fermentum, sem dolor commodo mauris, sed sollicitudin orci lorem vitae eros. Sed nec sodales mi.

Aenean ultricies, tortor non pellentesque hendrerit, ex libero faucibus nisl, in convallis turpis diam sed ex. Etiam pretium augue nec mi mattis vehicula. Donec id dolor nec nisi imperdiet dignissim. Sed eget cursus velit, non finibus nisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sit amet risus dui. Donec feugiat feugiat sodales. Cras in aliquam lectus. Donec congue purus ex, at sagittis ipsum blandit tincidunt. Maecenas gravida nunc a vestibulum aliquam. Sed pulvinar porttitor mauris ut aliquam. Donec id justo et nunc aliquet aliquam sed ut diam. Aenean rutrum augue in metus aliquet, ac lacinia justo feugiat. Duis dui ante, congue dapibus massa ut, aliquet ultrices ante. Aliquam at finibus mauris.
)

lateDiff =
(
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus vel viverra dui, id dictum felis. In dapibus erat at quam faucibus, sit amet iaculis ante sodales. Fusce vitae tortor sit amet enim viverra rutrum eu eu ligula. Donec hendrerit dictum venenatis. Nam id metus in nibh congue placerat. Donec tempor vel libero convallis venenatis. Sed pellentesque risus metus, a cursus magna scelerisque in. Donec non aliquam ante. Vestibulum sed convallis leo, vitae convallis ex. Aliquam ac tempor nibh, a gravida nulla. Aenean posuere mauris eu risus sodales, nec vehicula est rhoncus.

Ut arcu sapien, ultrices eu velit at, molestie lacinia urna. Proin dignissim scelerisque augue, non venenatis massa. Aenean id nisi malesuada, cursus nisi a, ornare nibh. Quisque eget vestibulum turpis, nec consectetur ligula. Proin non faucibus eros. Donec eleifend vestibulum dolor vel maximus. Quisque vel aliquet mauris.

Donec varius felis nec metus sollicitudin convallis. Integer auctor dignissim arcu et bibendum. Curabitur at nulla sed mi tincidunt facilisis quis a nisi. Suspendisse faucibus tortor a suscipit ultrices. Aliquam sodales pretium aliquet. Donec lacinia nisi eu lacus faucibus rhoncus. Duis ac placerat lacus, sit amet consequat magna. In sit amet tristique eros. Sed vehicula arcu ut pellentesque volutpat. Pellentesque venenatis ornare aliquet.

Vivamus vulputate ante in orci scelerisque, sed commodo arcu ullamcorper. Nullam consectetur, velit a efficitur cursus, odio lorem placerat sem, at cursus arcu nisl non diam. Morbi nec nibh non augue malesuada fringilla. Curabitur viverra euismod odio, id egestas neque vehicula nec. Quisque fermentum turpis ipsum, elementum scelerisque augue fringilla vel. Mauris auctor scelerisque commodo. Etiam porttitor nec felis at semper. Aenean non scelerisque libero. Cras ac tincidunt massa, id condimentum enim. Donec et dolor ullamcorper, condimentum justo sed, fringilla tortor. Fusce ut diam suscipit, sagittis lorem eget, lacinia enim. Nunc sed porttitor libero. Pellentesque tempor, dui quis pellentesque fermentum, sem dolor commodo mauris, sed sollicitudin orci lorem vitae eros. Sed nec sodales mi.

Aenean ultricies, tortor non pellentesque hendrerit, ex libero faucibus nisl, in convallis turpis diam sed ex. Etiam pretium augue nec mi mattis vehicula. Donec id dolor nec nisi imperdiet dignissim. Sed eget cursus velit, non finibus nisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sit amet risus dui. Donec feugiat feugiat sodales. Cras in aliquam lectus. Donec congue purus ex, at sagittis ipsum blandit tincidunt. Maecenas gravida nunc a vestibulum aliquam. Sed pulvinar porttitor mauris ut aliquam. Donec id justo et nunc aliquet aliquam sed ut diam. Aenean rutrum augue in metus aliquet, ac lacinia justo feugiat. Duis dui ante, congue dapibus massa ut, aliquet ultrices ante. Aliquam at finibus maur*s.
)
return

Return to “Ask for Help (v1)”

Who is online

Users browsing this forum: No registered users and 283 guests