Сравнение C# и IronPython для скрипта. Где почитать?
От: Аноним  
Дата: 14.08.14 13:57
Оценка:
Добрый день!

Подскажите не встречал ли кто-нибудь сравнение C# и IronPython как языков для написания скриптов в .NET программах?
Если такого нет, то может быть поделитесь своими соображениями?
Суть в том, что в программе нужна возможность ввода формул, инициализации настроек, описания не сильно сложных алгоритмов (например алгоритм выбора счетов для проводки в зависимости от ряда общих настроек и параметров конкретной финансовой операции).
Делать это будет администратор-прикладник (т.е. спец, работающий на стыке предметной области и ИТ), от которого можно требовать элементарного понимания процедурного языка программирования.
Важно, что изменения должны вноситься и применяться без перезапуска (тем более без перекомпиляции) программы.
Для повышения надежности скрипты будут выполняться в отдельном домене (AppDomain).
Скрипты будут выполняться на сервере, поэтому исполняться будут одновременно в нескольких потоках. (Кстати, не будет ли с многопоточым запуском скриптов у IronPython)?
Поэтому применение C# будет возможно (если текст скрипта изменился, то выгружаем домен, компилируем новый скрипт в новую сборку и загружаем эту сборку во вновь созданный AppDoman).
Сейчас я различий вижу только два:
1. При использовании C# нужно время на компиляцию и перезагрузку домена в отличие от интерпретируемого IP, зато IronPython исполняться медленнее будет.
2. Ну и синтаксис все-таки разный.

Что я еще упустил?
Re: Сравнение C# и IronPython для скрипта. Где почитать?
От: Аноним  
Дата: 15.08.14 04:34
Оценка:
А>Подскажите не встречал ли кто-нибудь сравнение C# и IronPython как языков для написания скриптов в .NET программах?
Неужели никто-никто из здесь присутствующих действительно этим вопросом не озадачивался???
Re[2]: Сравнение C# и IronPython для скрипта. Где почитать?
От: a_g_99 США http://www.hooli.xyz/
Дата: 15.08.14 05:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Неужели никто-никто из здесь присутствующих действительно этим вопросом не озадачивался???


Я рекомендую вам использовать Python. Не IronPython а именно Python + numpy/scipy по необходимости для вычислений. Преимущества:
1) stable python release которым пользуется реальное сообщество
2) возможность установить на сервере light ide типа PyScripter (не огромную vs) для отладки
3) Запуск скриптов в изолированных процессах вместо appdomain. Горячая замена кода в принципе поддерживается в каком-то виде, остальное возьмет на себя ваш сервер

У c# как минимум 2 проблемы:
1) высокий порог входа для администратора-прикладника
2) "При использовании C# нужно время на компиляцию и перезагрузку домена в отличие от интерпретируемого IP, зато IronPython исполняться медленнее будет." — тут вам придется немного помучатся потому как вы заметили у с-шарп другая концепция

Как-то так
Re[3]: Сравнение C# и IronPython для скрипта. Где почитать?
От: Аноним  
Дата: 15.08.14 06:24
Оценка:
Здравствуйте, a_g_99, Вы писали:

__>Я рекомендую вам использовать Python. Не IronPython а именно Python + numpy/scipy по необходимости для вычислений. Преимущества:

Это было бы вообще идеально (с точки зрения профессионального любопытства), т.к. сам давно хотел Python "пощупать".
Но как я буду интегрировать C# с обычным Python-ом?
Насколько я понял из многочисленных статей в интернете, всевозможные "Python for .NET" на сегодняшний день либо заброшены (не развиваются), либо имеют проблемы.
Или я ошибаюсь?
У меня скриптинг на сервере будет. И дергать всякие мелкие формулки надо будет часто.
Re: Сравнение C# и IronPython для скрипта. Где почитать?
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.08.14 06:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день!


А>Подскажите не встречал ли кто-нибудь сравнение C# и IronPython как языков для написания скриптов в .NET программах?

