semana interop: trabalhando com ironpython e com ironruby

36
Trabalhando com IronPython e com IronRuby

Upload: alessandro-binhara

Post on 06-May-2015

439 views

Category:

Technology


1 download

DESCRIPTION

Apresentação do IronPython e IronRuby O que é ? Rodamap, funcionalidades, Exemplos

TRANSCRIPT

Page 1: Semana Interop: Trabalhando com IronPython e com Ironruby

Trabalhando com IronPython e com IronRuby

Page 2: Semana Interop: Trabalhando com IronPython e com Ironruby

Palestrantes

Alessandro de Oliveira BinharaMestre em Projetos Complexos pela UTFPRDiretor de Tecnologia da Marketing Card do BrasilDesenvolvedor MonoBasic, CSDO, LifeLet´sFundador Projeto Mono Brasil

Giovanni BassiConsultor IndependenteScrumMaster CertifiedMicrosoft MVP C#

Page 3: Semana Interop: Trabalhando com IronPython e com Ironruby

3

Compilado x Interpretado

− O C# tem tipagem forte com verificação de tipo em tempo de compilação type safety− C# o compilador lê o código , realiza a

verificação de tipos e gera o IL− O python tem tipagem fraca com tipos

e objetos dinâmicos em tempo de execução− O Python lê o fonte compila

dinâmicamente gerando o IL. O tipos podem mudar em memória durante a execução.

Page 4: Semana Interop: Trabalhando com IronPython e com Ironruby

4

Estático x Dinâmico

DynamicLanguages

Simple and succinct

Implicitly typed

Meta-programming

No compilation

Late bound

Loosely type

Highly expressive

StaticLanguages

Robust

Performant

Intelligent tools

Better scaling

Type safetyCompile-time

checkingRunTime

Performance

Page 5: Semana Interop: Trabalhando com IronPython e com Ironruby

5

CaracterísticasLinguagem Tipagem Compilação Objetos Tipos

C# Forte Estática Estáticos Estáticos

VB.NET Forte ou Fraca

Estática Estáticos Dinânicos

Boo Forte Dinâmica Dinâmicos Dinâmicos

Python Fraca Dinâmica Dinâmicos Dinâmicos

Ruby Fraca Dinâmica Dinâmicos Dinâmicos

Page 6: Semana Interop: Trabalhando com IronPython e com Ironruby

6

Boo− Rodrigo Bamboo

− Desenvolvedor Python− Criador da Linguagem Boo http://boo.codehaus.org/

Um linguagem que combina características C# e PythonLinguagem Script fortemente tipada com inferência de tipos dinâmicosPossibilidade de criação de macros em tempo de compilação através de

uma pipeline de compilação plugável

− Type Inference , Builtin Literals for lists, hashes, arrays, regular expressions and timespans, Slicing

− String Interpolation, Syntactic Macros, − Generators − Generator Expressions, List Generators, [Array Generators], Generator Methods− First Class Functions − Functions As Objects− Closures, Callable Types, Duck Typing− Extensible Compilation Pipeline− Interactive Interpreter

Page 7: Semana Interop: Trabalhando com IronPython e com Ironruby

7

Por que Python?

− Os conceitos fundamentais da linguagem são simples − A sintaxe é clara e fácil de aprender; − O código curto e legível.− Os tipos pré-definidos são poderosos, − Possui um interpretador de comandos interativo − Python é expressivo, com abstrações de alto nível.− Apresenta potencial de defeitos reduzido - menos código,

menos oportunidade para errar. − Existe suporte para uma diversidade grande de bibliotecas

externas. − É possível escrever extensões a Python em C e C++ − Python permite que o programa execute inalterado em

múltiplas plataformas; − Python é livre

Page 8: Semana Interop: Trabalhando com IronPython e com Ironruby

8

Por que Python?

−Regra KISS, Simples, fácil de ensinar e aprender

print “Alo mundo”

Page 9: Semana Interop: Trabalhando com IronPython e com Ironruby

9

O que é Python

− É uma linguagem interpretada. − Não há pré-declaração de variáveis, e os

tipos das variáveis são determinados dinamicamente.

− O controle de bloco é feito apenas por indentação;

− Oferece tipos de alto nível: − strings, listas, tuplas, dicionários, arquivos,

classes. − É orientada a objetos; aliás, em Python,

tudo é um objeto.

Page 10: Semana Interop: Trabalhando com IronPython e com Ironruby

