Задачка: придумать язык
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 11:58
Оценка: 3 (2)
Навеяно топиком о Лиспе.
Итак — требуется придумать язык, заточенный под кодогенерацию (не модификацию!) на современных мейнстрим языках — Java, C#, C++. Требования (не все имеет отношение к языку, но тем не менее):
1) Декларативное описание входных данных
2) Декларативное описание структуры входных данных.
3) Возможность работы с несколькими источниками входных данных.
4) Простота и лаконичность описания основных программных конструкций целевых языков.
5) Максимально декларативная сущность описаний генераторов.
5) Простота парсинга самих описаний генераторов.
6) Возможность расширения.

На природу языка — императивный, функциональный и т.п. ограничений нет.

У кого какие мысли есть?
... << RSDN@Home 1.2.0 alpha rev. 565>>
AVK Blog
Re: Задачка: придумать язык
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 14.07.05 12:12
Оценка: 53 (4)
Здравствуйте, AndrewVK, Вы писали:

AVK>На природу языка — императивный, функциональный и т.п. ограничений нет.

AVK>У кого какие мысли есть?

JetBrains MPS однако
Смотреть тут: http://www.jetbrains.com/mps/
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re[2]: Задачка: придумать язык
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 12:25
Оценка:
Здравствуйте, xvost, Вы писали:

X>JetBrains MPS однако


Он у вас платный наверное будет. А хотелось использовать например в янусе.
... << RSDN@Home 1.2.0 alpha rev. 565>>
AVK Blog
Re[3]: Задачка: придумать язык
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 14.07.05 12:29
Оценка:
Здравствуйте, AndrewVK, Вы писали:

X>>JetBrains MPS однако

AVK>Он у вас платный наверное будет. А хотелось использовать например в янусе.

Ну во-первых он в такой глубокой бэте, что о чем-то вообще говорить рано, а во-вторых всегда можно поговорить про отдельную licence для некоммерческой разработки
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re[4]: Задачка: придумать язык
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 13:20
Оценка:
Здравствуйте, xvost, Вы писали:

X>Ну во-первых он в такой глубокой бэте, что о чем-то вообще говорить рано, а во-вторых всегда можно поговорить про отдельную licence для некоммерческой разработки


Можно. Но оно, как я понял, еще и к идее привязано. Да и здоровое оно какое то. Можно сюда прмиерчиков и скриншотов?
... << RSDN@Home 1.2.0 alpha rev. 565>>
AVK Blog
Re[5]: Задачка: придумать язык
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 14.07.05 13:23
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Можно. Но оно, как я понял, еще и к идее привязано.


Да


AVK> Можно сюда прмиерчиков и скриншотов?


Не так сразу. Я в этой области — как поросенок в апельсинах. Самому разбираться надо, а в предверии EAP'а РеШарпера времени нет катастрофически
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re: Задачка: придумать язык
От: Gaperton http://gaperton.livejournal.com
Дата: 14.07.05 13:35
Оценка: 10 (1)
Здравствуйте, AndrewVK, Вы писали:

AVK>У кого какие мысли есть?


Что тут придумывать. Бери и пиши. Для твоей задачи http://www.rsdn.ru/Forum/Message.aspx?mid=1270710&amp;only=1
Автор: AndrewVK
Дата: 13.07.05

Применяем слегка измененный Erlang. Я добавил туда записи в стиле Clean, для удобства — родные recordes несколько кривоваты.

Программа выполняет генерацию кода по дереву, построенному XML-парсером.
## это будет частью библиотеки. Функция принимает дерево во внутреннем представлении и возвращает строку.
## дерево представлено набором иерархических структур. У структуры есть обязательное поле tag, которое содержит
## атом - имя функции, которая должна быть вызвана для разбора элемента (почти Лисповый фокус),
##  и (для парных тэгов) поле .childs, содержащее список вложенных элементов.
parsetree( [ H | T ] ) -> parsetree( H ) ++ parsetree( T );
parsetree( [] ) -> "";
parsetree( Node ) -> Node.tag( Node ).

