Dieser Artikel wurde maschinell übersetzt.

Unterwegs

IronRuby unter Windows Phone 7

Shay Friedman

Downloaden des Codebeispiels

Vor ein paar Jahren konnte ich eine hundertprozentige .NET Angreifer. Habe ich keinen Hinweis zu den Rest der Welt Entwicklungs- und war ich in meinen eigenen Blase sehr zufrieden. Dann Art von versehentlich gelernt Ruby und die Erfahrung war Jaw ablegen. Dinge, die Art und Weise durchgeführt werden mir herausragende wurde mit integrierten Features der Sprache.

Dennoch können Sie die Person aus der Welt .NET durchführen, aber Sie können nicht außerhalb der Person weltweit .NET verwenden. So, wie ich gehört Microsoft war eine Implementierung der Ruby Sprache entwickeln – IronRuby bezeichnet – ich über das Microsoft .NET Framework haben sehr aufgeregt und dove direkt dorthin.

Mit IronRuby der Welt .NET und Ruby Welt hergestellt. Auf diese Weise können unzählige neue Möglichkeiten, und eine solche Verbindung nothing des phänomenalen Vorteile.

In diesem Artikel werde ich Sie zu einer der Vorteile, die .NET Framework- und Ruby Entwickler wichtige des mitteilen – Sie können IronRuby auf Windows Telefon 7 verwenden.

Was ist IronRuby?

Im 2006 kündigte Microsoft die Entwicklung von IronRuby. Es dauerte, mehr als drei Jahre entwickelt und im April angekündigt IronRuby-Team die erste stabile Version IronRuby: Version 1.0.

IronRuby unterstützt den gesamten Funktionsumfang der Ruby-Sprache durch eine eindeutige hinzufügen: Integration zwischen Ruby Code und .NET Framework-Code. Durch diese Integration ist ziemlich nahtlose und erfordert wenig Ruby den Kontext eine .NET Framework-Assembly mehr als laden. Angenommen, dieser IronRuby Code lädt die Assembly System.Windows.Forms und nutzt seine Klassen:

require 'System.Windows.Forms'

include System::Windows::Forms

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

Durch diese Integration ist möglich Dank an die Dynamic Language Runtime (DLR), einem Layer hinzugefügt, um die .NET Framework-Infrastruktur bereitstellen, häufige dynamische Sprachen über das Framework geschrieben. Die DLR ist über die CLR geschrieben und macht es viel einfacher, dynamische Sprachen über .NET zu implementieren. Dies ist einer der Hauptgründe für die Zunahme von dynamischen Sprachen für .NET Framework, der wir kürzlich, einschließlich IronRuby, IronPython, IronJS, Nua, ClojureCLR und andere gesehen haben.

Die wichtigsten Funktionen des IronRuby

Ruby ist eine dynamische Sprache und deshalb IronRuby. Daher ist kein Compiler zur hand, und die meisten Vorgänge, die während der Kompilierung und Build Zeit in statischen Sprachen durchgeführt werden zur Laufzeit durchgeführt. Dies bietet eine Vielzahl von Features, die schwierig oder unmöglich, aktuelle statische Sprachen zu erreichen sind.

Interoperabilität mit .NET Framework-Objekte Ruby Sprache besteht aus verschiedenen Implementierungen: MRI (der ursprünglichen Ebene), JRuby, Rubinius, MacRub, IronRuby und andere. Macht IronRuby aus der Zuschauer hervorzuheben ist die Möglichkeit, bequem mit .NET Framework-Objekten zu interagieren. Dass Interoperabilität in beide Richtungen geht – .NET Framework-Objekte sind von Code IronRuby und IronRuby Objekte von .NET Framework-Code verfügbar.

Dynamische Eingabe Variablentypen IronRuby werden zur Laufzeit berechnet, so keine Notwendigkeit besteht, die Typen im Code an. Allerdings, bedeutet nicht, dass IronRuby Typen nicht. Es stimmt, und jeder Typ verfügt über eigene Regeln, wie Typen in statischen Sprachen. Dieser Beispielcode zeigt den dynamischen Tippfehler Mechanismus in ein paar einfachen Schritten:

# 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"

Die interaktive Konsole Ähnlich wie der Windows-Eingabeaufforderung, die interaktive Konsole ist eine Anwendung, die Code IronRuby und sofort ausgeführt. Der Ausführungsablauf ist auch bekannt als REPL (Read-Evaluate-drucken-Schleife). Definieren von Variablen, Methoden und Klassen selbst, IronRuby Dateien oder .NET Framework-Assemblys zu laden, und diese sofort verwenden. Abbildung 1 zeigt z. B. eine einfache Konsolensitzung, die eine Klasse erstellt und sofort verwendet.

