Sergey Dmitriev ([info]sergeydmitriev) wrote,
@ 2003-08-31 16:52:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:language_oriented_programming

Новый подход к программированию.
При современных способах программирования есть такая проблема – очень трудно описать компьютеру напрямую то что от него хочется. Каждый раз приходится переводить то описание задачи и ее решения, которое сидит а голове, на какой-нибудь язык программирования. При этом, к сожалению, многое из смысла задачи теряется.
Возьмем какой-нибудь ООП язык программирования – например Java. Здесь у нас в распоряжении пара десятков языковых конструкций – класс, метод, цикл и т.д.
Основная возможность по расширению языка состоит в определении новых классов. Для такого языка все классы в принципе на одно лицо – это просто набор методов и полей, ну еще ссылка на класс-родитель и на набор интерфейсов.

Чуть более подробно про эти проблемы см. What is bad about OOP

В идеале хотелось бы чтобы для данного класса задач можно было бы легко задать язык программирования наиболее близко выражающий понятия соответствующей предметной области. Я здесь описываю возможный способ решения этой проблемы.

Опишем новый подход:

Любая программа представляет из себя граф, состоящий, конечно, из узлов и ребер.
Этот граф задается сначала на этапе кодирования, затем может меняться на этапе компиляции, а также и во время исполнения программы.

При исполнении программы задается входной узел графа, ему передается управление, а затем каждый узел определяет, какому узлу выполняться дальше.
В данном случае речь идет об интерпретаторе такой программы, написать который наиболее просто. Однако, в силу простоты базовой модели, возможно будет написать и компилятор в некоторый байт-код, а также виртуальную машину для него (по аналогии как это реализовано для языка Java)

Каждый узел такого графа является экземпляром некоторого типа узлов – назовем такой тип “Семантический тип” (Semantic Type).
Опишем подробнее, что из себя представляет “Семантический тип”.
В качестве примера семантических типов рассмотрим понятие “Java class” и “if statement”

Каждый семантичекий тип определяет:

1. Набор ссылок (links), которые описывают ребра этого графа. Каждая такая ссылка имеет определенную роль – это некоторая строка, определяеющая тип ссылки.
Для каждого типа ссылок задается семантический тип (Semantic Type) узла на который они могут ссылаться.
Для каждого типа ссылок задается возможное количество ссылок данного типа в одном узле (Cardinality) - ровно одна или несколько или не более одной и т.д.
Для каждого типа ссылок также необходимо задать на каком этапе они задаются (в момент кодирования, компиляции или выполнения). Если какой-то тип ссылок вычисляется во время компиляции или выполнения, то необходимо предоставить алгоритм вычисления этих ссылок.

Пример: Java class имеет 5 типов ссылок: ссылки на поля, ссылки на методы, ссылки на конструкторы, ссылка на базовый класс, ссылки на реализуемые интерфейсы.
Пример: “If statement” имеет 4 типа ссылок: на условие, на “if true expression”, на “if false expression” и на следующее выражение – на которое передается управление после окончания работы всего “if statement”а – эта ссылка устанавливается во время исполнения программы.

2. Задание следующего узла во время исполнения программы.
Аналогично, следующий узел может быть задан либо жестко в момент кодирования, либо вычисляться во время компиляции или выполнения программы.
Каждый узел может иметь собственное внутреннее состояние во время исполнения программы, которое может использоваться при таком вычислении.
Пример: Java class получает управление только в момент первого использования. В этот момент он инициализирует все свои статические поля, а также выполняет блок статической инициализации. Затем он переводит свое состояние в “initialized = true” и больше ничего не делает а просто возвращает управление тому кто ему его передал.
Пример: При передаче управления на “If statement” он создает специальный узел, который получит управление при выходе из условия, затем передает управление условию, передавая ему также и указатель а этот узел. Этот специальный узел при получении управления от условия проверяет вершину стека на “true” и в зависимости от этого передает управление на соответствующее выражение в “If statement”е. Можно обойтись и без создания специальных узлов, если ввести понятие разных точек входа в узел при передаче ему управления и возможность передавать эти точки входа вместо передачи указателя на узел.

3. Внутреннее состояние – определяет состояние узла во время исполнения программы. Задается некоторым набором полей, может изменяться во время передачи управления данному узлу.
Пример: Java class имеет состояние “initialized”

