Перевірка типів під час виконання у TwinCAT: __QUERYINTERFACE та __QUERYPOINTER
Дослідження безпеки типів у рантаймі Structured Text, аналіз сумісності типів за допомогою інтерфейсів та операторів приведення типів.
У StructuredText немає вбудованого оператора для перевірки сумісності типів. Проте CoDeSys/TwinCAT надає додаткову можливість: ви можете спробувати привести змінну, що містить об’єкт, до змінної типу інтерфейсу за допомогою оператора __QUERYINTERFACE.
Рантайм виконає перевірку сумісності типів під час виконання програми, і оператор поверне TRUE, лише якщо об’єкт реалізує відповідний інтерфейс. Це працює з інтерфейсами, які успадковують __SYSTEM.IQueryInterface. Звичайно, це не замінює відсутній оператор IS, але це краще, ніж нічого.
Цікаво, що ця функціональність не працює з оператором __QUERYPOINTER. Це зазначено в документації, але виглядає не зовсім природно.
Тому інтерфейси залишаються єдиним способом делегувати перевірку сумісності типів середовищу виконання…

#TwinCAT #CoDeSys #StructuredText #IndustrialAutomation