Yes, that is something I'm very much aware of, avoiding Groovy goodness as much as I can for the sake of performance. For a call like runIn, which doesn't really matter if it takes a bit more time or not, I wouldn't chase it, but for reasons such as what you talk about I would also say a quoted string is much safer. And if it was frequently called, faster. Being new here I didn't want to go into an argument about this and talked about it as a style choice, but see that maybe was wrong of me.
This has yielded significant performance improvements in my drivers, so it is something I follow as far as it makes sense. I do see most people don't. It's a matter of choice between convenience and performance, as is usually the case. If it is convenient, it is not very performant. This is not always the case, but often.
Definitely agree.
It does that a lot, which is costly in terms of performance. A lot of seemingly innocent calls actually take a lot of time. As I get used to the language I'm sure I'll identify more of these things without using tools to actually analyze the code and the resulting byte-code. Analyzing code like that is not something I will do unless I really need to chase performance, of course. It takes more time. But it is a good way of learning to catch more of the "innocent" calls which actually are rather complex and time consuming.
That is very obvious in an example, but it could have been declared as a property elsewhere if it was real code, so this is a real concern. One more reason for quoted strings.
In some languages the reason to keep the method name in a scheduler would be that you're actually passing a pointer, but that is not the case here, of course. This is also something that needs to get used to if you come from such a language.
I ran into a "fun" thing Groovy does if a property is undefined, which is the case when a Device Setting isn't set. It would then try to use a method starting with the word get and then the name of the property... Having that method defined and checking if that undefined value is null inside that method gives a nice Error 500. It is important to keep track of the goodness of Groovy, that is for certain... That it has goodness that does things like this prompted me to read up some more on the subject, and it will take time to learn and remember all the specifics of the language.
Thank you for your reply! Even if my initial post came from pure laziness and just doing the most rudimentary and most basic call stack tracing solved my problem, this thread was of interest at least to me with posts like yours!