Este artigo foi traduzido por máquina.

Circulando

IronRuby no Windows Phone 7

Shay Friedman

Baixe o código de exemplo

Alguns anos atrás, eu era um cara de .net 100 por cento. Não tenho uma dica sobre o resto do mundo do desenvolvimento e fiquei muito satisfeito em minha própria bolha. Em seguida, tipo de por engano, eu aprendi Ruby, e a experiência foi jaw soltar. Fazer as coisas de maneira usar recursos incorporados, da linguagem foi alcançando a mim.

Ainda assim, você pode levar a pessoa do mundo do .net, mas não é possível colocar o mundo do .net para fora da pessoa. Assim como soube que a Microsoft estava desenvolvendo uma implementação da linguagem Ruby – chamado IronRuby — na parte superior do Microsoft .NET Framework, eu obtive muito empolgado e dove diretamente nela.

Com IronRuby, mundo do .net e o mundo de Ruby agora estão conectados. Isso permite que novas intermináveis de possibilidades e os benefícios de uma conexão de com são simplesmente de fenomenal.

Neste artigo, vou falar sobre um dos benefícios que importante para desenvolvedores do .NET Framework e o Ruby – é possível usar IronRuby no Windows 7 do telefone.

O que É IronRuby?

Em 2006, a Microsoft anunciou o desenvolvimento do IronRuby. Demorou mais de três anos para desenvolver e em abril, a equipe do IronRuby lançado a primeira versão estável do IronRuby: versão 1. 0.

IronRuby suporta o conjunto de todo o recurso de linguagem Ruby com uma inclusão exclusiva: integração entre o código Ruby e código do .NET Framework. Essa integração é bastante simples e requer pouco mais de carregar um assembly do .NET Framework para o contexto de Ruby. Por exemplo, esse código em IronRuby carrega o assembly de System.Windows.Forms e tira proveito das suas classes:

require 'System.Windows.Forms'

include System::Windows::Forms

form = Form.
new
form.height = 200
form.width = 400
form.text = "IronRuby Window"
form.show_dialog

Essa integração é possíveis graças ao Dynamic Language DLR (Runtime), uma camada adicionado na infra-estrutura do .NET Framework para fornecer serviços comuns a linguagens dinâmicas gravadas na parte superior da estrutura. O DLR está escrito na parte superior do CLR e torna muito mais fácil de implementar as linguagens dinâmicas na parte superior do .net. Essa é uma das principais razões para o aumento das linguagens dinâmicas do .NET Framework que vimos ultimamente, incluindo IronRuby, IronPython, IronJS, Nua, ClojureCLR e outras pessoas.

Principais recursos do IronRuby

Ruby é uma linguagem dinâmica e, portanto, é IronRuby. Isso significa que não há nenhum compilador à mão e a maioria das operações feitas durante o tempo de compilação e compilação em linguagens estáticas é feita durante o tempo de execução. Esse comportamento fornece uma variedade de recursos que são difíceis ou impossíveis de se obter a mais atuais de linguagens estáticas.

Interoperabilidade com os objetos do .NET Framework A linguagem Ruby possui várias implementações: MRI (que é o original), JRuby, Rubinius, MacRub, IronRuby e outras pessoas. O que torna IronRuby destacar-se de que a torcida é sua capacidade de forma conveniente interagir com objetos do .NET Framework. Interoperabilidade vai a ambas as direções — objetos .NET Framework estão disponíveis no código em IronRuby e IronRuby objetos estão disponíveis no código do .NET Framework.

A digitação dinâmica Tipos de variáveis do IronRuby serão calculados durante o tempo de execução, portanto, não é necessário especificar os tipos no seu código. No entanto, isso não significa que IronRuby não tem tipos. Ele faz e cada tipo tem suas próprias regras, assim como tipos em linguagens estáticas. O código a seguir demonstra o mecanismo de digitação dinâmico em algumas etapas simples:

# Declaring a numeric variable
a = 1

# The variable is of a numeric type 
# and therefore numeric operations are available
a = a * 2 + 8 / 4

# The next line will raise an exception
# because it is not possible to add a string to a number
a = a + "hello"

# However, the next line is entirely legit and will result
# in changing the variable type to String
a = "Hello"