image: Using the IronRuby Console

Abbildung 1 mithilfe der Verwaltungskonsole IronRuby

Duck Eingabe IronRuby ist eine objektorientierte Sprache. Es unterstützt Klassen, Vererbung, Kapselung und Zugriffssteuerung, wie Sie von einer objektorientierten Sprache erwarten. Allerdings unterstützt er keine Schnittstellen oder abstrakte Klassen, wie viele statische Sprachen.

Dies ist ein Fehler in den Entwurf Sprache jedoch nicht. Mit dynamischen einzugeben Verträge Code deklariert z. B. Schnittstellen oder abstrakte Klassen ist redundant. Der einzige Unterschied, der zu einem Objekt ist von Bedeutung ist, ob es eine bestimmte Methode definiert und besteht keine Notwendigkeit, um es zu Mark, wenn dies der Fall ist. Dies wird als Eingabe Duck bezeichnet, wenn es wie eine Ente quacks es wie eine Ente swims eine Ente ist und, keine Notwendigkeit besteht, um sich überlegen, wie eine Ente zu stempeln.

Das Codebeispiel in Abbildung 2 enthält zwei Klassen mit einer Methode mit dem Namen Say_hi -, und eine weitere allgemeine Methode namens einführen, die ein Objekt und seine Say_hi -Methode ausgeführt.(Beachten Sie das Fehlen von Schnittstellen oder andere Mechanismen markieren.)

Abbildung 2 ein Beispiel für die Eingabe Duck

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 verfügt über leistungsstarke metaprogramming Funktionen. Metaprogramming ist eine Möglichkeit zum Hinzufügen, ändern und entfernen auch Methoden zur Laufzeit. Beispielsweise ist es möglich, Hinzufügen von Methoden zu einer Klasse, die Methoden, die zum Definieren von anderen Methoden oder Entfernen von Methodendefinitionen aus einer vorhandenen Klasse zu schreiben. Abbildung 3 Fügt eine Methode in einer Klasse, die an alle aktuellen und zukünftigen Instanzen dieser Klasse zurückgegeben werden.

Abbildung 3 Hinzufügen einer Methode zu einer Klasse, nachdem es deklariert worden ist

# 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"

Darüber hinaus stehen besondere Methoden, mit denen Sie Aufrufe von Methoden nicht definiert oder Konstanten abfangen können. Mithilfe dieser Methoden erleichtert es zur Unterstützung der dynamischen Methode sind z. B. Find_by_ [Spaltenname], [Spaltenname] mit einem Wert, wie z. B. Find_by_nameFind_by_city -oder Find_by_zipcode-ersetzt werden.

RubyGems Ruby Sprache so leistungsfähig, wie es ist, würde nicht enormen Erfolg ohne externen Bibliotheken geworden sind, die installiert und mit ihm verwendet werden kann.

Die main-Methode der Installation Ruby-Bibliotheken erfolgt über das System RubyGems. Es ist ein Paketmanager, der dabei hilft, verteilen und Installieren des Ruby-Bibliotheken, die Edelsteine-bezeichnet werden. Stehen Tausende von kostenlosen Edelsteine, fast jeden Aspekt der Programmierung und Aufgabe, einschließlich der Test-Frameworks, Steuer Berechnung Bibliotheken, Web Development-Frameworks und vieles mehr.

Sie sollten sich bewusst sein, dass einige RubyGems C-Bibliotheken abhängen. Diese Edelsteine können nicht auf die aktuelle Version des IronRuby ausgeführt werden, wenn die C-Bibliotheken um einfache Ruby oder c# portiert werden.

Die Community Eine der besten Aspekte von IronRuby ist, dass Zugriff auf die Ruby-Community zu erhalten. Dies umfasst nützliche Inhalte in Dutzende von Foren, Adressenlisten, Chatrooms und Blogs von Personen, die bereit sind, die bei jeder Frage helfen bereitgestellt. Diese Ressourcen nutzen hesitate nicht; Sie sind äußerst nützlich.

IronRuby und Silverlight

Silverlight 2 Einführung ein neues und wichtiges Features: Unterstützung für DLR-Sprachen. Daher können Entwickler IronRuby mit Silverlight-Anwendungen aus es in der Anwendung zum Schreiben des gesamten Silverlight-Anwendungen mit einbinden.

