8 votes

Appeler l'API Ruby ou Python en C# .NET

Je dispose d'un grand nombre d'API et de classes que j'ai développées en Ruby et en Python et que j'aimerais utiliser dans mes applications .NET. Est-il possible d'instancier un objet Ruby ou Python en C# et d'appeler ses méthodes ?

Il semble que des bibliothèques comme IronPython fassent le contraire. En d'autres termes, elles permettent à Python d'utiliser les objets .NET, mais pas la réciproque, ce qui est ce que je recherche... Est-ce que je rate quelque chose ?

Des idées ?

9voto

Jörg W Mittag Points 153275

C'est l'une des deux choses que le Exécution du langage dynamique est censé faire : tout le monde pense que le DLR n'est destiné qu'aux implémenteurs de langages pour faciliter l'implémentation de langages dynamiques sur le CLI. Mais il est également destiné aux auteurs d'applications, pour faciliter l'intégration des langages dynamiques dans leurs applications.

Avant le DLR, chaque langue avait sa propre API d'hébergement. Désormais, le DLR dispose d'une spécification d'hébergement standardisé qui fonctionne de la même manière pour chaque et avec la prise en charge des objets typés dynamiquement dans C# 4 et VB.NET 10, c'est plus facile que jamais :

// MethodMissingDemo.cs
using System;
using IronRuby;

class Program
{
    static void Main()
    {
        var rubyEngine = Ruby.CreateEngine();
        rubyEngine.ExecuteFile("method_missing_demo.rb");
        dynamic globals = rubyEngine.Runtime.Globals;

        dynamic methodMissingDemo = globals.MethodMissingDemo.@new();

        Console.WriteLine(methodMissingDemo.HelloDynamicWorld());

        methodMissingDemo.print_all(args);
    }
}

# method_missing_demo.rb
class MethodMissingDemo
  def print_all(args)
    args.map {|arg| puts arg}
  end

  def method_missing(name, *args)
    name.to_s.gsub(/([[:lower:]\d])([[:upper:]])/,'\1 \2')
  end
end

Ici, on voit des trucs qui passent dans toutes les directions possibles. Le code C# appelle une méthode sur l'objet Ruby qui n'existe même pas et le code Ruby itère sur un tableau .NET et imprime son contenu dans la console.

3voto

Brian Sullivan Points 6392

Si vous pouvez attendre C# 4.0 (vous pouvez utiliser la version bêta dès maintenant), il sera doté du mot-clé "dynamic" et vous pourrez appeler le code IronRuby ou IronPython de la manière suivante aquí .

1voto

Soviut Points 26384

Les deux sites IronRuby y IronPython vous permettent d'appeler des modules, des fonctions et des classes natives Ruby et Python. Ces deux langages sont plus ou moins pris en charge en tant que langages de première classe dans .NET, notamment dans le cadre du DLR (Dynamic Language Runtime).

-1voto

Nestor Points 6139

J'ai vu des moyens d'appeler Ruby / Python à partir de C#. Mais c'est plus facile dans l'autre sens.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X