2010-10-14 2 views
3

je suis tombé sur ce vraiment agréable à regarder le code Scala tout en recherchant XMPP pour un projet .Net nous travaillons:Comment ce code Scala pourrait-il apparaître dans un C# idiomatique?

object Main { 

    /** 
    * @param args the command line arguments 
    */ 
    def main(args: Array[String]) :Unit = { 
     new XMPPComponent(
     new ComponentConfig() { 
      def secret() : String = { "secret.goes.here" } 
      def server() : String = { "communitivity.com" } 
      def subdomain() : String = { "weather" } 
      def name() : String = { "US Weather" } 
      def description() : String = { "Weather component that also supported SPARQL/XMPP" } 
     }, 
     actor { 
     loop { 
      react { 
       case (pkt:Packet, out : Actor) => 
        Console.println("Received packet...\n"+pkt.toXML) 
        pkt match { 
         case message:Message => 
          val reply = new Message() 
          reply.setTo(message.getFrom()) 
          reply.setFrom(message.getTo()) 
          reply.setType(message.getType()) 
          reply.setThread(message.getThread()) 
          reply.setBody("Received '"+message.getBody()+"', tyvm") 
          out ! reply 
         case _ => 
          Console.println("Received something other than Message") 
        } 
       case _ => 
        Console.println("Received something other than (Packet, actor)") 
      } 
     } 
     } 
    ).start 
    } 
} 

(Ceci a été pris de http://github.com/Communitivity/MinimalScalaXMPPComponent/blob/master/src/org/communitivity/echoxmpp/Main.scala)

L'acteur et regarde des trucs métacaractères comme un très bon moyen d'écrire des composants de manière évolutive. Je n'ai pas été capable de trouver des bibliothèques d'acteurs C# qui ont l'air mature, et l'apprentissage d'Axum semble être exagéré.

Quelle serait la bonne façon d'attaquer ceci en C#? (en ignorant le code spécifique à XMPP, bien sûr - je suis plus intéressé par ce à quoi ressemblerait la version C# des acteurs et la correspondance des modèles).

+0

Je ne suis pas vraiment sûr de ce qui se qualifie comme une réponse ici. C# a quelques extensions qui favorisent un style de programmation fonctionnel mais c'est toujours un langage impératif. Je pense que la fonctionnalité dans cet exemple n'est pas si difficile à reproduire, mais ce sera soit un style impératif, ou kludgy pour imiter les fonctionnalités du langage fonctionnel. –

Répondre

3

Il existe des bibliothèques Actor comme disponibles pour .NET voir retlang pour un, aussi F# agents sont similaires.

Voir aussi question.

+0

Je suppose que retlang est probablement la solution la plus proche du travail sans changer les langages de programmation, merci – pmn

Questions connexes