Aber warten, Silverlight auf Windows Telefon 7 rechts ausgeführt wird? Genau.

Windows Phone 7

Die nächste mobile Microsoft-Unternehmensplattform, Windows-Telefon-7 wird von einigen Wechslern Spiel in der Branche Smartphone wird erwartet. Abgesehen von der Standardverfahren für die multi-touch und eine glänzende neue Benutzeroberfläche ist die beste Neuigkeiten über Windows Telefon 7 aus der Perspektive eines Entwicklers Silverlight die Entwicklungsplattform.

Verschieben eines Smarttags von Microsoft, um sicherzustellen, ist eine bewährte Technologie, wodurch eine große Anzahl von Entwicklern mobile Anwendungen mit einer leicht fast unnoticeable erstellen Lernphase nutzen.

Da DLR-Sprachen innerhalb der Silverlight-Umgebung ausgeführt werden, können IronRuby nutzen, und verwenden Sie es zum Schreiben von Anwendungen für Windows Telefon 7.

Es gibt jedoch einige Einschränkungen, denen Ihnen bekannt sein sollten. Im Lieferumfang von Windows Telefon 7 ist .NET Compact Framework ist eine Teilmenge von .NET Framework. Das Compact Framework ist für mobile und eingebettete Anwendungen konzipiert und enthält ungefähr 30 Prozent der im vollständigen .NET Framework. Daher fehlen zahlreiche Klassen und dies wirkt sich auf die Funktionsweise von IronRuby.

Die main IronRuby wirkt sich auf die fehlende Funktion ist Reflection.Emit-Namespace. IronRuby verwendet dieses Feature zum Kompilieren von Code dynamisch in Anwendungen schneller ausgeführt werden. Es ist jedoch nur eine Leistungsoptimierung und keine Komponente zum Ausführen von einfachen Skripts und Anwendungen erforderlich sind.

Eine weitere Einschränkung betrifft die Art und Weise, in der neue Windows-Telefon 7-Anwendungen erstellt werden. Solche Anwendungen können nur von Visual Studio und nur in c# erstellt werden. Diese Anforderung zwingt Entwickler Code in c# schreiben, die den Code IronRuby initiiert.

Die letzte wichtige Einschränkung ist, dass auf Windows-Telefon 7 RubyGems funktionieren nicht. Daher müssen auf eine kleine Kugel verwenden, enthalten die Codedateien innerhalb der Anwendungsdateien und verwenden Sie Sie als alle anderen Dateien, IronRuby Code.

Erstellen einer einfachen IronRuby Anwendung auf Windows-Telefon 7

Eine Anwendung IronRuby-gesteuerte Windows Telefon 7 starten, müssen Sie zuerst Windows Telefon 7 Developer Tools installieren, das von developer.windowsphone.com-heruntergeladen werden kann.

Nachdem Sie die Tools installiert sind, öffnen Sie Visual Studio, und wechseln Sie zur Datei | neu | Projekt. Wählen Sie die Kategorie “ Silverlight für Windows Telefon ”, und wählen Sie dann die Projektvorlage “ Windows-Telefon-Anwendung ”, im Dialogfeld Neues Projekt. Nennen Sie es, und fortfahren.

Als neue Projekt geöffnet wird, werden Sie feststellen, dass Sie eine einfache XAML-Datei erstellt wurde. Beachten Sie, dass XAML für Silverlight erforderlich im Allgemeinen und nicht sprachabhängigen. Daher müssen Sie, obwohl der Anwendungscode im IronRuby geschrieben wird, XAML verwenden, um die Benutzeroberfläche zu erstellen. Bei dieser einfachen Anwendung reicht die Standard-XAML-Datei, damit keine Änderungen hier vorgenommen werden müssen.

Der interessante Teil dieser einfachen Anwendung ist der Code. Bevor wir, eintauchen, müssen wir jedoch Verweise auf die DLR-Assemblys und Iron ­ Ruby hinzufügen. Diese Assemblys nicht regulären diejenigen sind, benötigen wir die Windows-Telefon 7-Ready-Assemblys, die von ironruby.codeplex.com/releases/view/43540#DownloadId=133276-abgerufen werden können. Finden Sie die erforderlichen Assemblys in Silverlight/Bin-Ordner des heruntergeladenen Pakets.