#обработка тэга objects
objects( Node ) -> parsetree( Node.list ).

#тег property - будем вызывать его явно.
property( Node ) -> Node.type ++ " " ++ Node.name.

#тег object
object( { Name = .name, [ H | T ] = Props = .childs } ) ->
   "public class " ++Name++ "\n"
   "{\n\n"
   "    public " ++Name++ "(" ++ propery( H ) ++ [ ", " ++ property( p ) || p <- Props] ++ ")\n"
   "   {\n" 
++["      _" ++p.name++ " = " ++p.name++ ";\n" || p <- Props ]++
   "   }\n"
++["\n    private " ++p.type++ " _" ++p.name++ ";\n\n"
   "      public " ++p.type++ " " ++capitalize( p.Name )++ "\n"
   "      {\n"
   "         get { return _" ++p.name++ "; }\n"
   "      }\n" || p <- Props ]++
   "}\n"
Re[6]: Задачка: придумать язык
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 13:42
Оценка:
Здравствуйте, xvost, Вы писали:

AVK>>Можно. Но оно, как я понял, еще и к идее привязано.


X>Да


Ну так значит негодится .

AVK>> Можно сюда прмиерчиков и скриншотов?


X>Не так сразу. Я в этой области — как поросенок в апельсинах.


Ну так я не тороплю

X> Самому разбираться надо, а в предверии EAP'а РеШарпера времени нет катастрофически


Как то он у вас подзатянулся. Обещали еще 3 недели назад.
... << RSDN@Home 1.2.0 alpha rev. 565>>
AVK Blog
Re[7]: Задачка: придумать язык
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 14.07.05 13:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

X>> Самому разбираться надо, а в предверии EAP'а РеШарпера времени нет катастрофически

AVK>Как то он у вас подзатянулся. Обещали еще 3 недели назад.

Угу, есть такое. Программа максимум — выпустить версию завтра. Но может и не получиться
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re[2]: Задачка: придумать язык
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.07.05 13:47
Оценка:
Здравствуйте, xvost, Вы писали:

AVK>>На природу языка — императивный, функциональный и т.п. ограничений нет.

AVK>>У кого какие мысли есть?

X>JetBrains MPS однако

X>Смотреть тут: http://www.jetbrains.com/mps/

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

Подтолкни там своий. Мы же вас бесплатно отрекламируем.
... << RSDN@Home 1.2.0 alpha rev. 557>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Задачка: придумать язык
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.07.05 13:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Итак — требуется придумать язык, заточенный под кодогенерацию (не модификацию!) на современных мейнстрим языках —


А я вот с удовольствием послушал бы идеи о языке для модификации.
... << RSDN@Home 1.2.0 alpha rev. 557>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Задачка: придумать язык
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 13:52
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Что тут придумывать. Бери и пиши. Для твоей задачи http://www.rsdn.ru/Forum/Message.aspx?mid=1270710&amp;only=1
Автор: AndrewVK
Дата: 13.07.05

G>Применяем слегка измененный Erlang. Я добавил туда записи в стиле Clean, для удобства — родные recordes несколько кривоваты.

И чем это лучше XSLT или приведенных примеров на лиспе?
... << RSDN@Home 1.2.0 alpha rev. 565>>
AVK Blog
Re[3]: Задачка: придумать язык
От: Gaperton http://gaperton.livejournal.com
Дата: 14.07.05 14:20
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Gaperton, Вы писали:


G>>Что тут придумывать. Бери и пиши. Для твоей задачи http://www.rsdn.ru/Forum/Message.aspx?mid=1270710&amp;only=1
Автор: AndrewVK
Дата: 13.07.05

G>>Применяем слегка измененный Erlang. Я добавил туда записи в стиле Clean, для удобства — родные recordes несколько кривоваты.

AVK>И чем это лучше XSLT или приведенных примеров на лиспе?

Кажется, ты интересовался способом решить эти вопросы?

