Одним из примеров недетерминированного языка является Occam , основанный на теории CSP . Комбинация конструкций PAR
и ALT
может привести к недетерминированному поведению в многопроцессорных системах, реализующих мелкозернистые параллельные программы.
При использовании мягких каналов, то есть каналов между процессами на одном процессоре, реализация ALT
сделает поведение, близкое к детерминированному & dagger; , но как только вы начнете использовать жесткие каналы (физические непроцессорные каналы связи) исчезает любая иллюзия детерминизма. Не предполагается, что различные удаленные процессоры будут синхронизироваться каким-либо образом, и они могут даже не иметь одинаковое ядро или тактовую частоту.
& dagger; Конструкция ALT
часто реализуется с PRI ALT
, поэтому вам нужно явно кодировать, если вам нужно, чтобы она была честной.
Недетерминизм рассматривается как недостаток, когда речь идет о рассуждениях и доказательстве правильности программ, но во многих отношениях после того, как вы его приняли, вы освобождаетесь от многих ограничений, которые детерминизм навязывает вашим рассуждениям.
Пока последовательность коммуникации не приводит к тупику , который может быть сделан с применением методов CSP, тогда точный порядок, в котором все это делается, должен иметь значение намного меньше чем вы получаете результаты, которые вы хотите вовремя.
Возможно, именно отсутствие детерминизма было основным фактором, препятствующим внедрению систем Occam и Transputer в военных проектах, где доминировали Ada в то время, когда точно знали то, что процессор делал на каждом такте, считалось необходимым для проверки правильности системы. Без этого ограничения системы Occam и Transputer, на которых он работал (единственные в то время процессоры с формально проверенной реализацией с плавающей запятой IEEE), были бы идеально подходящими для жестких военных систем реального времени, требующих высокого уровня функциональности обработки в небольшом пространство.