FarNet — плагин для написания плагинов на .NET языках

Здесь можно обсудить ваш любимый плагин.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Latest post of the previous page:

zespri
Одно из неудобств загрузки всех модулей сразу ты уже сам упомянул. Нельзя их заменить без перезагрузки Фара. А сейчас можно, и я этим нередко пользуюсь (если конечно модуль не был реально вызван еще). Это экономит время. И значит оптимизация уже была не напрасна.
User avatar
zespri
Posts: 50
Joined: Sat 08 May, 2010 22:39
Location: Auckland, New Zealand
Been thanked: 1 time

Re: FarNet — плагин для написания плагинов на .NET языках

Post by zespri »

NightRoman wrote:Интересная идея. Если это будет работать, тогда можно единую утилиту на все случаи сделать через BGW. Посмотрю через некоторое время.
А вот ещё одна идея, на этот раз о функционале. То что ты собираешься сделать, оно само будет диалог/сообщение показывать? Если да, то хорошо бы сделать так, что бы сообщение выводилось только если операция длится уже больше переданного кол-ва времени, например секунды. Это необходимо для того что бы окно диалога не мигало для почти мгновенных операций.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Поясню еще. Типичный сценарий редактирования мелкого модуля у меня таков. Открываю Фар, в нем редактирую модуль, в нем же собираю, тут же запускаю, проверяю работу. Никакая студия не применяется, она только для реально больших модулей типа PSF. Если бы все модули грузились сразу, то такой практичный сценарий был бы невозможен.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

zespri wrote:
NightRoman wrote:Интересная идея. Если это будет работать, тогда можно единую утилиту на все случаи сделать через BGW. Посмотрю через некоторое время.
А вот ещё одна идея, на этот раз о функционале. То что ты собираешься сделать, оно само будет диалог/сообщение показывать? Если да, то хорошо бы сделать так, что бы сообщение выводилось только если операция длится уже больше переданного кол-ва времени, например секунды. Это необходимо для того что бы окно диалога не мигало для почти мгновенных операций.
Да, само будет показывать диалог. Мысль про задержку - хорошая, да. Кстати, я пока не планирую включать это в сам Фарнет. В поставку утилиту включу, модули смогут пользоваться как примером, а может и библиотеку сделаю. Но в Фарнет пока не хочу добавлять, потом посмотрим.
DiRTy_GaRRy
Posts: 705
Joined: Tue 05 Apr, 2005 09:26
Been thanked: 3 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by DiRTy_GaRRy »

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

Касаемо потоков, если будет использоваться .NET 4, то можно посмотерть в сторону новго System.Threading.Tasks. А BackgrounWorker это таки гуёвая нашлёпка из класса борсил на форму и вперёд, и его аналог под конкретную задачу ничего не стоит написать ручками.
Ы?
DiRTy_GaRRy
Posts: 705
Joined: Tue 05 Apr, 2005 09:26
Been thanked: 3 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by DiRTy_GaRRy »