1) Декларативное описание входных данных
2) Декларативное описание структуры входных данных.
3) Возможность работы с несколькими источниками входных данных.
4) Простота и лаконичность описания основных программных конструкций целевых языков.
5) Максимально декларативная сущность описаний генераторов.
5) Простота парсинга самих описаний генераторов.
6) Возможность расширения.


А на самом деле, преимущество одно. Минимальная семантическая разница между постановкой задачи и решением. На лиспе вполне возможно приблизиться к этому варианту. На XSLT — нет, и semantic gap в случае XSLT больше.
Re[3]: Задачка: придумать язык
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.07.05 14:25
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>И чем это лучше XSLT или приведенных примеров на лиспе?


В отличии от Лиспа я хотя бы могу понять что происходит.

Правда ХСЛТ я тоже неплохо понимаю.
... << RSDN@Home 1.2.0 alpha rev. 557>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Задачка: придумать язык
От: Andre Украина  
Дата: 14.07.05 14:26
Оценка: 20 (1)
AVK>Можно. Но оно, как я понял, еще и к идее привязано. Да и здоровое оно какое то. Можно сюда прмиерчиков и скриншотов?
Тут Фаулер немного разбирал эту тему, у него и примерчик есть.
... << RSDN@Home 1.1.4 beta 7 rev. 467>>
Я бы изменил мир — но Бог не даёт исходников...
Re[4]: Задачка: придумать язык
От: Gaperton http://gaperton.livejournal.com
Дата: 14.07.05 14:30
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>А на самом деле, преимущество одно. Минимальная семантическая разница между постановкой задачи и решением. На лиспе вполне возможно приблизиться к этому варианту. На XSLT — нет, и semantic gap в случае XSLT больше.


Хотя и XSLT вполне достойно смотрится на этой задаче, надо признать. Жаль только, что он узкоспециализирован.
Re[4]: Задачка: придумать язык
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 14:34
Оценка:
Здравствуйте, Gaperton, Вы писали:

AVK>>И чем это лучше XSLT или приведенных примеров на лиспе?

G>Кажется, ты интересовался способом решить эти вопросы?

Не просто решить, а красиво решить.

G>А на самом деле, преимущество одно. Минимальная семантическая разница между постановкой задачи и решением. На лиспе вполне возможно приблизиться к этому варианту. На XSLT — нет, и semantic gap в случае XSLT больше.


А теперь то же самое и по русски.
... << RSDN@Home 1.2.0 alpha rev. 565>>
AVK Blog
Re[5]: Задачка: придумать язык
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 14.07.05 14:34
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, Gaperton, Вы писали:


G>>А на самом деле, преимущество одно. Минимальная семантическая разница между постановкой задачи и решением. На лиспе вполне возможно приблизиться к этому варианту. На XSLT — нет, и semantic gap в случае XSLT больше.


G>Хотя и XSLT вполне достойно смотрится на этой задаче, надо признать. Жаль только, что он узкоспециализирован.


Наверное поэтому на этой задаче он и смотрится.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Задачка: придумать язык
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 14:44
Оценка:
Здравствуйте, Andre, Вы писали:

AVK>>Можно. Но оно, как я понял, еще и к идее привязано. Да и здоровое оно какое то. Можно сюда прмиерчиков и скриншотов?

A>Тут Фаулер немного разбирал эту тему, у него и примерчик есть.

Понятно. Это опять не то, чего я хотел. Мне не интересны инструменты создания полномасштабных DSL, мне интересно создание утилиты для решения внутрипрограммных целей путем кодогенерации.
... << RSDN@Home 1.2.0 alpha rev. 565>>
AVK Blog
Re[4]: Задачка: придумать язык
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 14:55
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>В отличии от Лиспа я хотя бы могу понять что происходит.


VD>Правда ХСЛТ я тоже неплохо понимаю.


Ну вобщем да, синтаксис самого языка конечно лучше, но вот то, в самом низу, которое с кучей кавычичек и строковых констант, всю малину портит .
... << RSDN@Home 1.2.0 alpha rev. 565>>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.