4. Действия, исполняемые при передаче управления данному узлу.
При передаче управления узел может изменить свое внутреннее состояние, а также может читать или записать что-то на стек или в память. (Описание модели стека и памяти - ниже). Также узел имеет доступ к графу программы (через свои ссылки) и может читать его содержимое, а также менять граф путем создания или удаления других узлов и изменения ссылок.

5. Дополнительные свойства (параметры) узла – определяются набором поименованных строк.
Пример: Java class может иметь свойства “abstract” со значениями “true” и “false”, свойство “visibility”, которое принимает значения public или package local и т.д.

Память и стек.
Память – это куча, с возможностью выделять и удалять ее сегменты, а также записывать данные по заданному адресу. (Возможно будет также поддержка автоматической сборки мусора)
Стек – это собственно стек. Может быть более одного стека при поддержке многонитевости.
Память и стек, изначально пустые, доступны узлам при передаче им управления во время исполнения программы.

Чем хорош и интересен такой подход?

Тем что возникает возможность расширять язык программирования, интегрировать разные языки в одну систему. Появляется возможность легко вводить языки, специализированные для данной предметной области.

Любой язык можно задать набором определений семантических типов, что полностью определяет семантику языка. И наоборот, можно утверждать, что для определения семантики языка достаточно такого набора определений.

Надо заметить что до сих пор ни слова не было сказано о синтаксисе языка. Дело в том что синтаксис нужен только если речь идет о текстовом представлении языка, здесь же программа всегда представлена в виде графа, в таком виде сразу создается и редактируется. Конечно же необходимо иметь удобный редактор для этого. У меня есть ощущение, что редактор графа можно сделать более удобным и выразительным, чем текстовый редактор. Правда такой способ редактирования поначалу может показаться поначалу и непривычным нам, привыкшим выражать мысли и программы в виде потока слов и предложений.

Конечно же такой редактор не обязан быть одинаковым для всех семантических типов. Как раз наоборот, для каждого семантического типа должна быть возможность задать специализированный редактор, позволяющий оптимально вводить и изменять данные для соответствующего узла.

В каком-то смысле изложенные идеи сочетают в себе идеи “Intentional Programming”-а и идеи языка Форт.

В настоящее время я имплементирую программу-прототип реализующую изложенную модель, и надеюсь вскоре выложить первый вариант.
В первую очередь я моделирую язык Java, также хотелось бы смоделировать какой-нибудь функциональный язык (типа Lisp или ML), а также логический язык (типа Prolog), ну и конечно же смоделировать языки для нескольких предметных областей (в том числе язык описания самих семантических типов – для достижения замыкания системы на себя)

В этом прототипе семантические типы описываются обыкновенными Java классами. Затем программа-граф задается как набор экземпляров этих классов.

Следующие шаги

1. Написание среды разработки.
2. Поддержка многопоточности.
3. Работа с системными ресурсами – файлы и т.д.
4. Поддержка описания интерфейса с пользователем – наиболее трудная и интересная на мой взгляд проблема.
5. Bootstrap



(Post a new comment)

Навскидку - может, полезно
[info]perikov
2003-08-31 09:12 am UTC (link)
Относительно представления программы графом - если удастся что-нибудь выковырять из этого базара. Поищу еще ссылки на работы в области семантических каркасов (AI) тоже некоторые вещи похожи - вдруг полезно будет... Более взвешенные комментарии - несколько позже.

(Reply to this)(Thread)

Re: Навскидку - может, полезно
[info]sergeydmitriev
2003-09-01 08:38 am UTC (link)
Спасибо за линк - я почитал, очень похоже что этот Claus Gittinger думает в том же направлении, правда он скорее хочет применить похожую технику для реализации байт-кода и виртуальной машины - чтобы обеспечить компиляцию в него разных языков программирования, и вообще в его изложении все довольно мутно. Мой же подход предполагает что такой подход применяется сразу, во время проектирования и кодирования.

(Reply to this)(Parent)

Aha
chup
2003-09-01 12:27 am UTC (link)
Оч-чень интересно. А на каком этапе разработка прототипа? Если это будет что-то в роде opensource, то я мог бы помочь с реализацией какого-нибудь Haskell, ML ну или, если совсем уж захочется, то Lisp.

(Reply to this)(Thread)

Re: Aha
[info]sergeydmitriev
2003-09-01 08:48 am UTC (link)
Я думаю что через пару недель можно будет нечто выложить. Я обязательно напишу об этом сюда.