Als Nächstes müssen wir den IronRuby Code schreiben. Fügen Sie der Anwendung eine neue Textdatei, und nennen Sie Sie MainPage.rb. Darüber hinaus die Bereitstellung an das Telefon zu vereinfachen, öffnen Sie die Eigenschaften dieser Datei und ändern Sie die Eigenschaft “ Buildvorgang ” in “ Embedded Resource ”.

Fügen Sie den Code von Abbildung 4 in die Datei.

Abbildung 4 IronRuby Codedatei zum Ausführen von Windows-Telefon 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)

Abbildung 4 IronRuby Code ist relativ einfach; wir Titel festlegen, erstellen Sie einen Textblock mit Text und es der Seite hinzufügen. Beachten Sie, dass Sie alles in Ruby Sprache (hier nicht ausgeführt), z. B. Klassen, metaprogramming und Bibliotheken, mit den oben genannten Einschränkungen der ausgeführten Windows-Telefon-Umgebung verwenden können.

Jetzt ist die IronRuby Code tatsächlich ausgeführt wird. Zu diesem Zweck beim Laden der Anwendung sollten der Code von Abbildung 5 an den Klassenkonstruktor MainPage hinzugefügt werden innerhalb der MainPage.xaml.cs-Datei befindet.

Abbildung 5 Hinzufügen von Code zum Ausführen der IronRuby-Code aus der Konstruktor der Klasse

// 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);

Der Code im Abbildung 5 ist relativ kurz und ordnungsgemäß veranschaulicht, wie einfach es ist, IronRuby Code von C#-Code auszuführen.

Stellen Sie außerdem sicher, dass diese mit Anweisungen zur Klasse hinzugefügt:

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

Die dritte Zeile des Codes im Abbildung 5 lädt die System.Windows.Media-Assembly in den Kontext für IronRuby, der den Code für die Zusammenarbeit mit Klassen und Enumerationen dieser Assembly ermöglicht.

Die nächste Zeile kann IronRuby Code die aktuelle Silverlight-Seite zugreifen. Diese Zeile stellt die aktuelle Instanz (this) an den IronRuby Code über eine Konstante mit dem Namen Telefon .

Die restliche Code liest den Code IronRuby aus der eingebetteten Datei (Beachten Sie, dass der Namespace der Anwendung an den Dateinamen hinzugefügt werden soll, damit MainPage.rb SampleWPApp.MainPage.rb zu) und anschließend mit die Instanz des Moduls ausgeführt.

Das ist alles. Wir haben eine Anwendung erstellt, die, einmal geladen, IronRuby, ausgeführt wird, die wiederum die Titel ändert und einen Textblock auf der Silverlight-Seite hinzugefügt. Ist die Anwendung ausgeführt wird, und das Ergebnis wird im Abbildung 6 angezeigt.

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

Abbildung 6 ein auf Windows-Telefon 7 ausgeführten IronRuby datengesteuerten Anwendung

Verbesserte Abrufen der Uhrzeit

Auch wenn der Workflow nicht perfekt, von Windows Telefon 7 IronRuby und Sie die verschiedenen Einschränkungen im Auge zu behalten müssen, ist dies nur der Anfang. IronRuby und Windows Telefon 7-Plattformen sind beide, die neuen und Sie sind erhalten bessere aller Zeiten.

Diese Kombination ist von vielen Möglichkeiten, um .NET Framework-Entwickler und Ruby-Entwickler eröffnet. Nun können .NET Entwickler die unglaubliche Leistungsfähigkeit der Ruby Sprache nutzen beim Schreiben von Windows Telefon 7-Anwendungen, wie z. B. eine Konsole IronRuby in Ihre Anwendungen integrieren und Bereitstellen von Funktionen für die Erweiterbarkeit. Und Ruby-Entwickler auf der anderen Seite können – zum ersten Mal – mobile Anwendungen mit Ihrer Sprache zu schreiben.

Dies ist, ohne einen unsicheren der Dawn einen schönen neuen Welt mit vielen Möglichkeiten und Möglichkeiten. Und es ist alles in stützen Sie Ihre Hände.

Shay Friedman ist eine Microsoft Visual c# / IronRuby MVP und Autor von IronRuby Unleashed (Sams, 2010). Er arbeitet als Gesprächsleiter dynamischer Sprachen in Sela-Gruppe, in der er konsultiert und Kurse auf der ganzen Welt durchführt. Lesen Sie seinen Blog unter IronShay.com .

Dank an den folgenden technischen Experten für die Überprüfung der in diesem Artikel: Tomas Matousek