[DSL] Prolog
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.08.10 17:51
Оценка: 6 (1)
Предлагаю еще одну идею для макроса.

Наткнулся тут на Prolog.NET. Это реализация Prolog-а для .NET 3.5 написанная на C#. Из описания ясно, что в качестве входных данных Prolog.NET может принимать их CodeDom. Лицензия у Prolog.NET весьма свободная. Код доступн на Кодплексе. Состояне (вроде как) Бэта 2.

Было бы очень приятно заполучить пролог в виде встроенного DSL-я в рамках Немерле (естествнно в виде макроса).

Если у когото есть свободное время и интерес, дерзайте!

Пролог позволит решать многие логические задачи намного элегантнее. Это отличное дополнение к ФП и ООП.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [DSL] Prolog
От: Ka3a4oK  
Дата: 22.08.10 18:27
Оценка:
Отдельным файлом(как сейчас планируется сделать С#) или вперемешку?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Re[2]: [DSL] Prolog
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.08.10 18:37
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Отдельным файлом(как сейчас планируется сделать С#) или вперемешку?


Отдельным файлом и делать не чего. Интересно конечно же иметь встроенный пролог. Причем так чтобы его было легко использовать в своих программах.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [DSL] Prolog
От: hardcase Пират http://nemerle.org
Дата: 26.08.10 06:24
Оценка: 6 (1)
Здравствуйте, VladD2, Вы писали:

VD>Пролог позволит решать многие логические задачи намного элегантнее. Это отличное дополнение к ФП и ООП.


Возникла бредовая идея переписать вывод типов на прологе. Это оправданно?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: [DSL] Prolog
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.10 09:14
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Возникла бредовая идея переписать вывод типов на прологе. Это оправданно?


Идея в общем-то совершенно здравая. Но конечно же все зависит от кучи нюансов: производительность данной реализации, возможности работы в инкрементальном режиме (ведь вывод типов это процесс, а не отдельное действие), от степени интеграции, наконец.

А так, сейчас в компиляторе Немерла применяется нечто очень похожее на урезанный пролог, точнее специализированное решение использующее унификацию и откаты как в прологе.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [DSL] Prolog
От: hardcase Пират http://nemerle.org
Дата: 26.08.10 09:41
Оценка:
Здравствуйте, VladD2, Вы писали:

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


H>>Возникла бредовая идея переписать вывод типов на прологе. Это оправданно?


VD>Идея в общем-то совершенно здравая. Но конечно же все зависит от кучи нюансов: производительность данной реализации, возможности работы в инкрементальном режиме (ведь вывод типов это процесс, а не отдельное действие), от степени интеграции, наконец.


Судя по содержимому Prolog.dll, там честный интерпретатор — WamMachine.
В принципе, вкрутить в компилятор этот Пролог возможно, но придется работать с каким-то AST (CodeSentence) а не местными инструкциями — эти WamXxx классы все internal.

VD>А так, сейчас в компиляторе Немерла применяется нечто очень похожее на урезанный пролог, точнее специализированное решение использующее унификацию и откаты как в прологе.


Вот потому и возникла мысль.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: [DSL] Prolog
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.10 13:33
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Судя по содержимому Prolog.dll, там честный интерпретатор — WamMachine.

H>В принципе, вкрутить в компилятор этот Пролог возможно, но придется работать с каким-то AST (CodeSentence) а не местными инструкциями — эти WamXxx классы все internal.

Можно было судить и по дукоментации. Там пямо сказано, что никзоуровневые инструкции напрямую не доступны и не сериализуемы, а работать надо с их CodeDom-ом (т.е. с их АСТ).

VD>>А так, сейчас в компиляторе Немерла применяется нечто очень похожее на урезанный пролог, точнее специализированное решение использующее унификацию и откаты как в прологе.


H>Вот потому и возникла мысль.


Дык то что решение специализированное может очень сильно повлиять на производительность. Хотя по любому было бы интересно попробовать.

По крайней мере, если пролог будет доступен в виде макроса, то можно будет проводить эксперементы, а там видно будет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [DSL] Prolog
От: Ka3a4oK  
Дата: 26.08.10 17:03
Оценка:
Здравствуйте, hardcase, Вы писали:

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


VD>>Пролог позволит решать многие логические задачи намного элегантнее. Это отличное дополнение к ФП и ООП.


H>Возникла бредовая идея переписать вывод типов на прологе. Это оправданно?


Вроде компилятор C# пишется, а там тоже будет нужен вывод типов. Конструкция var. Там можно и опробовать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Re[3]: [DSL] Prolog
От: hardcase Пират http://nemerle.org
Дата: 26.08.10 19:01
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Вроде компилятор C# пишется, а там тоже будет нужен вывод типов. Конструкция var. Там можно и опробовать.


Пишется не компилятор. Грубо говоря пишется транслятор C# -> Nemerle. Вывод типов будет немерловый. К тому же выводить тип var-объявления совершенно ничего не стоит — он будет равен типу rvalue-выражению, который также выводить не придется ибо типы всех подвыражений известны.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: [DSL] Prolog
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.10 19:16
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

H>>Возникла бредовая идея переписать вывод типов на прологе. Это оправданно?


KK>Вроде компилятор C# пишется, а там тоже будет нужен вывод типов. Конструкция var. Там можно и опробовать.


Это ты о чем? Если о парсере C#-а что делает hardcase, так там не планируется делать отдельного компилятора. Скорее всего мы сделаем компиляцию C#-файлов в рамках Nemerle-проектов, но при этом сама компиляция будет производиться средствами компилятора Nemerle, а не будет создаваться отдельный компилятор.

Если речь о том что делается в МС, то вряд ли они будут использовать чужой код.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [DSL] Prolog
От: Ka3a4oK  
Дата: 26.08.10 20:17
Оценка:
Здравствуйте, hardcase, Вы писали:

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


KK>>Вроде компилятор C# пишется, а там тоже будет нужен вывод типов. Конструкция var. Там можно и опробовать.


H>Пишется не компилятор. Грубо говоря пишется транслятор C# -> Nemerle. Вывод типов будет немерловый.

Я с шарпом знаком поскольку-постольку. Немерловский вывод типов эквивалентен шароповскому?

H>К тому же выводить тип var-объявления совершенно ничего не стоит — он будет равен типу rvalue-выражению, который также выводить не придется ибо типы всех подвыражений известны.


Если так, то ок.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Re[5]: [DSL] Prolog
От: hardcase Пират http://nemerle.org
Дата: 26.08.10 20:24
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

H>>Пишется не компилятор. Грубо говоря пишется транслятор C# -> Nemerle. Вывод типов будет немерловый.

KK>Я с шарпом знаком поскольку-постольку. Немерловский вывод типов эквивалентен шароповскому?

Откровенно говоря в C# нет вывода типов.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: [DSL] Prolog
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.10 23:23
Оценка:
Здравствуйте, hardcase, Вы писали:

H>>>Пишется не компилятор. Грубо говоря пишется транслятор C# -> Nemerle. Вывод типов будет немерловый.

KK>>Я с шарпом знаком поскольку-постольку. Немерловский вывод типов эквивалентен шароповскому?

H>Откровенно говоря в C# нет вывода типов.


В C# 3.0 о конечно же есть, но по сравнению с немерловым он, можно сказать, находится на зачаточном уровне.

Реально вывод типов в C# присутствует в лямбдах и методах которые принимают ссылки на делегаты. В основном вывод типов делался под LINQ. И в рамках линка он работает весьма не плохо. Причем, есть даже одно преимущество — скорость на обычных для LINQ задачах.

ЗЫ

Надо понимать, что Немерловый вывод типов не просто более мощный, а вообще другой. Многие тонкие места (которые часто становятся вдохновением для этюдов Никова) у Немерла и Шарпа расходятся. Так что формально говоря это будет не компиляция C#, а компиляция немерла с синтаксисом C#-а. Но учитывая, что эти хитрые места обычно обходятся разумными программистами и учитывая общую мимикрию немерла под шарп, можно быть уверенным, что большая часть кода написанного без оглядки на немерл будет компилироваться без каких бы то ни было переделок. Исключением является код который использует фичи не поддерживаемые немерлом: ансфй, динамик, глобальные алиасы (возможно еще что-то).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [DSL] Prolog
От: catbert  
Дата: 08.09.10 14:50
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Пролог позволит решать многие логические задачи намного элегантнее. Это отличное дополнение к ФП и ООП.


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

Проблема же в том, что Пролог работает с термами (выражениями), которые состоят из элементов. И список типов этих элементов конкретный: строки, символы-атомы, числа. То есть, операции со сложными .NET-овскими объектами в нем не предвидены. В Prolog.NET, насколько я смотрел код и документацию, типы элементов так же ограничены.

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

Я когда-то (когда знал Немерле еще хуже чем сейчас) написал макросы для синтаксиса Пролога, неэффективный (без превращения в машину Воррена) движок и даже парсер прологоподобного языка на Irony. Но вряд ли они, что называется, production-quality. Если у кого-то есть интерес, могу показать
Re[2]: [DSL] Prolog
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.09.10 15:16
Оценка:
Здравствуйте, catbert, Вы писали:

C>Сам синтаксис хорошо интегрируется в Nemerle, даже если не заключать его в рекурсивные строки.


+1

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


А что с точкой точкой с запятой не так?

В прочем можно и сишные && вместо запятых использовать.

C>Проблема же в том, что Пролог работает с термами (выражениями), которые состоят из элементов. И список типов этих элементов конкретный: строки, символы-атомы, числа. То есть, операции со сложными .NET-овскими объектами в нем не предвидены. В Prolog.NET, насколько я смотрел код и документацию, типы элементов так же ограничены.


Мне кажется тащить объекты в мир Прлога — это лишнее. Пусть этим кто-то другой занимается. Нам бы хотя бы заполучить прекомпилируемый Пролог в виде ДСЛ и позвлить легко вызвать его из немерла и немерл из него (функции), а так же легко получать результаты и предавать данные в пролог.

Как верно заметил Хардкейс, тогда бы можно было бы даже вывод типов реализовать на нем, а не самопальных классах.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [DSL] Prolog
От: Ka3a4oK  
Дата: 08.09.10 18:48
Оценка: +1 :)
Идея интересная. Тогда Немерле покроет все основные модели программирования — императивную, функциональную, логическую, объектно-ориентированную(ничего не забыл? ) и станет супергибридным языком, наверно единственным в своем роде.
Re[3]: [DSL] Prolog
От: catbert  
Дата: 08.09.10 19:26
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А что с точкой точкой с запятой не так?


В Прологе точка с запятой — что-то вроде оператора "или".

VD>В прочем можно и сишные && вместо запятых использовать.


Думаю, мелкие синтактические особенности можно поменять поближе к стилю Nemerle. Даже больше, вроде замены синтаксиса отсечений на синтаксис паттерн-матчинга (как, насколько я понимаю, сделали в Эрланге).

VD>Мне кажется тащить объекты в мир Прлога — это лишнее. Пусть этим кто-то другой занимается. Нам бы хотя бы заполучить прекомпилируемый Пролог в виде ДСЛ и позвлить легко вызвать его из немерла и немерл из него (функции), а так же легко получать результаты и предавать данные в пролог.


Для меня вся крутость объединения ООП и ФП в том, что можно создать объект, подкрутить его свойства, а потом засунуть в функциональный алгоритм. Хотелось бы так же ввести и логическую парадигму — не отдельным мини-языком, а как дополнительный способ написания алгоритмов для существующих данных.

VD>Как верно заметил Хардкейс, тогда бы можно было бы даже вывод типов реализовать на нем, а не самопальных классах.


Тогда нужно что-то побыстрее, чем Prolog.NET и CodeDom. Хотя как стартовая точка, почему бы и нет.
Re[4]: [DSL] Prolog
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.09.10 19:52
Оценка:
Здравствуйте, catbert, Вы писали:

C>В Прологе точка с запятой — что-то вроде оператора "или".


Я в курсе. Но причем тут приоритеты?

C>Думаю, мелкие синтактические особенности можно поменять поближе к стилю Nemerle.


+1

C>Даже больше, вроде замены синтаксиса отсечений на синтаксис паттерн-матчинга (как, насколько я понимаю, сделали в Эрланге).


Тут не понял. Ме казалось, что ПМ больше похож на запросы и отношения.

C>Для меня вся крутость объединения ООП и ФП в том, что можно создать объект, подкрутить его свойства, а потом засунуть в функциональный алгоритм. Хотелось бы так же ввести и логическую парадигму — не отдельным мини-языком, а как дополнительный способ написания алгоритмов для существующих данных.


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

C>Тогда нужно что-то побыстрее, чем Prolog.NET и CodeDom. Хотя как стартовая точка, почему бы и нет.


А откуда сведения о медленности Prolog.NET?
Что касается CodeDom, то перед выполнением код переводится во внутренне представление. Так что на скорости вычислений это не должно отразиться.

ЗЫ

На сегодня Пролог практически забыт (незаслуженно, на мой взгляд). Реализация его в рамках универсального, мультипарадигмного языка может подтолкнуть многих к его освоению. И чем черт не шутит, возможно и возражению популярности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [DSL] Prolog
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.09.10 19:58
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Идея интересная. Тогда Немерле покроет все основные модели программирования — императивную, функциональную, логическую, объектно-ориентированную(ничего не забыл? )


Забыл. Метапрграммирование (МП) тоже весьма себе парадигма. Причем ЛП может очень существенно долнить МП, так ка ЛП может облегчить разработку мета-кода.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [DSL] Prolog
От: catbert  
Дата: 09.09.10 19:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я в курсе. Но причем тут приоритеты?


Ну если рассматривать (теоретически) Немерловскую ’;’ как оператор, тогда у точки приоритет выше. А в Прологе у ’;’ приоритет выше чем (теоретический) оператор ’.’.

VD>Тут не понял. Ме казалось, что ПМ больше похож на запросы и отношения.


В Прологе отсечение — это отдаленный аналог if-а. ПМ вроде как тоже отдаленный аналог if-а. Ну. Но связь действительно тонкая

VD>А откуда сведения о медленности Prolog.NET?

VD>Что касается CodeDom, то перед выполнением код переводится во внутренне представление. Так что на скорости вычислений это не должно отразиться.

Вот производительность этого внутреннего представления (хоть оно и эффективно) по сравнению с захардкоженным бектрекингом меня и смущает. Данных у меня, к сожалению, нет.

VD>На сегодня Пролог практически забыт (незаслуженно, на мой взгляд). Реализация его в рамках универсального, мультипарадигмного языка может подтолкнуть многих к его освоению. И чем черт не шутит, возможно и возражению популярности.


+1
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.