Я нахожусь в процессе оценки Swift как серверного языка для нетривиального веб-приложения. Причиной выбора Swift является возможность обмена кодом с существующим приложением для iOS, написанным на Swift. Я создал небольшое, в основном IO-связанное приложение CRUD (использующее Vapor 3.0, если это имеет значение) для оценки, и в целом опыт был довольно нейтральным. Я не буду вдаваться в подробности, поскольку они не связаны с этим вопросом.
Язык Swift по своему замыслу не предлагает способа восстановления после фатальных ошибок, подобных тем, которые вы получили бы, развернув Optional со значением nil.
Я не понимаю, как эта характеристика проекта должна обрабатываться на практике в серверных приложениях. Даже если я сделаю так, чтобы в моем коде никогда не происходило принудительного развертывания Optional, например, как я могу верить, что ни один из авторов библиотеки не сделает этого? Как я могу гарантировать, что если поток встретит фатальную ошибку, это не приведет к краху всего сервера с ним?
Итак, мой вопрос: каковы хорошие практики для решения этих ситуаций? Я должен запустить свое приложение через fcgi? Контролировать это каким-то внешним процессом и каким-то образом перезапустить при сбое? Это не может быть приемлемо, например, в сложном приложении с большим количеством серверных состояний и дорогостоящей обработкой, что было бы одной из основных причин выбора быстро скомпилированного языка.