LINUX.ORG.RU

Common Lisp restarts and module incapsulation


0

1

CL не знаю, но интересны его conditions. Не пойму, как разработчики узнают какие есть restart'ы при вызове к.-н. функции из стороннего закрытого модуля. По идее, функции должны экспортировать возможные рестарты (типа throws в Java)...


> Не пойму, как разработчики узнают какие есть restart'ы при вызове

к.-н. функции из стороннего закрытого модуля.


Читают документацию?

функции должны экспортировать возможные рестарты


Это не реалистично (примерно как с throw в C++). Да и зачем?

archimag ★★★ ()

throws-спецификации попросту не будут работать в CL. Например, для функции funcall нельзя указать, какие conditions могут быть сигнализированы при вызове функции funcall, и какие рестарты будут доступны.

Узнают следующими способами:

1) Из экспериментов в REPL

2) Из документации

3) Из исходников

dmitry_vk ★★★ ()
Ответ на: комментарий от archimag

>> Не пойму, как разработчики узнают какие есть restart'ы при вызове

к.-н. функции из стороннего закрытого модуля.


Читают документацию?

А если в статически типизированном языке сделать рестарты, то как можно всё это описать? Чтобы при изменении модуля, если удалили рестарт, то при компиляции выдавал ошибку у меня.

Похожий механизм описан в книге Yemini S., Berry D. A Modular Verifiable Exception-Handling Mechanism (http://se.uwaterloo.ca/~dberry/FTP_SITE/reprints.journals.conferences/YeminiB...). Но там нет такой возможности: если идёт последовательность вызовов A -> B -> C -> D, в ф-ции C есть c-restart и при ошибке в D, то A решает продолжить с точки c-restart. Или не так просто сделать, как в CL.

tnodir ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.