Книга: Искусство программирования для Unix
20.3.6. В Unix API не используются исключительные ситуации
20.3.6. В Unix API не используются исключительные ситуации
Язык С испытывает недостаток средств восстановления для обработки именованных исключительных ситуаций со связанными данными[154]. Таким образом, C-функции в Unix API сообщают об ошибках путем возвращения известного значения (обычно -1 или указатель на NULL-символ) и установки глобальной переменной errno.
Оглядываясь назад, становится ясно, что это является источником многих неочевидных ошибок. Программисты в спешке часто пренебрегают проверкой возвращаемых значений. Так как исключительные ситуации не обрабатываются, нарушается правило исправности; процесс выполнения программы продолжается до тех пор, пока позднее ошибка не проявится при выполнении как некоторый сбой или повреждение данных.
Отсутствие исключений также означает, что некоторые задачи, которые должны были бы быть простыми идиомами — как выход из обработчика сигналов по версии с сигналами Беркли-стиля — должны осуществляться с помощью сложного кода, который является причиной проблем переносимости и чреват ошибками.
Данная проблема может быть скрыта (и обычно скрывается) привязками Unix API в таких языках, как Python или Java, в которых есть исключительные ситуации.
Недостаток исключений фактически является индикатором проблемы с последующими более крупными последствиями. Слабая онтология типов в С делает проблематичным обмен данными между реализованными на нем языками более высокого уровня. Например, большинство современных языков имеют списки и словари как первичные типы данных. Однако, поскольку они не имеют канонического представления в С, попытки передавать списки между (например) Perl и Python являются неестественными и требуют большого количества связующего кода.
Существуют технологии, такие как CORBA, которые решают более крупную проблему, но они тяжеловесны и склонны задействовать большое количество преобразований во время выполнения.
- 20.3.1. Unix-файл представляет собой только большой блок байтов
- 20.3.2. Слабая поддержка GUI-интерфейсов в Unix
- 20.3.3. Удаление файлов в Unix необратимо
- 20.3.4. Unix предполагает статичную файловую систему
- 20.3.5. Конструкция системы управления задачами была плохо реализована
- 20.3.6. В Unix API не используются исключительные ситуации
- 20.3.7. Вызовы ioctl(2) и fcntl(2) являются препятствиями
- 20.3.8. Модель безопасности Unix, возможно, слишком примитивна
- 20.3.9. Unix имеет слишком много различных видов имен
- 20.3.10. Файловые системы могут считаться вредными
- 20.3.11. На пути к глобальному адресному пространству Internet
- Новые функции API для работы с Blob и массивами
- Глава 1 UNIX для начинающих
- 11.2. Технология принятия решения в условиях чрезвычайной ситуации
- ЧАСТЬ 1 ВВЕДЕНИЕ В IPC UNIX
- Что такое твикеры и для чего они используются?
- 12.5.4. Ruby и Windows API
- Windows API Tutorials
- Using the Common UNIX Printing System GUI
- UNIX Security Considerations
- Как не следует делать это - C-Unix пример
- ГЛАВА 1 Обзор средств взаимодействия процессов Unix
- 4.2.6. Способы задавания ролей и ситуации в ролевой игре