Это гораздо меньше о модели актера и намного больше о том, как трудно правильно написать что-то аналогичное OTP в C ++.Кроме того, разные операционные системы обеспечивают радикально различную отладку и системный инструментарий, а виртуальная машина Erlang и несколько языковых конструкций поддерживают единый способ выяснить, что представляют собой все эти процессы, и что было бы очень трудно сделать единообразным способом (или, возможно, сделатьна всех) на нескольких платформах.(Важно помнить, что Erlang / OTP предшествует текущему ажиотажу над термином «модель актера», поэтому в некоторых случаях такого рода дискуссии сравнивают яблоки и птеродактили; великие идеи склонны к независимому изобретению.)
Все это означает, что, хотя вы, безусловно, можете написать набор программ «актерской модели» на другом языке (я знаю, я делал это в течение долгого времени на Python, C и Guile, не осознавая этого до того, как столкнулся с Erlang, включая формумониторов и ссылок, и прежде чем я услышал термин «модель актора»), понять, как процессы на самом деле порождают ваш код и что происходит среди них , чрезвычайно сложно.Erlang применяет правила, которые ОС просто не может обойтись без серьезных изменений ядра - изменений ядра, которые, вероятно, не будут в целом полезными.Эти правила проявляются как общие ограничения на программиста (которые всегда можно обойти, если вам действительно это нужно), так и основные обещания, которые система гарантирует программисту (которые могут быть сознательно нарушены, если вам действительно это необходимо).
Например, он обеспечивает, чтобы два процесса не могли совместно использовать состояние, чтобы защитить вас от побочных эффектов.Это не означает, что каждая функция должна быть «чистой» в том смысле, что все являются референтно прозрачными (очевидно, нет, хотя сделать столько же вашей программы референтно прозрачными, сколь и практичными, является четкой целью проектирования большинства проектов Erlang), а скорее, что два процесса не всегда создают условия гонки, связанные с общим состоянием или конфликтом.(Между прочим, это больше означает, что "побочные эффекты" означают в контексте Erlang; знание того, что это может помочь вам расшифровать некоторые вопросы о том, является ли Erlang "действительно функциональным или нет" по сравнению с Haskell или игрушечными "чистыми" языками.)
С другой стороны, среда выполнения Erlang гарантирует доставку сообщений.Это то, чего очень не хватает в среде, где вы должны общаться исключительно через неуправляемые порты, каналы, разделяемую память и общие файлы, которыми управляет только ядро ОС (и управление ядром ОС этими ресурсами обязательно крайне минимально по сравнению с тем, что использует Erlang).время выполнения обеспечивает).Это не означает, что Erlang гарантирует RPC (во всяком случае, передача сообщений , а не RPC, и при этом это не вызов метода!), Это не обещает, что ваше сообщение адресовано правильно, и не обещаетчто процесс, которому вы пытаетесь отправить сообщение, существует или является живым.Это просто гарантирует доставку, если то, что вы отправляете, является действительным в тот момент.
Основанное на этом обещании обещание, что мониторы и ссылки являются точными.И исходя из этого, среда исполнения Erlang оттаивает всю концепцию «сетевого кластера», как только вы поймете, что происходит с системой (и как использовать erl_connect ...).Это позволяет вам уже перепрыгнуть через ряд хитрых случаев параллелизма, что дает большой старт при написании кода для успешного случая вместо того, чтобы увязнуть в болоте защитных методов, необходимых для открытого параллельного программирования.
Так что на самом деле не требуется Erlang, язык, о среде выполнения и OTP, уже существующий, выраженный довольно чисто, и реализация чего-то близкого к нему на другом языке чрезвычайно сложна.ОТП - это просто тяжелый поступок, которому нужно следовать.В том же духе нам не нужно C ++, мы могли бы просто придерживаться необработанного двоичного ввода, Brainfuck, и считать Assembler нашим языком высокого уровня.Нам также не нужны поезда или корабли, поскольку мы все знаем, как ходить и плавать.
Все это говорит о том, что байт-код виртуальной машины хорошо документирован, и появилось несколько альтернативных языков, которые компилируются в него илиработать со средой исполнения Erlang.Если мы разбим вопрос на часть языка / синтаксиса («Нужно ли мне понимать руны Луны для выполнения параллелизма?») И часть платформы («Является ли OTP наиболее зрелым способом выполнения параллелизма, и будет ли он направлять меня к самым хитрым»наиболее распространенные ошибки, которые можно найти в параллельной распределенной среде? "), тогда ответ (" нет "," да ").