(Reply to this)(Parent)


[info]lazybear
2003-09-01 04:56 am UTC (link)
интересно в качестве научной работы... (что-то вроде расширеных по возможностям сетей Петри)
в реальности, imho, еще долго будут писать все на C/C++/Java (в зависимости от платформы и задачи) - и расширение идет в сторону увеличения кол-ва библиотек... т.е. экстенсивный путь, а не интенсивный... к сожалению

(Reply to this)(Thread)


[info]sergeydmitriev
2003-09-01 09:35 am UTC (link)
На самом деле уже давно пишут не только на C/C++/Java,
а также например еще на HTML, JSP, ASP, PHP, JavaScript и т.д. -для описания web интерфейса. Различные языки на базе XML также используется повсюду для описания разного рода данных и дескрипторов. Кроме того в различных конкретных областях используются свои специализированные языки.
В общем программы уже давно перестали быть кодом на одном "чистом и универсальном" языке программирования.

(Reply to this)(Parent)


(Anonymous)
2003-09-01 08:03 am UTC (link)
Хо-хо-хо !

Да ну ?! Программу графом представить ! Нетривиааально, нетривиаально... :-)

А как Вы думаете работает любой компилятор (ну ладно, не любой, а более-менее серьезный, оптимизирующий) ?

Ваше ощущение, что редактор графа можно было-бы сделать выразительнее чем текстовый редактор -- ошибочно.

В этом убедились в National Instruments, когда создали свою Labview, и не только там... я когда-то в 1980-е годы написал подобный язык, изначально ориентированный на графы, причем цель там была -- параллелизм и суперкомпьютеры... В обоих случаях речь идет не обо "всем", а об ориентации на узкую предметную область...

Эх блин, нехватка образования... именно она позволяет считать подобные идеи "новыми" и перспективными... да, и кроме нее еще и неумеренное честолюбие... лавры, Явы, значит покоя не дают...

Так говорите в Праге серость коллекционируют... :-)

К.Л.М.

(Reply to this)(Thread)


[info]sergeydmitriev
2003-09-01 09:14 am UTC (link)
Ну а ругаться то зачем? Насчет честолюбия - я считаю что это одна из движущих сил при познании нового. Остальную часть ругани оставляю без комментариев.

По поводу конструктивной части письма - я вовсе не утверждал что редактор графа будет обязательно иметь вид диаграммного редактора, я просто говорю что не будет текстового представления программы с грамматикой, лексером, парсером и т.д. Такое текстовое представление резко сужает возможности расширения языка, а если изначально стараться делать язык расширяемым (как XML) то он получается слишком громоздкий.
Я также вовсе не утверждаю что это я придумал представлять программу сразу в виде графа, похожие идеи были описаны в методе, называемом "Intentional Programming" by Charles Simonyi.

(Reply to this)(Parent)(Thread)

"Умный редактор" - (Anonymous), 2003-09-17 03:39 am UTC
зачем ругаться ? - [info]dr_klm, 2003-09-20 09:43 am UTC
Re: зачем ругаться ? - [info]kirillk, 2003-09-23 05:56 am UTC
речь идет о языке программирования, - [info]dr_klm, 2003-09-23 07:01 am UTC
Re: зачем ругаться ? - [info]ivan_ghandhi, 2004-07-19 09:04 pm UTC

(Anonymous)
2007-02-05 08:50 am UTC (link)
бред полный. Как будто, код программы - это не узлы графа, а их атрибуты не описываются ключевыми словами языка программирования...

(Reply to this)(Parent)


[info]msh
2003-09-01 09:49 am UTC (link)
А Вы пробовали оценивать сложность графа?

Например, на примере какого-нибудь хорошо известного алгоритма

(Reply to this)(Thread)

(no subject) - [info]sergeydmitriev, 2003-09-01 11:15 am UTC

[info]s1m
2003-09-01 01:26 pm UTC (link)
Любой мало-мальски грамотный компилятор на первых шагах превращает исходный текст программы в DAG(Directed Acyclic Graph), над которым потом и идет работа. В процессе оптимизации строятся другие графы. В чем новизна-то? В том, что бы вместо получения высого-производительно машинного кода с помощью достаточно сложных в реализации алгоритмов, просто интерпретировать DAG?

(Reply to this)(Thread)