O console interativo Da mesma forma que o prompt de comando do Windows, o console interativo é um aplicativo que recupera o código em IronRuby e a executa imediatamente. O fluxo de execução é também conhecido como REPL (Read-avaliação-impressão-loop). Você pode definir variáveis, métodos e classes até mesmo, carregar arquivos do IronRuby ou assemblies do .NET Framework e usá-los instantaneamente. Por exemplo, do Figura 1 mostra uma sessão de console simples que cria uma classe e usa-o imediatamente.

image: Using the IronRuby Console

Figura 1 de usando o console do IronRuby

Digitação pato IronRuby é uma linguagem orientada a objeto. Ele oferece suporte a controle de acesso, o encapsulamento, herança e classes, como você espera de uma linguagem orientada a objeto. No entanto, ele não oferece suporte a interfaces ou classes abstratas, como fazem muitas linguagens estáticas.

Não é uma falha no design de linguagem, no entanto. Com a digitação dinâmica declarar o código de contratos, como as interfaces ou classes abstratas torna-se redundante. A única coisa que importa sobre um objeto é se define um método específico ou não e não é necessário para marcá-lo quando ele faz. Isso é conhecido como a digitação pato — se ela quacks como um pato e ele swims como um pato, é um pato e não é necessário para carimbar para considerá-la como um pato.

Por exemplo, o código de exemplo do Figura 2 contém duas classes com um método chamado say_hi e outro método geral chamado apresentar que recupera um objeto e executa o método say_hi.(Observe a ausência de interfaces ou de outros mecanismos de marcação).

De um exemplo de Duck digitação, a Figura 2

class Human
  def say_hi
    puts "Hi!"
  end
end
class Duck
  def say_hi
    puts "Quack!"
  end
end

def introduce(obj)
  obj.say_hi
end

human = Human.
new
duck = Duck.
new

introduce(human) # prints "Hi!"
introduce(duck) # prints "Quack!"

Metaprogramming IronRuby é fornecido com recursos poderosos de metaprogramming. Metaprogramming é uma maneira de adicionar, alterar e até mesmo remover os métodos durante o tempo de execução. Por exemplo, é possível adicionar métodos a uma classe, escrever métodos que definem os outros métodos ou remover definições de método de uma classe existente. A Figura 3 adiciona um método a uma classe que é refletida para todas as ocorrências atuais e futuras dessa classe.

De Adicionando um método em uma classe depois que ele tem sido declarado, a Figura 3

# Creating a class with no methods
class Demo
end

# Creating an instance of class Demo
d = Demo.
new

# Opening the class and adding a new method - hello_world
class Demo
  def hello_world
    puts "hello world"
  end
end

# Using the newly added method on the class instance
d.hello_world # prints "hello world"

Além disso, há métodos especiais que podem ser usados para detectar chamadas para métodos indefinidos ou constantes. Usar esses métodos torna mais fácil oferecer suporte a nomes de método dinâmico, como find_by_ [nome da coluna] em [nome da coluna] pode ser substituído por qualquer valor, como find_by_name, find_by_city ou find_by_zipcode.

RubyGems A linguagem Ruby tão potente quanto, não têm se tornado um sucesso enorme sem as bibliotecas externas que podem ser instalados e usados com ele.

O principal método de instalação de bibliotecas de Ruby é por meio do sistema RubyGems. Ele é um Gerenciador de pacote que ajuda a distribuir e instalar as bibliotecas de Ruby, que são chamadas gems. Existem milhares de gems livres disponível, cobrindo praticamente todos os aspectos de programação e a tarefa, incluindo testes estruturas, bibliotecas de cálculo do imposto, estruturas de desenvolvimento da Web e muito mais.

Você deve estar ciente de que alguns RubyGems dependem das bibliotecas C. Esses gems não pode ser executado na versão atual do IronRuby, a menos que as bibliotecas C com portas simples Ruby ou c#.

A comunidade Uma das melhores coisas sobre IronRuby é que você obtenha acesso à comunidade do Ruby. Isso inclui um conteúdo útil em dezenas de fóruns, listas de endereçamento, salas de bate-papo e blogs fornecidos por pessoas que estão dispostas a ajudá-lo com qualquer ponto de interrogação. Não hesite em tirar proveito desses recursos;Eles são extremamente úteis.

IronRuby e o Silverlight

O Silverlight 2 introduziu um recurso novo e importante: suporte a linguagens DLR. Como resultado, os desenvolvedores podem usar IronRuby com aplicativos do Silverlight, de incorporá-lo no aplicativo para escrever aplicativos do Silverlight inteiros com ele.

Mas espere, o Silverlight está sendo executado no Windows 7 do telefone, à direita? Exatamente.

Telefone 7 do Windows

A próxima móvel plataforma da Microsoft, Windows 7 do telefone, espera-se por alguns para se tornar um alterador de jogo no setor de smartphone. Além dos recursos multi-touch padrão e uma nova interface do usuário brilhante, a melhor notícia sobre o Windows 7 do telefone da perspectiva do desenvolvedor é que o Silverlight sua plataforma de desenvolvimento.

É um movimento inteligente pela Microsoft para fazer uso de uma tecnologia bem estabelecida, permitindo que um grande número de que os desenvolvedores criem aplicativos móveis com um simples, quase imperceptível, curva de aprendizado.

Como as linguagens DLR são capazes de executar dentro do ambiente do Silverlight, você pode tirar proveito do IronRuby e usá-la para escrever aplicativos do Windows 7 do telefone.

No entanto, existem algumas limitações que você deve conhecer. Windows telefone 7 é fornecido com o .NET Compact Framework, que é um subconjunto do .NET Framework. O Compact Framework é projetado para aplicativos móveis e incorporados e contém aproximadamente 30 por cento do .NET Framework completo. Conseqüentemente, várias classes estão faltando, e isso afeta o funcionamento do IronRuby.

O principal recurso ausente que afeta IronRuby é o namespace Reflection. Emit. IronRuby usa esse recurso para compilar o código imediatamente para tornar os aplicativos executados mais rapidamente. No entanto, é uma otimização de desempenho e não um componente necessário para a execução de aplicativos e scripts de logon simples.

Outra limitação se refere a maneira como os novos aplicativos do Windows 7 do telefone são criados. Tais aplicativos podem ser criados somente a partir do Visual Studio e somente em c#. Essa exigência obriga os desenvolvedores a escrever código em c# que inicia o código em IronRuby.

A última limitação importante é que RubyGems não funcionará no Windows 7 do telefone. Portanto, para usar uma gem, você precisará incluir seus arquivos de código nos arquivos de aplicativo e usá-los como qualquer outro arquivo de código do IronRuby.

Criando um aplicativo simples do IronRuby em Windows telefone 7

Para iniciar um aplicativo orientado a IronRuby Windows telefone 7, você precisa primeiro instalar o Windows telefone 7 Developer Tools, que pode ser baixado a partir de developer.windowsphone.com .

Depois que as ferramentas estiverem instaladas, abra o Visual Studio e vá para o File | New | Project. Na caixa de diálogo New Project selecione a categoria “ Silverlight para o Windows telefone ” e, em seguida, escolha o modelo de projeto de aplicativo de telefone do Windows “ ”. Nomeie-a e continue.

Assim que o novo projeto for aberto, você perceberá que um arquivo XAML simples foi criado para você. Observe que o XAML em geral, é necessário para o Silverlight e não é dependente de idioma. Portanto, mesmo que o código do aplicativo será gravado em IronRuby, você deve usar o XAML para criar a interface do usuário. Neste aplicativo simples, o arquivo XAML padrão é o suficiente, portanto, não será necessário deve ser feito aqui.

A parte interessante deste aplicativo simples é o código. Antes de nos aprofundar em que, no entanto, precisamos adicionar referências para o Iron ­ Ruby e assemblies do DLR. Esses assemblies não são aqueles regulares;é necessário que os assemblies de preparado para o 7 do telefone Windows, é possível recuperar a partir de ironruby.codeplex.com/releases/view/43540#DownloadId=133276 . Você encontrará os assemblies necessários dentro da pasta do silverlight/bin no pacote baixado.

Em seguida, precisamos escrever o código em IronRuby. Adicionar um novo arquivo de texto para o aplicativo e denomine-MainPage.rb. Além disso, para facilitar a implantação para o telefone, abra as propriedades deste arquivo e altere a propriedade “ Build Action ” para “ Embedded Resource. ”.

Em seguida, cole o código de do Figura 4 para o arquivo.

Figura 4 do arquivo de código em IronRuby para executar o Windows telefone 7

# Include namespaces for ease of use
include System::Windows::Media
include System::Windows::Controls

# Set the titles
Phone.find_name("ApplicationTitle").text = "MSDN Magazine"
Phone.find_name("PageTitle").text = "IronRuby& WP7"

# Create a new text block
textBlock = TextBlock.
new
textBlock.text = "IronRuby is running on Windows Phone 7!"
textBlock.foreground = SolidColorBrush.
new(Colors.Green)
textBlock.font_size = 48
textBlock.text_wrapping = System::Windows::TextWrapping.Wrap

# Add the text block to the page
Phone.find_name("ContentGrid").children.add(textBlock)

O código em IronRuby em do Figura 4 é bastante direto;definimos a títulos, crie um bloco de texto com algum texto e adicioná-lo para a página. Observe que você pode usar tudo na linguagem Ruby (não feita aqui), como classes, metaprogramming e bibliotecas, com as limitações já mencionadas de execução dentro do ambiente de telefone do Windows.

Agora tudo o que é realmente executar o código em IronRuby. Para fazer isso, quando o aplicativo é carregado, o código de do Figura 5 deve ser adicionado ao construtor da classe MainPage, que fica dentro do arquivo MainPage.xaml.cs.

A Figura 5 de Adicionando código para executar código em IronRuby do construtor de classe

// Allow both portrait and landscape orientations
SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;

// Create an IronRuby engine and prevent compilation
ScriptEngine engine = Ruby.CreateEngine();

// Load the System.Windows.Media assembly to the IronRuby context
engine.Runtime.LoadAssembly(typeof(Color).Assembly);

// Add a global constant named Phone, which will allow access to this class
engine.Runtime.Globals.SetVariable("Phone", this);

// Read the IronRuby code
Assembly execAssembly = Assembly.GetExecutingAssembly();
Stream codeFile = 
  execAssembly.GetManifestResourceStream("SampleWPApp.MainPage.rb");
string code = new StreamReader(codeFile).ReadToEnd();

// Execute the IronRuby code
engine.Execute(code);

O código no do Figura 5 é relativamente curto e normalmente demonstra como é fácil executar código em IronRuby do código em c#.

Além disso, certifique-se de adicioná-los usando as instruções para a classe:

using System.Reflection;
using System.IO;
using Microsoft.Scripting.Hosting;
using IronRuby;

A terceira linha de código em do Figura 5 carrega o assembly System.Windows.Media no contexto IronRuby, que permite que o código interoperar com classes e os enums este assembly.

A próxima linha permite que o código em IronRuby acessar a página atual do Silverlight. Essa linha expõe a instância atual (this) para o código em IronRuby por meio de uma constante chamada telefônica.

O restante do código lê o código em IronRuby do arquivo incorporado (Observe que o espaço para nome do aplicativo deve ser adicionado ao nome do arquivo, portanto MainPage.rb torna-se SampleWPApp.MainPage.rb) e, em seguida, executa-lo usando a instância do mecanismo.

E isso é tudo. Criamos um aplicativo, uma vez carregado, executado IronRuby, que, por sua vez, altera os títulos e adiciona um bloco de texto para a página do Silverlight. Tudo o que está a executar o aplicativo e o resultado é mostrado no do Figura 6.

image: An IronRuby-Driven Application Running on Windows Phone 7

Figura 6 de de um aplicativo controlado por IronRuby em execução no Windows telefone 7

Obtendo melhor de tudo o tempo de vida

Mesmo que o fluxo de trabalho não é perfeito ao usar IronRuby no Windows 7 do telefone e você precisa ter as várias limitações em mente, isso é apenas o começo. As plataformas IronRuby e no Windows 7 do telefone são novos e eles estão melhorando o tempo todo.

Essa combinação abre diversas possibilidades para desenvolvedores do .NET Framework e desenvolvedores Ruby. Agora, os desenvolvedores .net podem aproveitar a eficiência incrível de linguagem Ruby ao escrever aplicativos do Windows 7 do telefone, como, por exemplo, a incorporação de um console do IronRuby em seus aplicativos ou fornecer os recursos de extensibilidade. E os desenvolvedores Ruby, no outro extremo, podem — pela primeira vez – escrever aplicativos móveis usando o seu idioma.

Isto é, sem uma dúvida, o início de um mundo novo do brave com uma grande quantidade de oportunidades e possibilidades. E tudo isso na palma de suas mãos.

Shay Friedman é um Microsoft Visual c# / IronRuby MVP e autor do IronRuby Unleashed (Sams, 2010). Ele está funcionando como um líder de linguagens dinâmicas no grupo Sela onde ele consulta e conduz os cursos do mundo. Leia seu blog em do IronShay.com.

Meus agradecimentos aos seguinte especialista técnico para revisar este artigo: Tomas Matousek