dlr hosting

Post on 03-Dec-2014

2.678 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

Slides from 10 meeting of spb alt.net group

TRANSCRIPT

hostingDLR Vitaly Baum

Alt.Net Spb Group

butaji.ruspbalt.net

«Единственное счастье в жизни — это постоянное

стремление вперед.»Эмиль Золя

DLR – WTF?DLR – Что это?

DLR - что это?

СредаИсполненияДинамическихЯзыков

DLR - что это?

Первое упоминание состоялось на Mix’07 1 мая 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 2009 v0.91http://dlr.codeplex.com/

DLR - что это?

DLR - что это?

Введения в CLR для взаимодействия с динамическими языками:• Expression trees (семантика языка)• Call site caching (ускорение операций)• Dynamic object interoperability (точка

взаимодействия)

DLR - что это?

http://blogs.msdn.com/hugunin/archive/2007/05/02/the-one-true-object-part-1.aspx

The One True Object

DLR - что это?

http://blogs.msdn.com/hugunin/archive/2007/05/02/the-one-true-object-part-1.aspx

The One True Object

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

DLR Hosting

• Исполнение фрагментов кода• Исполнение кода из файлов• Компиляция кода• Области исполнения и переменные

DLR Hosting

• В вашем браузере с помощью SilverLight• На сервере MerlinWeb• Интерактивные консоли, причём ScriptRuntime может

быть в другом приложении• Средства редактирования с подсветкой кода,

кодкомплитом и справкой (могут работать только на live объектах в 1ой версии)

• PowerShell, C#, и VB.NET используют динамические объекты и работают с ними в том же домене

DLR Hosting

Level One

Level Two

Level Three

DLR Hosting

Level One• Предоставить ОМ приложения для динамических языков• Исполнять файлы-потребители ОМ• Динамический код в качестве команд и обработичков

событий• ScriptRuntime.Globals, ScriptRuntime.ExecuteFile()

Level Two

Level Three

DLR Hosting

Level One

Level Two• Работа с кодом: компиляция, исполнение в нужной

области• Операции над объектами• ScriptEngine, ScriptScope, ObjectOperations

Level Three

DLR Hosting

Level One

Level Two

Level Three• Полный контроль над исполнением: обработка исключений,

использование удаленных сред• Разработка приложений для редактирования динамического кода• ScriptHost, ObjectOperations (GetMemberNames, IsCallable, GetCallSignatures,

GetDocumentation, GetCodeRepresentation)• ScriptSources, TextContentProviders

DLR Hosting

Виды хостинга:1. Активный2. Пассивный3. Дуплексный

DLR Hosting

АктивныйCL

R

App DLR Script

app.close

DLR Hosting

ПассивныйCLRApp DLRScri

pt

pyfunc(x)

DLR Hosting

ДуплексныйCLRApp DLRScri

pt

xy =func(x)

y

DLR Hosting

DLR Hosting

REPL Read-eval-print loop

DLR Hosting

http://www.iunknown.com/2009/05/dynamic-languages-at-teched-2009.html

DLR Hosting

Проблема:Не получается использовать Extension Methods, следовательно и LINQ.

DLR Hosting

Решение:1. Свой код2. Унаследованный код

DLR Hosting

Adapt your code

DLR Hosting

public class ClassToBeExtended {}public static class DemoExtensionClass{ public static string Foo(this ClassToBeExtended c) { return "Bar"; }}

http://blogs.msdn.com/saveenr/archive/2008/11/14/consuming-extension-methods-in-ironpython.aspx

DLR Hosting

>>> c1 = ClassToBeExtended() >>> c1.Foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'ClassToBeExtended' object has no attribute 'Foo'

DLR Hosting

using Microsoft.Scripting;[assembly: Microsoft.Scripting.Runtime.ExtensionType( typeof(ClassToBeExtended), typeof(DemoExtensionClass))]

DLR Hosting

>>> c1 = ClassToBeExtended() >>> c1.Foo() 'Bar'

DLR Hosting

Legacy code

DLR Hosting

Создаём Proxy, и действуем по «правилам своего кода»