(no subject) - [info]sergeydmitriev, 2003-09-01 02:15 pm UTC
(no subject) - [info]s1m, 2003-09-02 09:14 am UTC
(no subject) - [info]it_romance, 2007-05-14 07:22 pm UTC
(no subject) - [info]it_romance, 2007-05-14 07:24 pm UTC

[info]all_x
2003-09-02 02:16 am UTC (link)
Я плохо понимаю, как предложенный подход достигает указанной цели:

"В идеале хотелось бы чтобы для данного класса задач можно было бы легко задать язык программирования наиболее близко выражающий понятия соответствующей предметной области. Я здесь описываю возможный способ решения этой проблемы."

Вы хотите определить некоторое исполнимое внутреннее представление программы, виртуальную машину, в которую можно транслировать специализированные языки для разных предметных областей?

Мне кажется, что часто для этого достаточно мощного языка высокого уровня, той же Java. И трансляторов со специализированных языков в неё.
Получаем те же возможности по расширению языка и интеграции языков.
Задача задания семантических типов по сложности сравнима с написанием транслятора :)

Прошу заметить, что вы предлагаете способ обработки графа. То есть, с точки зрения интерпретатора, все семантические типы получаются "на одно лицо".
Точно так же, как классы Java. Имеем то же самое, только на другом уровне.

Во всех специализированных областях базовые конструкции управления ходом обработки данных (условие, цикл и т.п.) остаются актуальными. То есть,
речь может идти только о расширении набора конструкций специфическими для данной области.

Кстати, текстовое представление до сих пор остаётся наиболее эффективным по скорости кодирования алгоритмов. На верхнем уровне можно и картинками программу представлять, но для самих алгоритмов ничего лучше текста я не знаю. Мышкой что-то рисовать можно замучаться. Узлов-то огромное количество.

Я по работе занимаюсь сходными вещами, немного думал на аналогичную тему.
В голове сложилось странное представление о роли синтаксиса программы.
Фактически, можно заменить синтаксис любого языка программирования XML представлением дерева синтаксичесго разбора. Получается альтернативный способ представления исходного текста программы. С синтаксисом, одинаковым для всех языков. Для каждого тега надо задать правила выполнения или трансляции. Расширение языка - добавление новых тегов и правил для них.
Это проще, чем расширение языка, ровно на трудоемкость модификации парсера.

Кстати, есть реализации executable XML, например, jelly, на котором пишутся plug-ins для maven. (см. http://jakarta.apache.org, http://maven.apache.org).
Всё-таки язык с нормальным синтаксисом удобнее.

(Reply to this)(Thread)

(no subject) - [info]sergeydmitriev, 2003-09-02 03:19 am UTC
(no subject) - [info]all_x, 2003-09-02 03:50 am UTC
(no subject) - [info]sergeydmitriev, 2003-09-02 04:51 am UTC
(no subject) - (Anonymous), 2003-09-02 12:46 pm UTC
(no subject) - [info]ivan_ghandhi, 2004-07-19 09:07 pm UTC

[info]e_neo
2003-09-02 08:23 am UTC (link)
А чем это отличается от классических Грамматик?

(Reply to this)(Thread)

(no subject) - [info]sergeydmitriev, 2003-09-02 04:59 pm UTC
(no subject) - [info]e_neo, 2003-09-03 12:21 am UTC

[info]alex_ep
2003-09-02 09:38 am UTC (link)
Я, отчасти, согласен с коллегами, которые замечают, что любой транслятор превращает программу в граф. Но да дело даже не в этом. Кстати в XP, вроде, входит (забыл как называется на семинаре Зиновьева это обсуждали) промежуточный код, в который должны транслироваться программы с ЛЮБЫХ языков. Меня вот что интересует. ООП подразумевает не только написание ПРОГРАММЫ (ОО программирование) но и ее проектирование (ОО проектирование). CASE средства уверенно подходят к ситуации, когда из UML будет генериться код. Очевидно, что диаграмму можно представить и в С++ и в Java. Но этот подход позволяет решить одну из главных проблем ПРОИЗВОДСТВА: повторное использование (хотя бы на уровне паттернов проектирования :)). А как эту проблему будете решать Вы?

(Reply to this)(Thread)

