2009-07-26 3 views
12

Теперь, когда бета-версия .NET 4.0 доступна и, следовательно, более широкая доступность .NET Dynamic Language Runtime, я думаю, что такие темы станут «более горячими».PowerShell Runspace vs DLR

Я смущен концептуальными различиями между DLR и PowerShell. Мне кажется, что если я хочу предоставить возможности сценариев в своем приложении .NET, я могу использовать DLR (и, таким образом, включить скрипты в IronPython или IronRuby или любые другие языки Iron * для DLR) или разместить PowerShell пространство выполнения.

Каковы преимущества и недостатки каждого метода? Почему я могу выбрать один за другим? Как сам динамический язык, так и первоклассный .NET-язык, почему PowerShell также не нацелен на DLR?

ответ

12

В .NET 4.0 DLR состоит из того, что вы можете рассматривать «DLR v1.0». Это включает в себя механизм кэширования сайта вызова, межъязыковые посредники и улучшения существующих деревьев выражений LINQ. Это все функции, которые очень полезны для реализации langauge, но не для размещения языка.

И это недостающая часть в DLR 1.0 - общая история размещения для всех языков. Но мы начинаем с того, что в форме API-интерфейсов хостинга мы отправляем проекты CodePlex с DLR и IronPython, а также с IronRuby на github. К сожалению, мы не думали, что мы можем использовать эти API для обеспечения качества корабля в таймфрейме .NET 4.0, поэтому мы не включили их. В частности, мы хотим получить больше отзывов от других языков, таких как Powershell и даже VB и C#, чтобы убедиться, что у нас есть правильные API.

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

4

Согласен, DLR имеет и будет продолжать генерировать массу хороших обсуждений. PowerShell не предназначен для DLR. Однако я не знаю, почему.

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

Имеются примеры calling PowerShell from IronPython.

Вы также можете использовать embed IronPython in PowerShell.

IronPython и IronRuby не имеют такой же интеграции с Windows, как и PowerShell. Было бы здорово, если бы PowerShell был включен DLR из коробки.

+0

Я действительно не понимаю, почему вы хотите сделать любую из этих вещей (вызывая PowerShell от IronPython или вставляя IronPython в PowerShell). Я увидел демо IronRuby, назвав PowerShell, и, хотя это было довольно круто, я не мог много использовать для этого. – alastairs

+0

Одной из причин, по которой я бы назвал IronPython из PowerShell, является использование сложных процедур, уже написанных на Python. То же самое я сделал бы с помощью .NET 4.0. Вызов PoSh из Py, когда я хочу использовать функции или точки системной интеграции, я не могу легко получить доступ к IP. –

1

Doug's answer просмотров несколько ключевых моментов, но я думаю, что основной причиной использования PowerShell в качестве механизма сценариев в приложении .NET является тот факт, что PowerShell становится основной поверхностью управления в приложениях Microsoft и будет пользоваться большим знанием среди системных администраторов, которые поддерживают ваше приложение.

IronPython и IronRuby (а также любые другие языки, предназначенные для DLR), скорее всего, будут более знакомы для аудитории разработчиков.

+0

Итак, PowerShell был бы подходящим вариантом для приложения с функциями типа SysAdmin, в то время как языки DLR были бы лучше для того, чтобы помочь властным пользователям в приложениях для конечных пользователей? – alastairs

+0

Я думаю, что PowerShell более подходит для корпоративного приложения, которое поддерживается системными администраторами или «мощными пользователями». Приложения, в которых разработчики будут делать больше скриптов, могут идти в любом случае. –

+0

Для меня это не очень хорошая причина. VB и F # нацелены на очень разные аудитории, но используют ту же среду выполнения. Надеюсь, MS будет следовать этому примеру, а не искусственно сегментировать свои технологии. Ответ Dino дает нам надежду :) –

0

Я полагаю, что Microsoft разработала свои интерфейсы управления Backoffice на основе DLR, так что первоклассные и уже проверенные языки, такие как Python и Ruby в .NET (или любой другой язык, основанный на DLR), могли бы в отличие от того, что я думаю, что они делали, изобретая колесо с Powershell. Помимо его использования для управления приложениями инфраструктуры, например,Exchange, у меня нет стимула изучать Powershell, когда есть отличные языки уже там. Мои 0,02 цента.

+2

Monad была анонсирована в 2003 году и достигла версии 1.0 в 2006 году. DLR была анонсирована в 2007 году и поразила v1.0 в 2010 году. Вопреки распространенному мнению, команды IIS/Exchange/etc не имеют машины времени. –