12.07.2013
В публикации кратко рассматривается новый агент-ориентированный язык программирования Axum, разработанный в Microsoft. Также приводится информация о новом проекте компании по созданию компьютерной модели мира с использованием суперкомпьютерных технологий.
В 1990 г. профессор Стэнфордского университета Йоав Шохам предложил новую парадигму программирования — агент-ориентированный подход, концепция которого заключается в представлении агента в качестве программного модуля, выполняющего поставленные задачи, а его поведение зависит от окружающей среды, которую он воспринимает с помощью датчиков и, в свою очередь, может воздействовать на нее посредством исполнительных механизмов.
По мнению Шохама, агент-ориентированный подход является частным случаем более общей и широко известной парадигмы программирования — объектно-ориентированного программирования. В таблице 1 приведены сравнительные характеристики этих двух подходов [Shoham Y. (1990): Agent Oriented Programming: Technical Report. Computer Science Department, Stanford University].
Таблица 1
Сравнение двух парадигм программирования
|
Объектно-ориентированное программирование |
Агент-ориентированное программирование |
Базовая единица |
Объект |
Агент |
Параметры, которые определяют состояние базовой единицы |
Без ограничений |
Убеждения, обязательства, возможности, выбор и др. |
Процесс вычислений |
Получение сообщений и методы ответа |
Получение сообщений и методы ответа |
Виды сообщений |
Без ограничений |
Информирование, запрос, предложение, обещание, отказ и др. |
Ограничения используемых методов |
Нет |
Честность, последовательность и др. |
Если объект в рамках объектно-ориентированной парадигмы программирования определяется набором методов и атрибутов, то агент задается описанием своего поведения в более широком смысле.
Идея агент-ориентированного программирования предполагает, что агент является программной сущностью с определенной степенью автономности и целью выполнения задач для пользователя. При этом считается, что агенты автономнее, чем объекты, и их поведение более гибкое, а также более социальное — в том смысле, что соответствующий программный код выполняется не автоматически, а по решению самого агента в зависимости от ситуации, задач, текущих приоритетов и параметров среды.
В 2009 г. одна из крупнейших транснациональных компаний по производству программного обеспечения — Microsoft (а точнее, DevLabs — подразделение Microsoft, занимающееся экспериментальными и инновационными программными разработками) анонсировала новый язык программирования — Axum, который был изначально предназначен для написания многопоточных параллельных приложений, оптимизированных для работы на многоядерных процессорах. Другой, не менее важной особенностью нового языка является реализация в нем агент-ориентированной парадигмы программирования. Таким образом, экспериментальный язык вобрал в себя многие прогрессивные концепции программирования, а основной целью его создания стала проверка совместимости перечисленных выше парадигм в рамках одного языка.
По синтаксису и ряду конструкций Axum наиболее близок к языку C#, однако они концептуально разные. Ниже приведены их общие элементы и основные различия.
Общее
- все C#3.0 выражения, в том числе LINQ (Language Integrated Query) запросы;
- все C#3.0 операторы;
- объявление полей и методов;
- делегаты и перечисляемые типы.
Не поддерживаемые в Axum элементы языка C#
- классы, интерфейсы и структуры;
- объявление операторов;
- свойства;
- константные поля и константные переменные;
- статические поля и методы.
Уникальные особенности Axum
- агенты и домены;
- каналы;
- схемы;
- сети;
- асинхронные потоки.
Таким образом, главные концепции Axum — каналы, схемы, слои, домены и агенты. Первое, что бросается в глаза, — отсутствие в Axum классов. Вместо них в новом языке есть новый абстрактный тип — агенты, которые хоть и похожи на классы, но на них нельзя ссылаться. Однако взаимодействие между агентами происходит посредством передачи сообщений в рамках каналов. Агенты близки по смыслу потокам, но при этом они гораздо «легче» потоков, и, вообще говоря, количество агентов может составлять сотни, тысячи или даже миллионы в рамках одной программы.
Каналы представляют собой набор портов, каждый из которых поддерживает асинхронную буферизацию со строгой семантикой. Каналы могут использоваться для обеспечения связи между распределенными частями приложения, использующего одинаковую агент-ориентированную программную модель. Порты — это основные элементы для определения канала, и при этом каждый порт определяется посредством ориентации, названия и типа.
Проиллюстрируем идею каналов на примере [Microsoft Corporation (2009): Axum Programmer's Guide], [Gustafsson N. (2009): Axum language overview (v0.8), Jun. 16, 2009]. Рассмотрим канал Adder, который принимает два числа (Num1 и Num2) и выдает сумму этих чисел (Sum). Пользователь канала посылает эти числа во входные порты Num1 и Num2 и получает результат в выходной порт Sum. Канал используется агентом MainAgent и осуществляется агентом AdderAgent (рис. 1).

Рис. 1. Двойственность портов при реализации канала Adder
Канал определяется с помощью ключевого слова channel, а его порты определяются с помощью ключевых слов input и output. В конструкторе агента MainAgent с помощью статического метода CreateInNewDomain агента AdderAgent создается экземпляр канала Adder. Таким образом, создаются два порта канала Adder (являющиеся экземплярами различных типов), а также создается экземпляр агента AdderAgent, который реализует канал, а затем возвращает значение, передаваемое в выходной порт канала. Далее мы посылаем сообщения в порты Num1 и Num2 и ожидаем результата от порта Sum (листинг 1).
using System;
using System.Concurrency;
using Microsoft.Axum;
channel Adder
{
}input int Num1;input int Num2;output int Sum;
agent AdderAgent : channel Adder
{
public AdderAgent(){
int result = receive(PrimaryChannel::Num1) + receive(PrimaryChannel::Num2);PrimaryChannel::Sum <-- result;
}
}
agent MainAgent : channel Microsoft.Axum.Application
{
public MainAgent(){
var adder = AdderAgent.CreateInNewDomain();adder::Num1 <-- 10;adder::Num2 <-- 20;var sum = receive(adder::Sum);Console.WriteLine(sum);PrimaryChannel::ExitCode <-- 0;
}
}
Листинг 1. Программный код на языке Axum, реализующий канал Adder
Каждая программа, написанная на языке Axum, содержит по крайней мере один домен, обеспечивающий точку входа в приложение. Однако главная цель доменов заключается в обеспечении изоляции памяти между параллельными прикладными компонентами.
При асинхронной обработке данных, как правило, необходимо обеспечить буферизацию данных, которая может иметь различные формы (к примеру, в виде неограниченной очереди изменяемых переменных). В Axum реализован механизм, основанный на концепции абстрактных точек взаимодействий, которые могут быть составлены в виде сетей потоков данных или же могут использоваться непосредственно в асинхронных операциях. Точки взаимодействий представляют собой основу всех асинхронных операций в Axum и позволяют программисту осуществлять маршрутизацию асинхронных данных в рамках одной модели. В свою очередь, сети позволяют комбинировать точки взаимодействия в сложные структуры, используя семь бинарных операторов и один унарный.
Схемы позволяют осуществлять операции сериализации данных, а также корректное выполнение асинхронных операций (к примеру, чтобы реализуемые параллельно агенты до определенного момента не имели доступа к общим изменяемым состояниям). Концептуально схемы Axum похожи на схемы XML и в меньшей степени — на структуры в C#.
Работа над инновационным программным языком Axum на данный момент закончена, и в виде самостоятельного продукта он на рынок не выйдет. По мнению разработчиков, этот проект был весьма успешным и апробированные в нем концепции найдут применение в будущих релизах .NET: C# и VB будут поддерживать асинхронные режимы выполнения программного кода, а также реализованные в Axum парадигмы агент-ориентированного подхода в программировании. Наверное, с коммерческой точки зрения действительно эффективнее расширять функционал имеющихся и уже достаточно распространенных языков программирования, чем выводить на рынок абсолютно новые. Для нас, тем не менее, важно, что крупнейший вендор программного обеспечения в числе прочего взял курс на поддержку агентного подхода в своих продуктах.
Более того, в 2010 г. компания Microsoft анонсировала ни много ни мало компьютерную модель мира с использованием в том числе агент-ориентированного подхода, т. е., по сути, создание виртуальной реальности, описывающей текущее состояние социальной и экономической системы всего мира. Более подробную информацию можно найти на сайте www.modelingtheworld.com.

Рис. 2. Промо-сайт проекта
Ниже приведен текст, озвученный топ-менеджерами компании (в частности, Бобом Маглиа (Bob Muglia), экс-президентом подразделения серверов и инструментов бизнеса в Microsoft) в промо-роликах, размещенных на упомянутом сайте:
«На протяжении своей истории человечество стремилось к новым знаниям и пыталось ответить на самые важные для себя вопросы. При этом было собрано огромное количество самых разных данных, которые наши ученые и специалисты в области информационных технологий будут обрабатывать в течение ближайших пяти лет. Мы будем использовать весь потенциал наших технических наработок с целью моделирования окружающего нас мира, что позволит, по нашему мнению, перейти на другой уровень понимания наиболее актуальных проблем нашего времени для их последующего разрешения. В этой связи мы считаем, что наука находится в точке бифуркации: новейшие достижения в области суперкомпьютерных технологий, а также в области технологий интеллектуальной обработки информации позволят нам разрабатывать сложные модели, возможности которых соответствуют тем скоростям, с которыми меняется современный мир. Мы считаем, что создаваемые нами модели позволят найти пути трансформации для ключевых отраслей, оказывающих влияние на все население планеты, — для энергетики и здравоохранения. Кроме того, мы предполагаем, что инструментарий окажет огромное влияние на бизнес-сообщество и отрасль инженерии знаний, что может привести к созданию принципиально новых продуктов, предприятий и отраслей промышленности. Мы приглашаем профессионалов разных областей (инженеров, экономистов, бизнесменов, политиков и др.) к сотрудничеству и совместному поиску решений для ЛЮДЕЙ и ПЛАНЕТЫ».
Рис. 3. Боб Маглиа, экс-президент подразделения серверов и инструментов бизнеса в Microsoft
Несомненный интерес крупнейших игроков IT-рынка к агентным моделям лишний раз доказывает перспективность инструмента и его большое будущее.