(no subject) - (Anonymous), 2003-09-02 12:18 pm UTC
(no subject) - [info]alex_ep, 2003-09-02 10:21 pm UTC
(no subject) - (Anonymous), 2003-09-03 12:01 am UTC
Ничего не понял
[info]gdy
2003-09-02 09:53 am UTC (link)
Я может невнимательно читал, но чем это принципиально отличается от Лиспа?
Ещё вопрос, я так понял, вы хотите поддержать различные парадигмы программирования; у пролога, лиспа и явы общего, мне кажется, мало, чтобы имело смысл их объединять в одну систему, более высокоуровневую, чем стековая VM (.NET, скажем), или нет?
Что касается domain-specific язычков, то они, как я понимаю, реализуются в рамках какой-то одной заранее выбранной парадигмы, и от универсальности нижележащей платформы толку вроде снова мало?

(Reply to this)


(Anonymous)
2003-09-02 12:29 pm UTC (link)
Существует довольно много таких ПЯ, расширяемых, претендующих на универсальность. Некоторые из них свободны, не привязаны к одному языку, с парсерами, визуализаторами внутреннего представления, генераторами и со своими болячками, разумеется. Например, Zephire. Последнее, что видел из этой области - Quad. Quad, в частности, был успешно использован для написания hot-spot жабы на самой себе.

Приятно, конечно, иметь свой собственный промежуточный язычок. А будет ли он чем-нибудь лучше существующих?

Лучше ли графовое представление текстового - сомневаюсь, честно говоря. Был такой язык NETL.

(Reply to this)


(Anonymous)
2003-09-03 12:08 am UTC (link)
Нельзя ль изобразить во всех подробностях (это существенно) предлавгаемое графовое представление для простого примера, скажем, рекурсивного факториала:

unsigned factorial( const unsigned n ) {
return n == 0 ? 1 : n * factorial( n-1 );
}

с вызовом (в некоторой среде)

const unsigned a = factorial( 5 )

Интересны именно детали (связывание всех идентификаторов, доступ к переменным, передача параметров, встроенные типы).

(Reply to this)


[info]ersh
2003-09-05 04:12 am UTC (link)
При беглом взгляде показалось, что идея похожа на EMF.

(Reply to this)

между прочим
[info]lnvp
2003-09-09 12:17 am UTC (link)
Intentional Programming скорее мертво, чем живо. При том что его создатель имел в своём распоряжении весьма приличные ресурсы. Дальше размахивания руками перед разными аудиториями и "на 90% готовых" прототипов (над которыми несколько лет работал коллектив из десятка очень приличных программистов) дело так и не продвинулось.

Наводит на определённые выводы, не находите?

(Reply to this)(Thread)

Re: между прочим - (Anonymous), 2003-10-29 11:03 pm UTC
Re: между прочим - [info]lnvp, 2003-10-30 09:26 pm UTC
Я правильно понял
(Anonymous)
2003-09-23 07:16 am UTC (link)
Сергей, вы пишете:

При исполнении программы задается входной узел графа, ему передается управление, а затем каждый узел определяет, какому узлу выполняться дальше.
В данном случае речь идет об интерпретаторе такой программы, написать который наиболее просто. Однако, в силу простоты базовой модели, возможно будет написать и компилятор в некоторый байт-код, а также виртуальную машину для него (по аналогии как это реализовано для языка Java)


В вашем походе программа сразу существует в виде некоторого байт-кода и может быть иполнена на некоторой виртуальной машине. Какой может быть прок в дополнительном компиляторе, еще одном байт-коде и еще одной виртуальной машине?

Итак, коме самой среды разработки, вы намерены разработать как минимум спецификацию на байт-код и спецификацию на виртуальную машину.
Как только это будет сделано, сразу же (примерно за 1-2 недели, ведь базовая модель очень проста) будут написаны виртуальные машины для всех пратформ, которые будут установлены повсеместно. Почему? А кому будет нужен всякий технологический хлам на котором строят сейчас информационные системы? Типа всяких там аппликашен, веб и прочих серверов, всяких middleware и распределенных платформ типа EJB, .NET, CORBA со всеми их java-ми, C#-ми, Applet-ами, Servlet-ами, jsp-ями и проч.
Это потрясение, видимо, переживут только транспортные протоколы и DBMS.

Я правильно понял?:)

ial

(Reply to this)(Thread)