А>Если такого нет, то может быть поделитесь своими соображениями?
А>Суть в том, что в программе нужна возможность ввода формул, инициализации настроек, описания не сильно сложных алгоритмов (например алгоритм выбора счетов для проводки в зависимости от ряда общих настроек и параметров конкретной финансовой операции).
А>Делать это будет администратор-прикладник (т.е. спец, работающий на стыке предметной области и ИТ), от которого можно требовать элементарного понимания процедурного языка программирования.
А>Важно, что изменения должны вноситься и применяться без перезапуска (тем более без перекомпиляции) программы.
А>Для повышения надежности скрипты будут выполняться в отдельном домене (AppDomain).
А>Скрипты будут выполняться на сервере, поэтому исполняться будут одновременно в нескольких потоках. (Кстати, не будет ли с многопоточым запуском скриптов у IronPython)?
А>Поэтому применение C# будет возможно (если текст скрипта изменился, то выгружаем домен, компилируем новый скрипт в новую сборку и загружаем эту сборку во вновь созданный AppDoman).
А>Сейчас я различий вижу только два:
А>1. При использовании C# нужно время на компиляцию и перезагрузку домена в отличие от интерпретируемого IP, зато IronPython исполняться медленнее будет.
А>2. Ну и синтаксис все-таки разный.

А>Что я еще упустил?

Вы упустили
1. LCG aka DynamicMethod. Покрывает 99.9% нужд "простых формул". См. например http://www.codeproject.com/Articles/18004/Net-Expression-Evaluator-using-DynamicMethod. Не требует инфраструктуры AppDomain, т.к. собираются сборщиком мусора по мере устаревания.
2. Конкретные требования. Невозможно принять хорошее архитектурное решение, не имея исходных данных. Что за формулы будут писаться? Идеально — иметь пример "ночного кошмара": самой сложной формулы или алгоритма, который должен будет способен написать ваш администратор-прикладник. Какой бэкграунд у этого администратора-прикладника? Скажем, владеет ли он Excel? VB?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Сравнение C# и IronPython для скрипта. Где почитать?
От: a_g_99 США http://www.hooli.xyz/
Дата: 15.08.14 07:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Но как я буду интегрировать C# с обычным Python-ом?

Бесшовной интеграции нет, поэтому вам придется разработать свой протокол интеграции. Shared state in database, rpc/service layer или сокеты. Вариантов много. Возможно вы вообще придете к варианту мини-soa или нечто подобное.

А>Насколько я понял из многочисленных статей в интернете, всевозможные "Python for .NET" на сегодняшний день либо заброшены (не развиваются), либо имеют проблемы.

А>Или я ошибаюсь?
Нет все верно. Не используйте это иначе сильно пожалеете в будущем. Используйте настоящий python
Re[5]: Сравнение C# и IronPython для скрипта. Где почитать?
От: Аноним  
Дата: 15.08.14 07:17
Оценка:
Здравствуйте, a_g_99, Вы писали:
А>>Но как я буду интегрировать C# с обычным Python-ом?
__>Бесшовной интеграции нет, поэтому вам придется разработать свой протокол интеграции. Shared state in database, rpc/service layer или сокеты. Вариантов много. Возможно вы вообще придете к варианту мини-soa или нечто подобное.
И это будет проще чем помудохаться с "он-лайновой" компиляцией C# исходников и загрузкой/выгрузкой AppDomain-ов???
Re[6]: Сравнение C# и IronPython для скрипта. Где почитать?
От: a_g_99 США http://www.hooli.xyz/
Дата: 15.08.14 07:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>И это будет проще чем помудохаться с "он-лайновой" компиляцией C# исходников и загрузкой/выгрузкой AppDomain-ов???


Я полагаю с точки зрения правильности решения это будет более правильно. По поводу проще не уверен, тут вам виднее
Re: Сравнение C# и IronPython для скрипта. Где почитать?
От: Sinatr Германия  
Дата: 15.08.14 08:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если такого нет, то может быть поделитесь своими соображениями?


Вы задаете не конкретный вопрос, лучше всего было бы показать какой именно функционал необходим (что значит "формулы"?). Есть скриптовые языки, такие как LUA. World of warcraft написан на lua.

В C# можно компилировать и исполнять код на лету. В своих программах я уже давно использую CodeDom для расширения функционала программы динамически (формулы, колбеки и тд).
Ничего не знаю про Python, но там тоже должны быть свои решения типа Expressions и CodeDom из шарпа.