10

TimeLine

− Projeto iniciou em Dez 1989− Primeiro versão pública(USENET) - Feb

1991− Site python.org - 1996 or 1997− 2.0 disponível - 2000− Python Software Foundation - 2001− …− 2.4 disponível - 2004− 2.5 disponível - 2006

Page 11: Semana Interop: Trabalhando com IronPython e com Ironruby

11

Boas idéias do Python

− Sem checagem de tipos no compilador

− Tipos Dinâmicos− Tudo é objeto− Tudo pode ser inspecionado− Prompt interativo

Page 12: Semana Interop: Trabalhando com IronPython e com Ironruby

12

http://www.codeplex.com/IronPython

Page 13: Semana Interop: Trabalhando com IronPython e com Ironruby

13

Inspiração“The speed of the current system is so low as to render the

current implementation useless for anything beyond demonstration purposes.” – ActiveState’s report on Python for .NET

“The CLI is, by design, not friendly to dynamic languages. Prototypes were built, but ran way too slowly.”

– Jon Udell, InfoWorld, Aug. 2003

− How could Microsoft have screwed up so badly that the CLR is far worse than the JVM for dynamic languages?− Jython shows that dynamic languages can run well on the

JVM

− I decided to write a short pithy paper called, “Why .NET is a terrible platform for dynamic languages” Jim Hugunin

Page 14: Semana Interop: Trabalhando com IronPython e com Ironruby

14

Nascimento do IronPython

Criador por Jim HuguninTambém criou o Jythonhttp://blogs.msdn.com/hugunin/

Anúncio oficial http://blogs.msdn.com/hugunin/archive/2006/09/05/741605.aspx

Page 15: Semana Interop: Trabalhando com IronPython e com Ironruby

15

O que é o IronPython ?

− IronPython é uma implementação open source do Python desenvolvida pela Microsoft que roda sobre o .NET

− Uma implementação rápida do Python para CLI− Compila o código Python para IL (CLI bytecode)− Inclui suporte a bibliotecas (com código gerenciado)− 1.8x mais rápido que o Python-2.4− Roda todos os parrotbench com a mesma velocidade do CPython

− Integra com as outras liguagens da CLI− C#, VB, J#, JScript, Cobol, Eiffel, C++, …

Page 16: Semana Interop: Trabalhando com IronPython e com Ironruby

16

O que significa IRON ?− Implementação Verdadeira da

Linguagem− Excelente performance− Fiel a Linguagem − Fiel a comunidade− Fiel a experiência

− Grande integração ao .NET− Fácil de usar com Bibliotecas .NET − Fácil de usar com outras linguagens .NET− Fácil de usar em Hostsin .NET− Fácil de usar com ferramentas .NET

− Implementation Running On .NET

Page 17: Semana Interop: Trabalhando com IronPython e com Ironruby

17

RoadMap

Page 18: Semana Interop: Trabalhando com IronPython e com Ironruby

18

IronPython no Mono• 100% Compatível com Mono• Roda mais rápido no Mono que na vm Python

Page 19: Semana Interop: Trabalhando com IronPython e com Ironruby

19

Arquitetura do IronPython

− Mesma arquitetura do CPython− scanner, parser, bytecode generator, support library

− Diferenças nos bytecode e suporte a biblioteca− Bytecode é IL para CLR – vai produzir código nativo− Biblioteca de suporte é escrita em C# e não C

− Compilação pode ser estática ou dinâmica− Produz .exe/.dll ou pode ser carregado e executado

dinâmicamente− IronPython é escrito inteiramente em C#

− Foram construídos 3 protitupo em Python inicialmente− Depois re-escrito em C#

PythonSource File

orCode

Snippet

PythonScanner Tokens

PythonParser AST

ILGenerator IL CLR

IronPython.Objects

refs

Page 20: Semana Interop: Trabalhando com IronPython e com Ironruby

20

Compilando Fatorial para IL

def factorial(n):     if n == 1: return 1     return n * factorial(n-1)

0 LOAD_FAST 0 (n) IL_0000: ldarg.0

3 LOAD_CONST 1 (1) IL_0001: ldsfld object __main__::c$0$PST04000002

6 COMPARE_OP 2 (==) IL_0006: call object IronPython…Ops::Equal(object,object)

9 JUMP_IF_FALSE 8 (to 20) IL_000b: call bool IronPython...Ops::IsTrue(object)IL_0010: brfalse IL_0020

12 POP_TOP

13 LOAD_CONST 1 (1) IL_0015: ldsfld object __main__::c$0$PST04000002

16 RETURN_VALUE IL_001a: ret

Page 21: Semana Interop: Trabalhando com IronPython e com Ironruby

21

Compilando Fatorial para C#

def factorial(n):    if n == 1: return 1    return n * factorial(n-1)

public static object factorial_f1(object n) { if (Ops.EqualIsTrue(n, 1)) return Main.c_1;   return Ops.Multiply(n, Ops.Call(Main.factorial,                           Ops.Subtract(n, Main.c_1)));}

Page 22: Semana Interop: Trabalhando com IronPython e com Ironruby

22

Compilando Fatorial – x86

0 LOAD_FAST 0 (n) 0000001b mov ecx,esi 0000001d mov edx,1 3 LOAD_CONST 1 (1)

6 COMPARE_OP 2 (==) 00000023 call dword ptr ds:[036E3184h]

9 JUMP_IF_FALSE 8 (to 20) 00000028 mov edi,eax 0000002a test edi,edi 0000002c je 00000038

12 POP_TOP

13 LOAD_CONST 1 (1) 00000039 mov eax,dword ptr ds:[01B054E4h]

16 RETURN_VALUE <pop 4 registers and ret>

Page 23: Semana Interop: Trabalhando com IronPython e com Ironruby

23

Performance

7 11 16 1521

69

0

10

20

30

40

50

60

70

80

Python-2.1 Python-2.3 Python-2.4 IronPython on1.1

IronPython on2.0

IronPython on2.0 w/opt

Milh

ões d

e te

ste

s p

or

seg

un

do

def t2(): for i in L: if i == 1000000: break <snip 18 identical lines> if i == 1000000: break

Page 24: Semana Interop: Trabalhando com IronPython e com Ironruby

Exemplos de Código

24

Page 25: Semana Interop: Trabalhando com IronPython e com Ironruby

Exemplos

Page 26: Semana Interop: Trabalhando com IronPython e com Ironruby

26

Exemplos

Page 27: Semana Interop: Trabalhando com IronPython e com Ironruby

Exemplos

Page 28: Semana Interop: Trabalhando com IronPython e com Ironruby

28

Exemplo

Page 29: Semana Interop: Trabalhando com IronPython e com Ironruby

29

PythonBinder

RubyBinder

COMBinder

JavaScriptBinder

ObjectBinder

Adding Dynamic to .NET

Dynamic Language RuntimeExpression Trees Dynamic Dispatch Call Site Caching

IronPython IronRuby C# VB.NET Others…

Page 30: Semana Interop: Trabalhando com IronPython e com Ironruby

30

IronPython Consumindo C#

public class Calculator { … public int Add(int x, int y) { return x + y; }}

class Calculator: … def Add(self, x, y): return x + y

calc = GetCalculator()sum = calc.Add(10, 20)

Page 31: Semana Interop: Trabalhando com IronPython e com Ironruby

31

C# 3.0 Consumindo IronPython

Calculator calc = GetCalculator();int sum = calc.Add(10, 20);

public class Calculator { … public int Add(int x, int y) { return x + y; }}

class Calculator: … def Add(self, x, y): return x + y

PyObject calc = GetCalculator();object res = calc.Invoke("Add", 10, 20);int sum = Convert.ToInt32(res);

object calc = GetCalculator();Type calcType = calc.GetType();object res = calcType.InvokeMember("Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });int sum = Convert.ToInt32(res);

Page 32: Semana Interop: Trabalhando com IronPython e com Ironruby

32

IronPython Studio

Page 33: Semana Interop: Trabalhando com IronPython e com Ironruby

33

IronPython com SilverLigth

− www.trypython.org

Page 34: Semana Interop: Trabalhando com IronPython e com Ironruby

34

DLR Console

− http://silverlight.net/content/samples/sl2/dlrconsole/

Page 35: Semana Interop: Trabalhando com IronPython e com Ironruby

Obrigado!! Dúvidas ?Alessandro de O. [email protected]

18/01/2010

35

Page 36: Semana Interop: Trabalhando com IronPython e com Ironruby

© 2009 Microsoft Corporation. All rights reserved. Microsoft, MSDN, the MSDN logo, and [list other trademarks referenced] are trademarks of the Microsoft group of companies.  The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation.  Because Microsoft must respond

to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. 

MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.