При создании системных служб, которые должны иметь высокую надежность, я часто заканчиваю тем, что пишу множество «отказоустойчивых» механизмов в случае таких вещей, как: потеря связи (например, связь с БД), что произойдет, если питание теряется, а служба перезапускается .... как собирать куски и продолжать правильно (и помнить, что при подборе кусков сила может снова уйти ...) и т. д. и т. д.
Я могу себе представить, что для не слишком сложных систем язык, который бы обслуживал это, был бы очень практичным. Таким образом, язык, который запомнил бы свое состояние в любой момент, независимо от того, отключено ли оно, и продолжает ли он с того места, где остановился.
Это уже существует? Если так, где я могу найти это? Если нет, то почему это не может быть реализовано? Мне кажется, это очень удобно для критических систем.
p.s. В случае потери соединения с БД это будет означать, что возникла проблема, и необходимо ручное вмешательство. В тот момент, когда соединение восстановится, оно продолжит с того места, где остановилось.
EDIT:
Поскольку обсуждение, похоже, прошло, позвольте мне добавить несколько моментов (пока я жду, прежде чем смогу добавить награду к вопросу)
Отклик Эрланга сейчас, похоже, самый высокий. Я знаю об Эрланге и читал прагматичную книгу Армстронга (основного создателя). Это все очень хорошо (хотя функциональные языки заставляют мою голову вращаться при всей рекурсии), но бит «отказоустойчивый» не приходит автоматически. Отнюдь не. Erlang предлагает множество супервизоров и других методологий для контроля процесса и его перезапуска в случае необходимости. Тем не менее, чтобы правильно сделать что-то, что работает с этими структурами, вам нужно быть настоящим гуру erlang, и вам нужно, чтобы ваше программное обеспечение соответствовало всем этим фреймворкам. Кроме того, если питание падает, программист тоже должен собрать кусочки и попытаться восстановить при следующем запуске программы
То, что я ищу, является чем-то гораздо более простым:
Представьте себе язык (такой простой, как, например, PHP), где вы можете делать такие вещи, как запросы к БД, выполнять над ними действия, выполнять операции с файлами, выполнять операции с папками и т. Д.
Однако его главная особенность должна заключаться в следующем: если питание умирает, и вещь перезапускается, она берет из того места, где остановилась (поэтому она не только запоминает, где она была, она также запоминает переменные состояния). Кроме того, если он остановился в середине файловой копии, он также будет корректно возобновлен. и т. д.
И последнее, но не менее важное: если соединение с БД прерывается и не может быть восстановлено, язык просто останавливается и сигнализирует (возможно, syslog) о вмешательстве человека, а затем продолжает с того места, где он остановился.
Такой язык значительно упростил бы программирование многих сервисов.
EDIT:
Кажется (судя по всем комментариям и ответам), что такой системы не существует. И, вероятно, не будет в ближайшем обозримом будущем из-за невозможности получить (почти?) Право.
Слишком плохо .... опять же я не ищу этот язык (или структуру), чтобы доставить меня на Луну, или использую его для отслеживания чьего-то сердечного ритма. Но для небольших периодических служб / задач, которые всегда заканчиваются нагрузками кода, обрабатывающими пограничные ситуации (сбой питания где-то посередине, разрыв соединений и невозможность возврата), ... где пауза здесь ... исправить проблемы, .. ... и продолжайте там, где вы остановились, подход будет хорошо работать.
(или подход к контрольной точке, как указал один из комментаторов (как в видеоигре). Установите контрольную точку .... и, если программа умрет, перезапустите здесь в следующий раз.)
Награда:
В последнюю возможную минуту, когда все пришли к выводу, что это невозможно, Стивен С. приходит с napier88, который, кажется, обладает теми качествами, которые я искал.
Хотя это экспериментальный язык, он доказывает, что это возможно, и это то, что заслуживает более подробного изучения.
Я буду смотреть на создание своей собственной инфраструктуры (возможно, с постоянным состоянием и снимками), чтобы добавить функции, которые я ищу в .Net или другой виртуальной машине.
Всем спасибо за вклад и отличные идеи.