Re: Я правильно понял - (Anonymous), 2003-11-05 02:46 pm UTC
Re: Я правильно понял - [info]sergeydmitriev, 2003-11-06 05:56 am UTC
воображения не хватаетЖ(
(Anonymous)
2003-09-23 11:20 am UTC (link)
Сергей,
в описании вашего подхода к программированию (кстати, может его уже как-нибудь назвать?Ж)) вы используете модель java для иллюстрации ваших тезисов. На мой взгляд, с точки зрения иллюстративности, выбор крайне неудачный.

Вы пишете:
”В идеале хотелось бы чтобы для данного класса задач можно было бы легко задать язык программирования наиболее близко выражающий понятия соответствующей предметной области.”

Java – предметная область? Обычно, этим термином обозначается все, что угодно, только не это. А если и так, то понятия этой области слишком низкоуровневые. К томуже, прекрасно выражаются самой java.

В результате, выстраиваются аналогии, которые скорее мешают, чем помогают понять ваши идеи.
Читаю про состояния узлов, про переходы, а в голове: ну класс загрузился, ну выражение посчиталось, ну true на вершине стека. Да это jvm какая-то.
А если SemanticNode типа constructor полчит управление, то, надо полагать, он выделит сегмент памяти и запишет данные по данному адресу. Проще говоря создаст SemanticObject.
Для полной аналогии и сборщик мусора упомянут.

Получается, ругали ООП а оппа, и опять поуши в ООП.

Наверное, у меня слабое воображение, но хочется примера, который хоть чуть-чуть поднимает планку над ООП. Ну что-нибудь из АОП хотябы.

Спасибо.
ial

(Reply to this)(Thread)

Re: воображения не хватаетЖ( - (Anonymous), 2003-11-05 02:42 pm UTC
Re: воображения не хватаетЖ( - [info]sergeydmitriev, 2003-11-06 05:50 am UTC
Теряется общая суть
[info]aefimov
2004-02-03 10:21 am UTC (link)
Привет Сергей,

Во первых хотел сказать, что данная работа заслуживает уважения! Поэтому я не понимаю тех, кто пытается ее критиковать с точки зрения "это уже было". Мне читать было интересно и я думаю, Вы обязательно добъетесь работающей модели.

Однако, в общей смоделированной системе графов не умещаются такие сущьности как "Память" и "Стек". Они (эти две сущности) ломают общую модель (каждый граф состоиттолько из узлов и ребер, иначе это не граф).

Получается что для достижения общей целостности необходимо в этой системе графов предусмотреть симантику для памяти и стека.

С другой стороны - если рассматривать каждый узел графа более подробно, то можно видеть, что каждый узел графа - есть еще один граф, который определяет поведение этого узла. Т.е. вроде как получается что граф состоит из узлов, которые являются графами и т.д.

Это я все к тому, что граф, как логическая организация системы, актуален лишь на строго однородном срезе программы. Более того, для описываемой вами системы, граф может состоять из узлов схожей симантики. Не может быть так, чтобы на одном графе были представлены и классы (classes) и условия перехода (if statement) - это разный уровень.

В результате получается, что есть необходимость введения уровней в Вашу модель. От наиболее абстрактного - до наиболее конкретного.

Например, уровень для тредов - где расписаны взаимодействия между потоками, далее уровень, детализирующий каждый поток, например, граф классов. И так далее.

Вроде как должна получиться иерархическая структура, состоящая из графов. Вот в такой структуре, гдето на самых верхних уровнях найдеться место и для сущности "Память", и чуть пониже - для сущности "Стек" (наверное где-то рядом с тредами).

Спасибо!

(Reply to this)(Thread)

Re: Теряется общая суть - (Anonymous), 2005-06-25 08:51 pm UTC
RLRJhyhuOngQp
(Anonymous)
2007-05-19 05:54 am UTC (link)
Good site, thanks! APosterTest

(Reply to this)

wigDHVcKqlTYsrwj
(Anonymous)
2007-06-22 03:56 am UTC (link)
a6a7d2745ee994377352f07b209ce0d6

(Reply to this)


[info]gomolyako
2007-10-18 11:02 am UTC (link)
Простите, не осилил всей статьи и комментариев, но суть зацепил и хотел бы посоветовать посмотреть в сторону Windows Workflow Foundation. Там можно даже описать свой язык или использовать существующий (например BPEL), только названия отличаются от предложенных Вами, а так вроде все как Вам хотелось бы :)

(Reply to this)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…