Модель актора в информатике — это математическая модель параллельных вычислений , которая рассматривает актора как базовый строительный блок параллельных вычислений. В ответ на полученное сообщение актор может: принимать локальные решения, создавать больше акторов, отправлять больше сообщений и определять, как реагировать на следующее полученное сообщение. Акторы могут изменять свое собственное частное состояние , но могут влиять друг на друга только косвенно через обмен сообщениями (устраняя необходимость в синхронизации на основе блокировок ).
Модель акторов возникла в 1973 году. [1] Она использовалась как в качестве основы для теоретического понимания вычислений , так и в качестве теоретической основы для нескольких практических реализаций параллельных систем . Связь модели с другой работой обсуждается в модели акторов и исчислениях процессов .
По словам Карла Хьюитта , в отличие от предыдущих моделей вычислений, модель акторов была вдохновлена физикой , включая общую теорию относительности и квантовую механику . [ необходима ссылка ] На нее также оказали влияние языки программирования Lisp , Simula , ранние версии Smalltalk , системы, основанные на возможностях , и коммутация пакетов .
Его разработка была «мотивирована перспективой высокопараллельных вычислительных машин, состоящих из десятков, сотен или даже тысяч независимых микропроцессоров , каждый из которых имеет собственную локальную память и коммуникационный процессор , взаимодействующих через высокопроизводительную коммуникационную сеть ». [2] С тех пор появление массового параллелизма посредством многоядерных и многоядерных компьютерных архитектур возродило интерес к модели акторов.
После публикации Хьюитта, Бишопа и Штайгера в 1973 году Ирен Грейф разработала операционную семантику для модели акторов в рамках своего докторского исследования. [3] Два года спустя Генри Бейкер и Хьюитт опубликовали набор аксиоматических законов для систем акторов. [4] [5] Другие важные вехи включают диссертацию Уильяма Клингера 1981 года, в которой была представлена денотационная семантика, основанная на доменах власти [2], и диссертацию Гула Аги 1985 года, в которой была дополнительно разработана семантическая модель на основе переходов, дополнительная к модели Клингера. [6] Это привело к полной разработке теории модели акторов .
Основная работа по программной реализации была проделана Рассом Аткинсоном, Джузеппе Аттарди, Генри Бейкером, Джерри Барбером, Питером Бишопом, Питером де Йонгом, Кеном Каном, Генри Либерманом , Карлом Мэннингом, Томом Рейнхардтом, Ричардом Штайгером и Дэном Терио в группе Message Passing Semantics Group Массачусетского технологического института (MIT). Исследовательские группы под руководством Чака Сейтца в Калифорнийском технологическом институте (Caltech) и Билла Далли в MIT построили компьютерные архитектуры, которые дополнительно развили передачу сообщений в модели. См. Реализация модели акторов .
Исследования модели актора проводились в Калифорнийском технологическом институте , Лаборатории Токоро Киотского университета , Корпорации микроэлектроники и компьютерных технологий (MCC), Лаборатории искусственного интеллекта Массачусетского технологического института , SRI , Стэнфордском университете , Иллинойсском университете в Урбане-Шампейне [ 7] , Университете Пьера и Марии Кюри (Университет Париж 6), Пизанском университете , Лаборатории Ёнэдзава Токийского университета , Centrum Wiskunde & Informatica (CWI) и других местах.
Модель актора принимает философию, что все является актором . Это похоже на философию «все является объектом», используемую некоторыми объектно-ориентированными языками программирования.
Актор — это вычислительная сущность, которая в ответ на полученное сообщение может одновременно:
Определенной последовательности вышеперечисленных действий не существует, и они могут выполняться параллельно.
Разделение отправителя и отправляемых сообщений стало фундаментальным достижением модели актора, позволяющим использовать асинхронную коммуникацию и структуры управления в качестве шаблонов передачи сообщений . [8]
Получатели сообщений идентифицируются по адресу, иногда называемому «почтовым адресом». Таким образом, актор может общаться только с теми акторами, чьи адреса у него есть. Он может получить их из сообщения, которое он получает, или, если адрес принадлежит актору, которого он сам создал.
Модель акторов характеризуется неотъемлемой параллельностью вычислений внутри и между акторами, динамическим созданием акторов, включением адресов акторов в сообщения и взаимодействием только посредством прямой асинхронной передачи сообщений без ограничений на порядок поступления сообщений.
За прошедшие годы было разработано несколько различных формальных систем, которые позволяют рассуждать о системах в модели акторов. К ним относятся:
Существуют также формализмы, которые не полностью соответствуют модели акторов, поскольку они не формализуют гарантированную доставку сообщений, включая следующие (см. Попытки связать семантику акторов с алгеброй и линейной логикой ):
Модель актора может использоваться в качестве основы для моделирования, понимания и рассуждений о широком спектре параллельных систем . [15] Например:
Модель актора касается семантики передачи сообщений .
Можно утверждать, что первыми параллельными программами были обработчики прерываний . В ходе своей обычной работы компьютер должен был иметь возможность получать информацию извне (символы с клавиатуры, пакеты из сети и т. д. ). Поэтому, когда поступала информация, выполнение компьютера прерывалось и вызывался специальный код (называемый обработчиком прерываний), чтобы поместить информацию в буфер данных , откуда ее можно было впоследствии извлечь.
В начале 1960-х годов прерывания начали использоваться для имитации одновременного выполнения нескольких программ на одном процессоре. [17] Наличие параллелизма с общей памятью породило проблему управления параллелизмом . Первоначально эта проблема была задумана как проблема взаимного исключения на одном компьютере. Эдсгер Дейкстра разработал семафоры , а позднее, между 1971 и 1973 годами, [18] Тони Хоар [19] и Пер Бринч Хансен [20] разработали мониторы для решения проблемы взаимного исключения. Однако ни одно из этих решений не предоставляло конструкцию языка программирования, которая инкапсулировала бы доступ к общим ресурсам. Эта инкапсуляция была позже достигнута конструкцией сериализатора ([Hewitt and Atkinson 1977, 1979] и [Atkinson 1980]).
Первые модели вычислений ( например , машины Тьюринга , постановки Поста, лямбда-исчисление и т . д. ) были основаны на математике и использовали глобальное состояние для представления вычислительного шага (позже обобщенного в [McCarthy and Hayes 1969] и [Dijkstra 1976] см. Упорядочение событий в сравнении с глобальным состоянием ). Каждый вычислительный шаг был от одного глобального состояния вычисления к следующему глобальному состоянию. Подход глобального состояния был продолжен в теории автоматов для конечных автоматов и стековых машин push down , включая их недетерминированные версии. Такие недетерминированные автоматы обладают свойством ограниченного недетерминизма ; то есть, если машина всегда останавливается при запуске в своем начальном состоянии, то существует ограничение на количество состояний, в которых она останавливается.
Эдсгер Дейкстра далее развил недетерминированный подход глобального состояния. Модель Дейкстры породила спор относительно неограниченного недетерминизма (также называемого неограниченной неопределенностью ), свойства параллелизма , при котором величина задержки в обслуживании запроса может стать неограниченной в результате арбитража конкуренции за общие ресурсы, при этом по-прежнему гарантируя, что запрос в конечном итоге будет обслужен . Хьюитт утверждал, что модель актора должна предоставлять гарантию обслуживания. В модели Дейкстры, хотя между выполнением последовательных инструкций на компьютере может быть неограниченное количество времени, (параллельная) программа, которая началась в четко определенном состоянии, могла завершиться только в ограниченном количестве состояний [Dijkstra 1976]. Следовательно, его модель не могла предоставить гарантию обслуживания. Дейкстра утверждал, что невозможно реализовать неограниченный недетерминизм.
Хьюитт утверждал иначе: не существует предела тому, сколько времени требуется вычислительной схеме, называемой арбитром, для установления состояния (см. метастабильность (электроника) ). [21] Арбитры используются в компьютерах для решения проблемы, когда компьютерные часы работают асинхронно по отношению к внешнему вводу, например , вводу с клавиатуры, доступу к диску, сетевому вводу и т. д. Таким образом, для получения сообщения, отправленного на компьютер, может потребоваться неограниченное время, и в то же время компьютер может пройти неограниченное количество состояний.
Модель актора характеризуется неограниченным недетерминизмом, который был отражен в математической модели Уилла Клингера с использованием теории доменов . [2] В модели актора нет глобального состояния. [ сомнительно – обсудить ]
Сообщения в модели актора не обязательно буферизуются. Это был резкий разрыв с предыдущими подходами к моделям параллельных вычислений. Отсутствие буферизации вызвало много недоразумений во время разработки модели актора и до сих пор является спорным вопросом. Некоторые исследователи утверждали, что сообщения буферизуются в «эфире» или «среде». Кроме того, сообщения в модели актора просто отправляются (как пакеты в IP ); нет необходимости в синхронном рукопожатии с получателем.
Естественным развитием модели актора стало разрешение адресов в сообщениях. Под влиянием сетей с коммутацией пакетов [1961 и 1964] Хьюитт предложил разработать новую модель параллельных вычислений, в которой сообщения не имели бы никаких обязательных полей вообще: они могли бы быть пустыми. Конечно, если бы отправитель сообщения хотел, чтобы получатель имел доступ к адресам, которых у получателя еще нет, адрес должен был бы быть отправлен в сообщении.
Например, актору может потребоваться отправить сообщение актору-получателю, от которого он позже ожидает получить ответ, но ответ фактически будет обработан третьим компонентом актора, который был настроен на получение и обработку ответа (например, другим актором, реализующим шаблон наблюдателя ). Исходный актор может сделать это, отправив сообщение, которое включает сообщение, которое он хочет отправить, вместе с адресом третьего актора, который будет обрабатывать ответ. Этот третий актор, который будет обрабатывать ответ, называется возобновлением ( иногда также называется продолжением или стековым кадром ). Когда актор-получатель готов отправить ответ, он отправляет ответное сообщение на адрес актора возобновления , который был включен в исходное сообщение.
Таким образом, способность акторов создавать новых акторов, с которыми они могут обмениваться сообщениями, а также способность включать адреса других акторов в сообщения, дает акторам возможность создавать и участвовать в произвольно изменяемых топологических отношениях друг с другом, подобно тому, как объекты в Simula и других объектно-ориентированных языках также могут быть реляционно составлены в изменяемые топологии объектов, обменивающихся сообщениями.
В отличие от предыдущего подхода, основанного на составлении последовательных процессов, модель актора была разработана как изначально параллельная модель. В модели актора последовательность была особым случаем, который вытекает из параллельных вычислений, как объясняется в теории моделей акторов .
Этот раздел нуждается в дополнительных цитатах для проверки . ( Март 2012 ) |
Хьюитт выступил против добавления требования, чтобы сообщения приходили в том порядке, в котором они отправляются актору. Если требуется упорядочение выходных сообщений, то его можно смоделировать с помощью актора очереди, который предоставляет эту функциональность. Такой актор очереди будет ставить в очередь пришедшие сообщения, чтобы их можно было извлечь в порядке FIFO . Таким образом, если актор X
отправил сообщение M1
актору Y
, а затем X
отправил другое сообщение M2
, Y
нет требования, что M1
прибывает Y
до M2
.
В этом отношении модель актора отражает системы коммутации пакетов , которые не гарантируют, что пакеты должны быть получены в том же порядке, в котором они были отправлены. Отсутствие гарантии порядка доставки позволяет коммутации пакетов буферизировать пакеты, использовать несколько путей для отправки пакетов, повторно отправлять поврежденные пакеты и обеспечивать другие оптимизации.
Для большего примера, акторам разрешено конвейеризировать обработку сообщений. Это означает, что в ходе обработки сообщения M1
актор может назначить поведение, которое будет использоваться для обработки следующего сообщения, а затем фактически начать обработку другого сообщения M2
до того, как оно завершит обработку M1
. То, что актору разрешено конвейеризировать обработку сообщений, не означает, что он должен конвейеризировать обработку. Является ли сообщение конвейерным — это инженерный компромисс. Как внешний наблюдатель узнает, была ли обработка сообщения актором конвейеризирована? В определении актора нет двусмысленности, созданной возможностью конвейеризации. Конечно, в некоторых реализациях можно выполнить оптимизацию конвейера неправильно, и в этом случае может возникнуть непредвиденное поведение.
Еще одной важной характеристикой модели актора является локальность.
Локальность означает, что при обработке сообщения актор может отправлять сообщения только на адреса, которые он получает в сообщении, адреса, которые у него уже были до получения сообщения, и адреса для акторов, которые он создает во время обработки сообщения. (Но см. Синтез адресов акторов.)
Также локальность означает, что нет одновременных изменений в нескольких местах. В этом она отличается от некоторых других моделей параллелизма, например , модели сети Петри , в которой токены одновременно удаляются из нескольких мест и помещаются в другие места.
Идея объединения систем акторов в более крупные системы является важным аспектом модульности , который был разработан в докторской диссертации Гул Аги [6] и позднее развит Гул Агой, Яном Мейсоном, Скоттом Смитом и Кэролин Талкотт [9] .
Ключевым нововведением стало введение поведения, заданного как математическая функция для выражения того, что делает актор при обработке сообщения, включая указание нового поведения для обработки следующего поступившего сообщения. Поведения предоставили механизм для математического моделирования совместного использования в параллелизме.
Поведения также освободили модель актора от деталей реализации, например , интерпретатора потока токенов Smalltalk-72. Однако эффективная реализация систем, описанных моделью актора, требует обширной оптимизации. Подробности см. в разделе Реализация модели актора .
Другие системы параллелизма ( например , исчисление процессов ) могут быть смоделированы в модели актора с использованием двухфазного протокола фиксации . [22]
В модели актора существует теорема о вычислительном представлении для систем, которые закрыты в том смысле, что они не получают сообщений извне. Математическое обозначение, обозначенное закрытой системой , строится из начального поведения и функции, аппроксимирующей поведение. Они получают все более и более хорошие аппроксимации и строят обозначение (смысл) для следующим образом [Hewitt 2008; Clinger 1981]:
Таким образом, может быть математически охарактеризовано в терминах всех его возможных поведений (включая те, которые связаны с неограниченным недетерминизмом). Хотя это не реализация , его можно использовать для доказательства обобщения тезиса Чёрча-Тьюринга-Россера-Клина [Kleene 1943]:
Следствием вышеприведенной теоремы является то, что конечный субъект может недетерминированно отреагировать несчетным [ уточнить ] числом различных выходов.
Этот раздел нуждается в дополнительных цитатах для проверки . ( Март 2012 ) |
Одной из основных мотиваций для разработки модели актора было понимание и решение проблем структуры управления, которые возникли при разработке языка программирования Planner . [ требуется ссылка ] После того, как модель актора была изначально определена, важной задачей стало понимание мощности модели относительно тезиса Роберта Ковальски о том, что «вычисление может быть включено в дедукцию». Хьюитт утверждал, что тезис Ковальски оказался ложным для параллельных вычислений в модели актора (см. Неопределенность в параллельных вычислениях ).
Тем не менее, были предприняты попытки расширить логическое программирование на параллельные вычисления. Однако Хьюитт и Ага [1991] утверждали, что полученные системы не были дедуктивными в следующем смысле: вычислительные шаги систем параллельного логического программирования не следуют дедуктивно из предыдущих шагов (см. Неопределенность в параллельных вычислениях ). Недавно логическое программирование было интегрировано в модель актора таким образом, что сохраняется логическая семантика. [21]
Миграция в модели акторов — это способность акторов менять местоположение. Например , в своей диссертации Аки Ёнэдзава смоделировал почтовое отделение, в которое акторы-клиенты могут входить, менять местоположение внутри во время работы и выходить. Актор, который может мигрировать, может быть смоделирован с помощью актора местоположения, который меняется, когда актёр мигрирует. Однако достоверность этого моделирования является спорной и является предметом исследования. [ необходима цитата ]
This section needs additional citations for verification. (August 2021) |
Безопасность субъектов может быть обеспечена следующими способами:
This section needs additional citations for verification. (March 2012) |
Тонким моментом в модели актора является возможность синтезировать адрес актора. В некоторых случаях безопасность может быть использована для предотвращения синтеза адресов (см. Безопасность). Однако, если адрес актора — это просто строка битов, то, очевидно, его можно синтезировать, хотя может быть сложно или даже невозможно угадать адрес актора, если строки битов достаточно длинные. SOAP использует URL для адреса конечной точки, где можно достичь актора. Поскольку URL — это строка символов, его, очевидно, можно синтезировать, хотя шифрование может сделать ее угадывание практически невозможным.
Синтез адресов акторов обычно моделируется с помощью сопоставления. Идея заключается в использовании системы акторов для выполнения сопоставления с реальными адресами акторов. Например, на компьютере структура памяти компьютера может быть смоделирована как система акторов, которая выполняет сопоставление. В случае адресов SOAP это моделирование DNS и остальной части сопоставления URL .
Первоначальная опубликованная работа Робина Милнера по параллелизму [23] также была примечательна тем, что она не была основана на составлении последовательных процессов. Его работа отличалась от модели акторов, поскольку она была основана на фиксированном количестве процессов фиксированной топологии, обменивающихся числами и строками с использованием синхронной коммуникации. Первоначальная модель общающихся последовательных процессов (CSP) [24], опубликованная Тони Хоаром , отличалась от модели акторов, поскольку она была основана на параллельной композиции фиксированного количества последовательных процессов, связанных в фиксированной топологии, и обменивающихся сообщениями с использованием синхронной передачи сообщений на основе имен процессов (см. История модели акторов и исчислений процессов ). Более поздние версии CSP отказались от коммуникации, основанной на именах процессов, в пользу анонимной коммуникации через каналы, подход, также используемый в работе Милнера по исчислению общающихся систем (CCS) и π-исчислению .
Эти ранние модели Милнера и Хоара обе имели свойство ограниченного недетерминизма. Современная теоретическая CSP ([Hoare 1985] и [Roscoe 2005]) явно обеспечивает неограниченный недетерминизм.
Сети Петри и их расширения (например, цветные сети Петри) похожи на акторы в том, что они основаны на асинхронной передаче сообщений и неограниченном недетерминизме, в то время как они похожи на ранние CSP в том, что они определяют фиксированные топологии элементарных этапов обработки (переходов) и хранилищ сообщений (мест).
Модель акторов оказала влияние как на развитие теории, так и на практическую разработку программного обеспечения.
Модель актора повлияла на развитие π-исчисления и последующих исчислений процессов . В своей лекции Тьюринга Робин Милнер писал: [25]
Теперь чистое лямбда-исчисление строится всего с двумя типами вещей: терминами и переменными. Можем ли мы достичь той же экономии для исчисления процессов? Карл Хьюитт со своей моделью акторов ответил на этот вызов давно; он заявил, что значение, оператор значений и процесс должны быть одним и тем же типом вещей: актором.
Эта цель произвела на меня впечатление, поскольку она подразумевает однородность и полноту выражения... Но прошло много времени, прежде чем я смог увидеть, как достичь этой цели в терминах алгебраического исчисления...
Итак, в духе Хьюитта, наш первый шаг — потребовать, чтобы все вещи, обозначаемые терминами или доступные по именам — значения, регистры, операторы, процессы, объекты — были одного рода вещами; все они должны быть процессами.
Модель акторов оказала большое влияние на коммерческую практику. Например, Twitter использовал акторы для масштабируемости. [26] Кроме того, Microsoft использовала модель акторов при разработке своей библиотеки асинхронных агентов. [27] Существует множество других библиотек акторов, перечисленных в разделе библиотек акторов и фреймворков ниже.
По словам Хьюитта [2006], модель акторов решает проблемы архитектуры компьютеров и коммуникаций, языков параллельного программирования и веб-сервисов , включая следующие:
Многие из идей, представленных в модели акторов, теперь также находят применение в многоагентных системах по тем же причинам [Hewitt 2006b 2007b]. Ключевое отличие заключается в том, что агентские системы (в большинстве определений) накладывают дополнительные ограничения на акторов, обычно требуя, чтобы они использовали обязательства и цели.
Ряд различных языков программирования используют модель актора или некоторые ее вариации. Эти языки включают:
Библиотеки или фреймворки акторов также были реализованы для того, чтобы разрешить программирование в стиле акторов в языках, в которых нет встроенных акторов. Некоторые из этих фреймворков:
Имя | Статус | Последний релиз | Лицензия | Языки |
---|---|---|---|---|
Отавия | Активный | 2024-01-02 | Апач 2.0 | Скала |
Гоблины-Рэкет Гоблины-Коварство | Активный | 2024-12-10 | Апач 2.0 | Рэкет, мошенническая схема |
Абстракционист | Активный | 2024-03-04 | Апач 2.0 | Ява |
Xcraft Гоблины | Активный | 2022-08-30 | Массачусетский технологический институт | JavaScript |
Реакция | Активный | 2022-11-30 | Апач 2.0 | Ява |
Актёр | Активный | 2020-04-16 [47] | Apache-2.0 / Массачусетский технологический институт | Ржавчина |
Бастион | Активный | 2020-08-12 [48] | Apache-2.0 / Массачусетский технологический институт | Ржавчина |
Актикс | Активный | 2020-09-11 [49] | Массачусетский технологический институт | Ржавчина |
Аоджет | Активный | 2016-10-17 | Массачусетский технологический институт | Быстрый |
Актер | Активный | 2017-03-09 | Массачусетский технологический институт | Ява |
Актер4j | Активный | 2020-01-31 | Апач 2.0 | Ява |
Актёр | Активный | 2019-04-09 [50] | Апач 2.0 | Ява |
Верт.x | Активный | 2018-02-13 | Апач 2.0 | Java, Groovy, Javascript, Ruby, Scala, Kotlin, Ceylon |
АктерФекс | Неактивный | 2013-11-13 | Апач 2.0 | .СЕТЬ |
Akka (набор инструментов) | Активный | 2022-09-06 [51] | Коммерческий [52] (от 2.7.0, Apache 2.0 до 2.6.20) | Java и Scala |
Акка.НЕТ | Активный | 2020-08-20 [53] | Апач 2.0 | .СЕТЬ |
Апачи Пекко | Активный | 2023-07-26 [54] | Апач 2.0 | Java и Scala |
Дапр | Активный | 2019-10-16 | Апач 2.0 | Java, .NET Core, Go, Javascript, Python, Rust и C++ |
DOTNETACTORS | Активный | 2021-06-14 | Массачусетский технологический институт | .NET, C#, служебная шина Azure |
Remact.Net | Неактивный | 2016-06-26 | Массачусетский технологический институт | .NET, Javascript |
Атеджи PX | Неактивный | ? | ? | Ява |
czmq | Активный | 2016-11-10 | МПЛ-2 | С |
F# MailboxProcessor | Активный | то же, что и F# (встроенная основная библиотека) | Лицензия Apache | Фа# |
Корус | Активный | 2010-02-04 | Лицензия GPL 3 | Ява |
Килим [55] | Активный | 2018-11-09 [56] | Массачусетский технологический институт | Ява |
ActorFoundry (на основе Kilim) | Неактивный | 2008-12-28 | ? | Ява |
ActorKit | Активный | 2011-09-13 [57] | БСД | Objective-C |
Облако Хаскелл | Активный | 2024-04-30 [58] | БСД | Хаскелл |
ОблакоI | Активный | 2023-10-27 [59] | Массачусетский технологический институт | ATS, C/C++, Elixir/Erlang/LFE, Go, Haskell, Java, Javascript, OCaml, Perl, PHP, Python, Ruby, Rust |
Беспорядок | Активный | 2017-05-12 [60] | LGPL 2.1 | C, C++ (cluttermm), Python (pyclutter), Perl (perl-Clutter) |
NАкт | Неактивный | 2012-02-28 | LGPL 3.0 | .СЕТЬ |
Nact Архивировано 2021-02-05 в Wayback Machine | Активный | 2018-06-06 [61] | Апач 2.0 | JavaScript/ReasonML |
Ретланг | Неактивный | 2011-05-18 [62] | Новый BSD | .СЕТЬ |
JАктёр | Неактивный | 2013-01-22 | LGPL | Ява |
Джетланг | Активный | 2013-05-30 [63] | Новый BSD | Ява |
Haskell-Актер | Активен? | 2008 | Новый BSD | Хаскелл |
Гпарс | Активный | 2014-05-09 [64] | Апач 2.0 | Круто |
ООСМОС | Активный | 2019-05-09 [65] | GPL 2.0 и коммерческая (двойное лицензирование) | C. Дружественный к C++ |
Панини | Активный | 2014-05-22 | МПЛ 1.1 | Язык программирования сам по себе |
ПАРЛИ | Активен? | 2007-22-07 | Лицензия GPL 2.1 | Питон |
Пернетик | Активный | 2007-06-29 | LGPL 3.0 | Ява |
Пикос | Активный | 2020-02-04 | Массачусетский технологический институт | КРЛ |
ПостШарп | Активный | 2014-09-24 | Коммерческий / Freemium | .СЕТЬ |
Пульсар | Активный | 2016-07-09 [66] | Новый BSD | Питон |
Пульсар | Активный | 2016-02-18 [67] | LGPL / Затмение | Кложур |
Пикка | Активный | 2019-05-07 [68] | Апач 2.0 | Питон |
Схема борьбы с термитами | Активен? | 2009-05-21 | LGPL | Схема (реализация Гамбита) |
Терон [узурпирован] | Неактивный [69] | 2014-01-18 [70] | Массачусетский технологический институт [71] | С++ |
Трагический | Активный | 2020-03-10 | Массачусетский технологический институт | Питон |
Квазар | Активный | 2018-11-02 [72] | LGPL / Затмение | Ява |
Либактор | Активен? | 2009 | Лицензия GPL 2.0 | С |
Актер-CPP | Активный | 2012-03-10 [73] | Лицензия GPL 2.0 | С++ |
С4 | Неактивный | 2012-07-31 [74] | Апач 2.0 | Ява |
C++ Актор Фреймворк (CAF) | Активный | 2020-02-08 [75] | Лицензия Boost Software 1.0 и BSD 3-Clause | С++11 |
Целлулоид | Активный | 2018-12-20 [76] | Массачусетский технологический институт | Рубин |
Фреймворк актеров LabVIEW | Активный | 2012-03-01 [77] | Соглашение об уровне обслуживания National Instruments | LabVIEW |
Библиотека LabVIEW Messenger | Активный | 2021-05-24 | БСД | LabVIEW |
Орбита | Активный | 2019-05-28 [78] | Новый BSD | Ява |
Фреймворки QP для встраиваемых систем реального времени | Активный | 2019-05-25 [79] | GPL 2.0 и коммерческая (двойное лицензирование) | С и С++ |
libprocess | Активный | 2013-06-19 | Апач 2.0 | С++ |
SObjectizer | Активный | 2024-11-02 [80] | Новый BSD | С++17 |
ротор | Активный | 2022-04-23 [81] | Лицензия Массачусетского технологического института | С++17 |
Орлеан | Активный | 2023-07-11 [82] | Лицензия Массачусетского технологического института | C#/.NET |
Скайнет | Активный | 2020-12-10 | Лицензия Массачусетского технологического института | C/Lua |
Реакторы.IO | Активный | 2016-06-14 | Лицензия BSD | Java/Scala |
либагенты | Активный | 2020-03-08 | Бесплатная лицензия на программное обеспечение | С++11 |
Прото.Актер | Активный | 2021-01-05 | Бесплатная лицензия на программное обеспечение | Go, C#, Python, JavaScript, Котлин |
FunctionalJava Архивировано 22.04.2021 на Wayback Machine | Активный | 2018-08-18 [83] | BSD 3-пункт | Ява |
Райкер | Активный | 2019-01-04 | Лицензия Массачусетского технологического института | Ржавчина |
комедия | Активный | 2019-03-09 | АПЛ 1.0 | JavaScript |
Актеры VLINGO XOOM | Активный | 2023-02-15 | Публичная лицензия Mozilla 2.0 | Java, Kotlin, языки JVM, C# .NET |
wasmCloud | Активный | 2021-03-23 | Апач 2.0 | WebAssembly (Rust, TinyGo, Zig, AssemblyScript) |
луч | Активный | 2020-08-27 | Апач 2.0 | Питон |
клетка | Активный | 2012-08-02 | Новая лицензия BSD | Питон |
go-актер | Активный | 2022-08-16 | Лицензия Массачусетского технологического института | Идти |
Сэнто | Активный | 2022-11-21 | Апач 2.0 | Общий Лисп |
Тарант | Активный | 2023-04-17 | Массачусетский технологический институт | Машинопись, Javascript |
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь )