Что означают Обратные вызовы "трудно читать и труднее рассуждать" - PullRequest
0 голосов
/ 24 февраля 2020

в статье "Многопоточность и обратные вызовы. Что подразумевается под разделом?

Код, который интенсивно использует обратные вызовы, может стать трудным для чтения и труднее рассуждать.

Учебник по многопоточности и обратным вызовам

1 Ответ

0 голосов
/ 24 февраля 2020

(это, вероятно, основано на мнении, но ...):

1) трудно читать: люди обычно читают последовательно, будь то проза, доказательства или код. Эксперименты с реорганизацией историй не привели к улучшению понимания прочитанного. В коде это:

while condition is not true
    wait for event
perform condition handling

более читабельно, чем

on event do event_handler
....
event_handler:
    if condition is true
        perform condition handling

, несмотря на историю последнего идиома, включая сигналы FORTRAN, PL / 1, BASI C и UNIX. Я уверен, что есть множество теорий о познании, которые Google предоставил бы, если бы вы спросили ее.

2) Труднее рассуждать: здесь разум предполагает использование механических инструментов. В предыдущем примере, приведенном выше, обработка условия выполняется в контексте субъекта (потока, процесса, ...), который его ожидал. Этот субъект может нести важный контекст для обработки условия, такой как блокировки и обработчики исключений. Например, представьте, что код для обработки условия может вызвать исключение. Обязательно ли верно, что те же субъекты, которые устанавливают обработчик, являются теми, кто его обрабатывает? В такой системе, как libdispatch, это не так, но иногда это так. Охватывает ли ваше тестирование обе возможности?

Без глубокого самоанализа как механизма диспетчеризации событий, так и кода обработки событий трудно определить, какие зависимости проходят через эту границу диспетчеризации. Без доступа ко всем приложениям, фреймворку, операционной системе и даже исходным кодам компилятора это может оказаться невозможным. Возможно, это хорошая реклама для открытого исходного кода.

Но ... Они применимы к традиционным последовательным программам (тысячи строк в Фортране). Если вы построили свою программу в соответствии с формальной конструкцией, такой как конечный автомат или автоматы pu sh down, вы можете указать свою программу в формальном языке (например, ya cc). Это значительно облегчает понимание и рассуждение.

Я бы не стал буквально предлагать yacc; но любая формальная система будет настаивать на управлении конечным автоматом (машинами), поэтому ваша программа будет существовать полностью как набор выносок, вызываемых при реализации переходов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...