Вообще любой язык можно "облагородить" скриптами, при условии, что он умеет исполнять (вызывать и получать) функции из какой-нибудь нативной dll-ки (какой-то из языков не может?), которая в свою очередь является скриптовым движком.
---
ПроГLамеры объединяйтесь..
Re[2]: Сравнение C# и IronPython для скрипта. Где почитать?
От: Аноним  
Дата: 15.08.14 08:29
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>1. LCG aka DynamicMethod.

Это по сути свой транслятор внутреннего языка сделать?
Если делать это самому, то не чтобы не реально, но этот вариант, как и предложенный здесь
Автор: a_g_99
Дата: 15.08.14
вариант с выделением Python-сервиса и разработкой собственного протокола взаимодействия я лучше оставлю "про запас".

S>См. например http://www.codeproject.com/Articles/18004/Net-Expression-Evaluator-using-DynamicMethod

Интересная штука, спасибо!
Хотя в моем случае ее возможностей маловато.

S>2. Конкретные требования. Невозможно принять хорошее архитектурное решение, не имея исходных данных. Что за формулы будут писаться? Согласен. Я просто надеялся, что мне ссылок на статьи накидают, поэтому и не стал вдаваться в детали

Попытаюсь конкретизировать задачу.
Во-первых, админ-прикладник это скорее ИТ-шник, знакомый с прикладной областью, чем бухгалтер/финансист знающий компьютер. Так что проблем с алгоритмическим мышлением, Excel-подобными формулами и даже C#/VB/Python/JavaScript не будет. Он даже Transact SQL знает! Ну в пределах разумного конечно.
Во-вторых, вариант формул (само собой псевдокод):
(Amount - Discount(Amount)) / 2

где "Amount" — параметр, означающий сумму сделки, "Discount(Amount)" — получение суммы скидки, которая зависит от суммы сделки (по сути вызов предопределенной функции)
Вариант алгоритма:
if Doc.Payment.Type = "ГосКонтора" and NotNullOrEmpty(Doc.PaymentINN)
then DtAccount = "40105...."
else CtAccount = "..."
endif


В идеале (хотя это не обязательно) хотелось бы также иметь возможность манипулировать из скрипта .NET-объектами.
Например, есть список клиентов. Пользователю надо отобрать тех, которые обращались к нам в прошлом месяце и сделали хотя бы один заказ на сумму не менее 10 тыс.руб., а так же тех, которые, являясь налоговыми резидентами РФ, обращались за последние полгода и за все эти полгода наделали заказов на общую сумму от 500 тыс.руб., а так же по еще черт знает каким параметрам.
Затем каждого из этих клиентов надо обзвонить, сделать ему коммерческое предложение и внести в программу отчет о звонке.
Я решение этой задачи представляю так: админ, после общения с пользователями, сочиняет параметризованный SQL-запрос (чтобы не завязываться на конкретные суммы и даты), а на скриптовом языке описывает логику формы, в которой будут задаваться параметры.

Подозреваю, что последнее пожелание (работа с формами .NET) — слишком круто
Re[2]: Сравнение C# и IronPython для скрипта. Где почитать?
От: Аноним  
Дата: 15.08.14 09:39
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Вы задаете не конкретный вопрос, лучше всего было бы показать какой именно функционал необходим (что значит "формулы"?)

Я думал мне просто ссылок на статьи подкинут. Не думал, что народ всерьез начнет выяснять что именно нужно.
Чтобы не повторяться, подробности я попытался раскрыть здесь
Автор:
Дата: 15.08.14
.

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

Т.е. вы с загрузкой и выгрузкой доменов "играете". Сборки же выгрузить после внесения изменений в скрипт нельзя.
Re: Сравнение C# и IronPython для скрипта. Где почитать?
От: Аноним  
Дата: 15.08.14 11:09
Оценка:
Можно использовать ClearScript, который поддерживает javascript(JSCRIPT, V8), VBScript.
http://clearscript.codeplex.com/
Re[2]: Сравнение C# и IronPython для скрипта. Где почитать?
От: Монтигомо Смерть хохлопидарам.
Дата: 15.08.14 14:31
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Вы задаете не конкретный вопрос, лучше всего было бы показать какой именно функционал необходим (что значит "формулы"?). Есть скриптовые языки, такие как LUA. World of warcraft написан на lua.


Не думаю что это так, Lua скорее встроен туда для поддержки расширений.
I am Jack's Bugged Code.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.