zespri wrote:
DiRTy_GaRRy wrote:Thread.Abort нормально использовать для чисто нетовских потоков, так как аборт для них сделан через исключения
Ну нет же. Аборт состоит из нескольких десятков строк unmanaged кода. Исключения тут при чём лишь в контексте упомянутом nightroman, а именно эксепшн кидается если абортаем себя
Что то я не понял к чему этот ответ. :(
Ы?
User avatar
zespri
Posts: 50
Joined: Sat 08 May, 2010 22:39
Location: Auckland, New Zealand
Been thanked: 1 time

Re: FarNet — плагин для написания плагинов на .NET языках

Post by zespri »

DiRTy_GaRRy wrote: аборт для них сделан через исключения
Аборт для них НЕ сделан через исключения. Исключения в нём используются, но это лишь небольшая часть того через что сделан для них аборт. Хотя возможно мы просто говорим о разных вещах. В таком случае извиняюсь, что не так понял.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

DiRTy_GaRRy wrote:Как я уже говрил ранее, если хочется нормальной загрузки/выгрузки плагинов, то можно посмотреть в сторону MEF или чего то подобного. Поиграться.... померять там производительность...
Не MEF, наверное, а MAF. В MEF все в одном домене, а вот в MAF там да, изоляция. Я туда точно не пойду. И не вижу абсолютно никакой нужды. Невозможность выгрузки модулей - это не проблема, а некоторое периодическое неудобство для *разработчиков*. Для пользователя нет никакой проблемы и никакой пользы от возможности выгрузки модулей. А вот за MAF пользователю придется платить и производительностью и объемом памяти. А разработки под МАF куда больше.
DiRTy_GaRRy wrote:Касаемо потоков, если будет использоваться .NET 4, то можно посмотерть в сторону новго System.Threading.Tasks. А BackgrounWorker это таки гуёвая нашлёпка из класса борсил на форму и вперёд, и его аналог под конкретную задачу ничего не стоит написать ручками.
Это я согласен, и отчасти потому и не хочу добавлять это в Фарнет сейчас напрямую, ибо времянка, скорей всего. Но пока мы под 4.0 еще не перешли. Накапливаем решимость. Перейдем, там посмотрим.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Вот демка (и уже модуль готовый на посмотреть). Это на основе BGW без аборта, просто прогресс. Надо будет переработать\доработать его еще на предмет возможности аборта и предложенной задержки с показом диалога прогресса (для фактически быстрых действий). Но пользовать можно прямо сейчас.

Как упоминалось, в Фарнет включать это не планируется, в поставку войдет просто как пример\демо. Потом по ходу развития событий и перехода на 4.0 виднее будет.
DiRTy_GaRRy
Posts: 705
Joined: Tue 05 Apr, 2005 09:26
Been thanked: 3 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by DiRTy_GaRRy »

zespri wrote:
DiRTy_GaRRy wrote: аборт для них сделан через исключения
Аборт для них НЕ сделан через исключения. Исключения в нём используются, но это лишь небольшая часть того через что сделан для них аборт. Хотя возможно мы просто говорим о разных вещах. В таком случае извиняюсь, что не так понял.
А... Мы друг друга не поняли. Конечно там всё сделано несколько сложнее. Подумав над реализациией, в частности, становится понятно почему аборт не работает для стороннего нэтив кода.
Ы?
User avatar
zespri
Posts: 50
Joined: Sat 08 May, 2010 22:39
Location: Auckland, New Zealand
Been thanked: 1 time

Re: FarNet — плагин для написания плагинов на .NET языках

Post by zespri »

DiRTy_GaRRy wrote:А BackgrounWorker это таки гуёвая нашлёпка из класса борсил на форму и вперёд, и его аналог под конкретную задачу ничего не стоит написать ручками.
Верно. Если отвлечься от гуя, то всё что он делает, это вызывает BeginInvoke на делегате.
DiRTy_GaRRy
Posts: 705
Joined: Tue 05 Apr, 2005 09:26
Been thanked: 3 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by DiRTy_GaRRy »

NightRoman wrote:
DiRTy_GaRRy wrote:Не MEF, наверное, а MAF.
Да, конечно, только оно чаще таки называется System.Addin. Я грешным делом думал, что в .NET 4 они всё пододно название впихнули.
Ы?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

DiRTy_GaRRy wrote:
NightRoman wrote:
DiRTy_GaRRy wrote:Не MEF, наверное, а MAF.
Да, конечно, только оно чаще таки называется System.Addin. Я грешным делом думал, что в .NET 4 они всё пододно название впихнули.
Не-не, идут порознь и прекрасно могут уживаться вместе, вот есть интересный пример (правда для 2008 студии, но конвертится без проблем и переделывается для уже родного MEF в дотнете):
http://kentb.blogspot.com/2009/02/maf-and-mef.html
MEF я попробовал довольно детально, нахожу очень перспективной и полезной вещью (может и в Фарнет ее задействую в конечном итоге когда-нибудь). System.Addin (MAF) я не пробовал, просто начитан немного.
User avatar
zespri
Posts: 50
Joined: Sat 08 May, 2010 22:39
Location: Auckland, New Zealand
Been thanked: 1 time

Re: FarNet — плагин для написания плагинов на .NET языках

Post by zespri »

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

Код под спойлером выполняется без каких либо видимых последствий. Вообще обычно товарисч Albahari заслуживает доверия, но возможно в данном вопросе он ошибается.
User avatar
zespri
Posts: 50
Joined: Sat 08 May, 2010 22:39
Location: Auckland, New Zealand
Been thanked: 1 time

Re: FarNet — плагин для написания плагинов на .NET языках

Post by zespri »

Вот ещё интересная статейка по теме:
http://shevaspace.blogspot.com/2007/08/ ... ke-vs.html
Если учесть что BackgroundWorker использует BeginInvoke,имеет прямое отношение к обсуждению. С другой стороны, в нашем сценарии на эти миллисекунды, по большому счёту наплевать.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

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

Return to “Обсуждение плагинов”