Linq 2 Object vs Python

[myFunc(i) for i in numbers if i > 3]

from i in numberswhere i > 3select myFunc(i)

Linq 2 Object vs Python

Funcsneed that

Linq 2 Object vs Python

Select Where

Aggregate

mapfilterreduce

Linq 2 Object vs Python

map(myFunc, filter(lambda x: x > 3,

numbers))

Linq 2 Object vs Python

Queryable.Select(Queryable.Where(numbers,

x => x > 3), myFunc)

Linq 2 XML vs Python

head = 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 Class

class Calculator(object):def add(self, a, b):

return a + b

http://stackoverflow.com/questions/579272/instantiating-a-python-class-in-c

IronPythonClass != .NET Class

ScriptEngine engine = Python.CreateEngine();ScriptSource source = engine.CreateScriptSourceFromFile(

"Calculator.py");ScriptScope scope = engine.CreateScope();ObjectOperations op = engine.Operations;

IronPythonClass != .NET Class

// создается класс

source.Execute(scope); // получаем класс

object calculator = scope.GetVariable("Calculator"); // создаём экземпляр

object instance = op.Invoke(calculator); // получаем метод

object method = op.GetMember(instance, "add"); // вызываем метод

int result = (int)op.Call(method, 4, 5);

IronPythonClass != .NET Class

ScriptRuntime py = Python.CreateRuntime();dynamic helloworld = py.UseFile("helloworld.py");helloworld.Calculator().Add(1, 10)

.NET 4.0

DLR + SHAREPOINTРасширяем c помощью DLR приложение на SharePoint

IPy 4 SPD

• SharePoint Designer позволяет производить настройку

• Не является инструментом разработчика• 3-х этапный рабочий процесс – существует

по-умолчанию• Почему бы не сделать его расширяемым?

IPy 4 SPD

Задача:Предоставить системному администратору возможность создавать рабочие процессы и расширять их с помощью Python-сценариев

IPy 4 SPD

IPy 4 SPD

__actprops__ (свойства раб. процесса)__site__ (текущий SPSite)__web__ (текущий SPWeb)__list__ (текущий SPList)__item__ (текущая SPListItem)

IPy 4 SPDdef FindManager(userName, ldapPath): import clr clr.AddReference("System.DirectoryServices") import System.DirectoryServices as ds adFolder = ds.DirectoryEntry(ldapPath) adSearcher = ds.DirectorySearcher(adFolder) adSearcher.SearchScope = ds.SearchScope.Subtree adSearcher.Filter = "(&(objectClass=user)(samaccountname=" + userName + "))" adResult = ds.SearchResult try: adResult = adSearcher.FindOne() return adResult.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

Решение:1. Расширяем инструмент2. Обрабатываем и исполняем скрипты

IPy 4 SPD

Ответ:

Демо

TWIMILARМоё приложение с использованием анализа данных

Twimilar

Задача:Необходимо писать большое количество формул, которым требуется выразительная форма представления (псевдокод).

Twimilar

Решение:1. Создаём точку расширения2. Пишем функции на Python

Twimilar

Ответ:

Демо

GESTALT - DIYСоздаём Gestalt сами

Gestalt

• Клиентскую часть в веб-приложениях принято создавать на Javascript

• Большинство веб-разработчиков с огромным удовольствием бы отошли от этого правила и воспользовались своим любимым server-side языком.

GestaltDynamic Languages Runtime

Silverlight

HTML DOM

Gestalt

Задача:Сделать, чтобы заработало следующее:<script type="python">def func(): HtmlPage.Window.Alert("Hello world!") func()</script>

Gestalt

Решение:1. Читаем скрипт из Html2. Создаем Script Runtime3. Исполняем скрипт в Silverlight

Gestalt

Ответ:

Демо

REAL-LIFE DLR HOSTINGПримеры существующих приложений с DLR хостингом

Real-life DLR hosting

Real-life DLR hosting

Real-life DLR hosting

Работа на IronPython со всеми основными технологиями Microsoft

IronPython in Action

Вопросыи

Ответы

top related