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/ |