SAPфорум.RU
https://sapboard.ru/forum/

Почему компилятор не проверяет соответствие типов при вызове ФМ?
https://sapboard.ru/forum/viewtopic.php?f=13&t=99176
Страница 1 из 1

Автор:  YunIlgiz [ Ср, ноя 18 2020, 17:38 ]
Заголовок сообщения:  Почему компилятор не проверяет соответствие типов при вызове ФМ?

Собственно, вопрос в заголовке. В методах классов при активации ругается, а в ФМ о неправильном параметре ты узнаешь только в момент дампа. Если можно, подробное объяснение сути, зачем так сделано. Я знаю, что это из-за чего-то связанного с RFC, но не более. Заранее спасибо)

Автор:  LKU [ Ср, ноя 18 2020, 18:10 ]
Заголовок сообщения:  Re: Почему компилятор не проверяет соответствие типов при вызове ФМ?

Полагаю, правильный ответ "так исторически сложилось".
Изначально строгой проверки типов при вызове ФМ нет, и если её сейчас сделать, то куча стандартного кода просто перестанет компилироваться.

Например, см ФМ UNIT_CONVERSION_SIMPLE. В нем входной параметр INPUT вообще БЕЗ без объявленного типа и поиск where used дает больше 1000 мест использования.

Автор:  RoustR [ Чт, ноя 19 2020, 07:36 ]
Заголовок сообщения:  Re: Почему компилятор не проверяет соответствие типов при вызове ФМ?  Тема решена

Вызов ФМ - это всегда динамическая линковка. Обращали внимание на то, что при вызове ФМ указывается литерал, переменная или константа? То есть, в общем случае компилятор ничего не знает о вызываемой ФМ, в том числе и о ее параметрах. ФМ на момент компиляции может даже не существовать. Поэтому все проверки происходят в runtime. Там ведь кроме поиска и загрузки самого ФМ и передача параметров должна происходить не обычным способом - по имени. Обычная передача через стег работать не будет.

Очень похоже на то, что происходит при работе с OLE (OLE Automation). Там работает интерфейс IDispatch, который организует вызов процедур и передачу параметров по имени. И ошибки вызыва будут только в runtime.

Автор:  pberezin [ Чт, ноя 19 2020, 14:27 ]
Заголовок сообщения:  Re: Почему компилятор не проверяет соответствие типов при вызове ФМ?

Расширенная проверка - выполняет. Просто абаперы иногда ленятся её запускать, она ж медленная. В итоге дампы в продуктиве обычно.

Автор:  YunIlgiz [ Чт, ноя 19 2020, 14:44 ]
Заголовок сообщения:  Re: Почему компилятор не проверяет соответствие типов при вызове ФМ?

RoustR написал(а):
Вызов ФМ - это всегда динамическая линковка. Обращали внимание на то, что при вызове ФМ указывается литерал, переменная или константа? То есть, в общем случае компилятор ничего не знает о вызываемой ФМ, в том числе и о ее параметрах. ФМ на момент компиляции может даже не существовать. Поэтому все проверки происходят в runtime. Там ведь кроме поиска и загрузки самого ФМ и передача параметров должна происходить не обычным способом - по имени. Обычная передача через стег работать не будет.

Очень похоже на то, что происходит при работе с OLE (OLE Automation). Там работает интерфейс IDispatch, который организует вызов процедур и передачу параметров по имени. И ошибки вызыва будут только в runtime.

Спасибо за подробный ответ!))

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/