Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
DLRhostingVitalyBaumAlt.NetSpb Groupbutaji.ruspbalt.net
«Единственное счастье в жизни — это постоянное стремление вперед.»ЭмильЗоля
DLR – WTF?DLR – Что это?
DLR - что это?СредаИсполненияДинамическихЯзыков
DLR - что это?Первое упоминание состоялось на Mix’071 мая 2007 года
DLR - что это?
DLR - что это?Позволяет реализовать динамические языки на .NETПредоставляет динамические возможности для статических языков
DLR - что это?http://msmvps.com/blogs/jon_skeet/archive/2009/06/19/os-jam-at-google-london-c-4-and-the-dlr.aspx
DLR - что это?Возможности для имплементированных языков при развитии .NET:Garbage collector (GC)Just-in-time compiler (JIT)Sandbox Security Model («Песочница»)Tools (Visual Studio, SQL Server)
DLR - что это?Все библиотеки, реализованные для .NET доступны нам в динамических языках.http://blogs.msdn.com/blogfiles/codeplex/WindowsLiveWriter/CodePlexinDenmarkandSweden_C442/DSC03124.jpg
DLR - что это?http://github.comВсе библиотеки, реализованные на динамических языках доступны нам также.
DLR - что это?В текущее время Microsoft поддерживает двереализации на DLR:IronPythonдоступен вopen source наwww.codeplex.com/ironpython.  IronRubyдоступен в open source наhttp://rubyforge.org/projects/ironruby.
DLR - что это?May 22 2009v0.91http://dlr.codeplex.com/
DLR - что это?
DLR - что это?Введения в CLR для взаимодействия с динамическими языками:Expression trees(семантика языка)Call site caching(ускорение операций)Dynamic object interoperability(точка взаимодействия)
DLR - что это?The One True Objecthttp://blogs.msdn.com/hugunin/archive/2007/05/02/the-one-true-object-part-1.aspx
DLR - что это?The One True Objecthttp://blogs.msdn.com/hugunin/archive/2007/05/02/the-one-true-object-part-1.aspx
DLR - что это?http://msdn.microsoft.com/en-us/library/dd233052(VS.100).aspx
DLR hostingХостинг DLR в .NET приложенияхhttp://farm3.static.flickr.com/2017/2047711131_d4ce321ca9.jpg
DLRHostingИсполнение фрагментов кодаИсполнение кода из файловКомпиляция кодаОбласти исполнения и переменные
DLRHostingВ вашем браузере с помощью SilverLightНа сервере MerlinWebИнтерактивные консоли, причём ScriptRuntime может быть в другом приложенииСредства редактирования с подсветкой кода, кодкомплитом и справкой (могут работать только на live объектах в 1ой версии)PowerShell, C#, и VB.NET используют динамические объекты и работаютс ними в том же домене
DLR Hosting
DLRHosting
DLRHosting
DLRHosting
DLRHosting
DLRHostingВиды хостинга:АктивныйПассивныйДуплексный
DLRHostingАктивныйapp.close
DLRHostingПассивныйpyfunc(x)
DLRHostingДуплексныйxy =func(x)y
DLRHosting
DLRHostingREPL Read-eval-print loop
DLRHostinghttp://www.iunknown.com/2009/05/dynamic-languages-at-teched-2009.html
DLRHostingПроблема:Не получается использовать Extension Methods, следовательно и LINQ.
DLRHostingРешение:Свой кодУнаследованный код
DLRHostingAdapt your code
DLRHostingpublic class ClassToBeExtended {}public static class DemoExtensionClass{public static string Foo(thisClassToBeExtended c){return"Bar";}}http://blogs.msdn.com/saveenr/archive/2008/11/14/consuming-extension-methods-in-ironpython.aspx
DLRHosting>>> c1 = ClassToBeExtended() >>> c1.Foo() Traceback (most recent call last):   File "<stdin>", line 1, in <module> AttributeError: 'ClassToBeExtended' object has no attribute 'Foo' 
DLRHostingusingMicrosoft.Scripting;[assembly: Microsoft.Scripting.Runtime.ExtensionType(     typeof(ClassToBeExtended),     typeof(DemoExtensionClass))]
DLRHosting>>> c1 = ClassToBeExtended() >>> c1.Foo() 'Bar' 
DLRHostingLegacy code
DLRHostingСоздаём Proxy, и действуем по «правилам своего кода»
Linq 2 Object vsPython[myFunc(i) for i in numbers if i >3]from i in numberswhere i > 3selectmyFunc(i)
Linq 2 Object vsPythonFuncsneed that
Linq 2 Object vsPythonSelectWhereAggregatemapfilterreduce
Linq 2 Object vsPythonmap(myFunc, filter(lambdax: x >3,			numbers))
Linq 2 Object vsPythonQueryable.Select(Queryable.Where(numbers, 			x => x > 3), myFunc)
Linq 2 XML vs Pythonhead =soup.contents[0].contents[0] head.parent.name # u'html'soup.findAll('p', align="center")# [<p id="firstpara" align="center">This is paragraph <b>one</b>. </p>]Beautiful Souphttp://www.crummy.com/software/BeautifulSoup/
IronPythonClass != .NET Classclass Calculator(object):defadd(self, a, b):    returna + bhttp://stackoverflow.com/questions/579272/instantiating-a-python-class-in-c
IronPythonClass != .NET ClassScriptEngine engine = Python.CreateEngine();ScriptSource source =engine.CreateScriptSourceFromFile("Calculator.py");ScriptScope scope = engine.CreateScope();ObjectOperationsop = engine.Operations;
IronPythonClass != .NET Class// создается классsource.Execute(scope);  // получаем класс object calculator = scope.GetVariable("Calculator"); // создаём экземплярobject instance = op.Invoke(calculator); // получаем методobject method = op.GetMember(instance, "add"); // вызываем методintresult = (int)op.Call(method, 4, 5);
IronPythonClass != .NET ClassScriptRuntimepy = Python.CreateRuntime();dynamichelloworld = py.UseFile("helloworld.py");helloworld.Calculator().Add(1, 10).NET 4.0
DLR + sharepointРасширяем c помощью DLR приложение на SharePoint
IPy 4 SPDSharePoint Designer позволяет производить настройкуНе является инструментом разработчика3-х этапный рабочий процесс – существует по-умолчаниюПочему бы не сделать его расширяемым?
IPy 4 SPDЗадача:Предоставить системному администратору возможность создавать рабочие процессы и расширять их с помощью Python-сценариев
IPy 4 SPD
IPy 4 SPD__actprops__ (свойства раб. процесса)__site__ (текущийSPSite)__web__ (текущий SPWeb)__list__ (текущий SPList)__item__ (текущаяSPListItem)
IPy 4 SPDdefFindManager(userName, ldapPath):importclrclr.AddReference("System.DirectoryServices") importSystem.DirectoryServices as dsadFolder = ds.DirectoryEntry(ldapPath)adSearcher = ds.DirectorySearcher(adFolder)adSearcher.SearchScope = ds.SearchScope.SubtreeadSearcher.Filter = "(&(objectClass=user)(samaccountname=" + userName + "))"adResult = ds.SearchResulttry:adResult = adSearcher.FindOne()returnadResult.Properties["Manager"][0].Split(",")[0].Substring(3)except:return# the ldapPath structure may vary for you.mgr = FindManager("yourusername","LDAP://yourdomaincontroller/DC=yourdomain,DC=com")
IPy 4 SPDРешение:Расширяем инструментОбрабатываем и исполняем скрипты
IPy 4 SPDОтвет:Демо
twimilarМоё приложение с использованием анализа данных
TwimilarЗадача:Необходимо писать большое количество формул, которым требуется выразительная форма представления (псевдокод).
TwimilarРешение:Создаём точку расширенияПишем функции на Python
TwimilarОтвет:Демо
Gestalt - DIYСоздаём Gestalt сами
GestaltКлиентскую часть в веб-приложениях принято создавать на JavascriptБольшинство веб-разработчиков с огромным удовольствием бы отошли от этого правила и воспользовались своим любимым server-side языком.
Gestalt
GestaltЗадача:Сделать, чтобы заработало следующее:<script type="python">deffunc():    HtmlPage.Window.Alert("Hello world!")  func()</script>
GestaltРешение:Читаем скрипт из HtmlСоздаем Script RuntimeИсполняем скриптв Silverlight
GestaltОтвет:Демо
Real-life dlR hostingПримеры существующих приложений с DLR хостингом
Real-life DLR hosting
Real-life DLR hosting
Real-life DLR hosting
Работа на IronPythonсо всеми основными технологиями MicrosoftIronPython in Action
Materialshttp://dlr.codeplex.com/http://blogs.msdn.com/seshadripv/default.aspxhttp://blogs.msdn.com/mmaly/default.aspxhttp://ironpython-urls.blogspot.com/http://blogs.msdn.com/hugunin/
ВопросыиОтветы

More Related Content

DLR Hosting

Editor's Notes

  1. Движение впередИзучение новогоПоддержание компетенций и конкурентноспособностиНа гребне волны
  2. Так что же за зверь такой, этот ваш DLR?Почему я должен знать об этом?
  3. Ок, всё отлично, DLR – это круто, как я могу его использовать?
  4. Известные науке способы применения DLR хостинга
  5. DLR Hosting Spec26.01.2008ScriptRuntime– стартовая точка хостингаScriptScope– область исполнения, хранение переменныхScriptEngines– имплементация языка, работают со скопом. Один движок на зяык в рантайме.ScriptSource– исходный код, мн-во вариантов исполнения и компиляции, вид кода: выражения, утвержденияCompiledCode– компиленный код, для многократного использования, исполнять в скопе для свежих данныхObjectOperations– операции над объектами из движков
  6. Все любят поиграться?
  7. Отлично, для всех есть решения!
  8. А что же нужно функциям?
  9. Функции высших порядков