Re[4]: callback функции
От: Кодт Россия  
Дата: 21.06.04 13:21
Оценка: 3 (1) +1
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Любая функция подчиняется той или иной договоренности о вызове, которая специфицируется в типе, поэтому почему Вы решили выделить функцию обратного вызова в особый класс в языке мне не совсем понятно? Я согласен с тем, что стандарт не регулирует такие вопросы, как порядок размещения параметров с стеке и т.п., но это всего лишь аспект реализации, который все равно не делает этот класс функций чем-то особенным, имхо.


Имхо, ты сперва заговорил о логическом понятии, а потом перескочил на сишные неинлайновые функции.

Особенность callback-функций как элемента проектирования — в том, что к ним предъявляются внешние ограничения.
Во-первых, синтаксические (клиент должен соблюсти конвенции вызова).
Во-вторых, поведенческие (клиент может не знать ни о моментах, ни о количестве вызовов функции; возможны дополнительные ограничения по реентерабельности, многопоточности и т.п.)
А в остальном...
Перекуём баги на фичи!
Re[2]: callback функции
От: Кодт Россия  
Дата: 21.06.04 11:12
Оценка: 5 (1)
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Здравствуйте, Clipper, Вы писали:


C>>для чего они нужны и имеют ли какой-то смысл.

C>>чем их функциональные возможности отличаются от обычных.
C>>принцип их работы и т.п.
C>>раскажите или дайте ссылку где почитать.

ссылка: www.rsdn.ru/search?q=callback

C>>thanks.


АШ>Функция обратного вызова это логическое понятие. Фукнции обратного вызова используются в механизмах оповещения клиента о наступлении какого-либо события. А с точки зрения языка это такая же обычная функция как и все остальные.


Ну, если трактовать понятие "событие" широко... то да.
А вообще, это выполнение клиентского кода под руководством серверного (библиотечного).

С точки зрения языка это не "такая же обычная функция", а удовлетворяющая определённым конвенциям — поскольку её будет вызывать сервер, а он придерживается некоторых своих догадок.
В первую очередь — это конвенция вызова (число и тип параметров, способ заполнения и очищения стека, тип и способ возвращаемого значения).
Для библиотеки шаблонов эти ограничения существенно шире. Например, требование, чтобы это была не функиия, а функциональный объект, являющийся моделью (а то и наследником) std::unary_function / std::binary_function и т.п.
Перекуём баги на фичи!
callback функции
От: Clipper  
Дата: 21.06.04 08:13
Оценка:
для чего они нужны и имеют ли какой-то смысл.
чем их функциональные возможности отличаются от обычных.
принцип их работы и т.п.
раскажите или дайте ссылку где почитать.
thanks.
Re: callback функции
От: Анатолий Широков СССР  
Дата: 21.06.04 08:23
Оценка:
Здравствуйте, Clipper, Вы писали:

C>для чего они нужны и имеют ли какой-то смысл.

C>чем их функциональные возможности отличаются от обычных.
C>принцип их работы и т.п.
C>раскажите или дайте ссылку где почитать.
C>thanks.

Функция обратного вызова это логическое понятие. Фукнции обратного вызова используются в механизмах оповещения клиента о наступлении какого-либо события. А с точки зрения языка это такая же обычная функция как и все остальные.
Re[3]: callback функции
От: Анатолий Широков СССР  
Дата: 21.06.04 12:37
Оценка:
АШ>>Функция обратного вызова это логическое понятие. Фукнции обратного вызова используются в механизмах оповещения клиента о наступлении какого-либо события. А с точки зрения языка это такая же обычная функция как и все остальные.

К>Ну, если трактовать понятие "событие" широко... то да.

К>А вообще, это выполнение клиентского кода под руководством серверного (библиотечного).

А может выполнение серверного под управлением клиентского? Поэтому Ваше утверждения лишь частный случай взаимодействия объектов событийно-управляемой архитектуры.

К>С точки зрения языка это не "такая же обычная функция", а удовлетворяющая определённым конвенциям — поскольку её будет вызывать сервер, а он придерживается некоторых своих догадок.

К>В первую очередь — это конвенция вызова (число и тип параметров, способ заполнения и очищения стека, тип и способ возвращаемого значения).

Любая функция подчиняется той или иной договоренности о вызове, которая специфицируется в типе, поэтому почему Вы решили выделить функцию обратного вызова в особый класс в языке мне не совсем понятно? Я согласен с тем, что стандарт не регулирует такие вопросы, как порядок размещения параметров с стеке и т.п., но это всего лишь аспект реализации, который все равно не делает этот класс функций чем-то особенным, имхо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.