IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

F# Discussion :

F# 2.0 et Visual Studio 2010


Sujet :

F#

  1. #1
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut F# 2.0 et Visual Studio 2010
    Comme ce forum manque un peu d'activité, je fais un petit message pour informer des nouveautés.

    La version finale de Visual Studio 2010 vient tout juste de sortir et cela inclut F# 2.0.

    F# n'a pas beaucoup changé depuis la dernière Release Candidate (j'en avais parlé), à part des bug fixs. Toujours est-il qu'on a enfin une version stable et production-ready.

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Points : 57
    Points
    57
    Par défaut
    Je l'utilise sous Mono et je dois dire que cela fonctionne plutôt bien

  3. #3
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Ouais, il y a eu pas mal de travail à ce niveau-là, mais ça devrait encore être considérablement amélioré cette année (cf. cette offre).

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Points : 57
    Points
    57
    Par défaut
    Oui il y a aussi ce message sur le blog de Miguel de Icaza qui indique que la prochaine version de mono ajoutera la tailcall optimization (et donc un meilleur support de F#).

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Points : 57
    Points
    57
    Par défaut
    Bon finalement, F# et Mono c'est pas encore ça

    Il y a encore de gros problèmes lorsque l'on fait de la composition de fonction ou lorsque l'on veut appeler des fonctions dans un when guard.

  6. #6
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Je peux voir l'erreur ?

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Points : 57
    Points
    57
    Par défaut
    Tous les morceaux de code qui vont suivre fonctionne avec la CLR de Microsoft. Par contre certains d'entre-eux ne fonctionnent pas avec la version 2.6.3 de Mono.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    >let whenGuardFailure cardsArray =
    -    let subFunc v1 v2 v3 v4 =
    -        v1 + v2 + v3 + v4
    -    match cardsArray with
    -    | [| v1; v2; v3; v4 |] when subFunc v1 v2 v3 v4 = 40 -> printfn "Excellent!"
    -    | _                                                  -> printfn "Bouh!"
    -
    -whenGuardFailure [| 10; 10; 10; 10 |];;
    Excellent!
    Ici le code fonctionne comme sur la CLR de Microsoft.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    >let whenGuardFailure cardsArray =
    -    let subFunc v1 v2 v3 v4 =
    -        v1 = v2 && v2 = v3 && v3 = v4
    -    match cardsArray with
    -    | [| v1; v2; v3; v4 |] when subFunc v1 v2 v3 v4 -> printfn "Excellent!"
    -    | _                                             -> printfn "Bouh!"
    -
    -whenGuardFailure [| 10; 10; 10; 10 |];;
    System.InvalidProgramException: Invalid IL code in FSI_0028:whenGuardFailure<int> (int[]): IL_0117: ret       
     
     
      at <StartupCode$FSI_0028>.$FSI_0028.main@ () [0x00000] 
      at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&)
      at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] 
    Stopped due to error
    Dans ce code, j'ai remplacé les opérations d'additions par des tests d'égalités dans la sous fonction et là, c'est le drame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    >type Suit =
    -    | H
    -    | D
    -    | S
    -    | C
    -
    -type PlayingCard = Card of int * Suit
    -
    -let whenGuardFailure cardsArray =
    -    let subFunc v1 v2 =
    -        v1 = v2
    -    match cardsArray with
    -    | [| Card (v1, _); Card (v2, _) |] when subFunc v1 v2 -> printfn "Excellent!"
    -    | _                                                   -> printfn "Bouh!"
    -
    -whenGuardFailure [| Card (10, H); Card (10, D) |];;
    Excellent!
    Dans ce test ci, j'utilise des types sommes et tout se déroule normalement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    >let whenGuardFailure cardsArray =
    -    let subFunc v1 v2 v3 v4 =
    -        v1 = v2 && v2 = v3 && v3 = v4
    -    match cardsArray with
    -    | [| Card (v1, _); Card (v2, _); Card (v3, _); Card (v4, _) |] when subFunc v1 v2 v3 v4 -> printfn "Excellent!"
    -    | _                                                   -> printfn "Bouh!"
    -
    -whenGuardFailure [| Card (10, H); Card (10, D); Card (10, S); Card (10, C) |];;
    System.InvalidProgramException: Invalid IL code in FSI_0013:subFunc@89-4<int> (int,int,int,int): IL_004f: ret       
     
     
      at FSI_0013.whenGuardFailure (.PlayingCard[] cardsArray) [0x00000] 
      at <StartupCode$FSI_0013>.$FSI_0013.main@ () [0x00000] 
      at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&)
      at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] 
    Stopped due to error
    Par contre dans cet exemple, j'ai seulement ajouté des paramètres à la fonction et visiblement il n'apprécie pas

  8. #8
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Merci !

    Pour info, c'est un bug de Mono lié à la génération dynamique de code (reflection.emit) avec les generics. L'équipe de Mono est au courant.

    En attendant, pour contourner le problème, tu peux compiler ton code avec fsc ou ajouter des annotations de type.

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Points : 57
    Points
    57
    Par défaut
    J'ai testé avec une version preview de Mono 2.8 et effectivement c'est corrigé

  10. #10
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Citation Envoyé par Dim Me As New Idiot Voir le message
    J'ai testé avec une version preview de Mono 2.8 et effectivement c'est corrigé
    En effet ! Mais tu risques de rencontrer parfois des "Operation is not supported" (qui disparaitront dans la prochaine mise à jour de F#).

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Points : 57
    Points
    57
    Par défaut
    Merci pour la précision!

    Au fait tu sais si le support complet du langage (tail call opt, ...) a été implémentée dans la prochaine release de Mono ? Je te demande ça parce que la release note n'en fait pas mention.

  12. #12
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Pour les tail calls, il n'y a pas encore eu de changement et je ne sais pas s'il y en aura. Pour le moment, il sont optimisés dans pas mal de cas, mais pas tous (cela dit, sous le .NET de Microsoft, on trouve également des restrictions, surtout en 64 bits, et les specs n'imposent rien).

    Si tu trouves des bugs en compilant avec fsc, n'hésite pas à les signaler. Novell et Microsoft souhaitent tous deux améliorer la compat F#/Mono.

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Points : 57
    Points
    57
    Par défaut
    Bon il semblerait que le support des Tail Call Optimizations soit prévu pour la prochaine version de mono

  14. #14
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Demain, F# (le compilo et la bibliothèque standard) seront publiés sous licence Apache 2.0.

  15. #15
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410

  16. #16
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Points : 57
    Points
    57
    Par défaut
    Quelle bonne nouvelle Mais concrètement qu'est que cela va changer ?

  17. #17
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Tu peux modifier le compilateur, corriger des problèmes dedans ou ajouter de nouvelles fonctionnalités. Tu peux donc faire un fork de F# (et ton fork peut être un logiciel libre, propriétaire ou commercial si tu veux).

    Concrètement, c'est intéressant sur plusieurs niveaux. Beaucoup de gens préfèrent utiliser des logiciels libres, ça peut donc les convaincre d'utiliser F# (la licence était un frein pour certains). F# pourra être diffusé plus facilement, notamment sur les distributions Linux, qui pourront le proposer sans avoir à passer par un site de Microsoft. Si un jour Microsoft fait des "bêtises" ou cesse le développement de F#, n'importe qui pourra poursuivre le développement, ce qui améliore la pérennité. Certaines fonctionnalités pourront être développées, même si elle ne suivent pas les intérêts de Microsoft (un portage pour la JVM par exemple). Si des entreprises ont des besoins spécifiques, elles pourront modifier le compilateur (pour Caml, je sais qu'une entreprise maintient sa propre version du compilateur... mais elle a dû payer pour ça). Enfin, ça peut aussi convaincre des universités à enseigner F#.

  18. #18
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Points : 57
    Points
    57
    Par défaut
    Il y a quelque chose qui me turlupine dans son message :
    After some discussion, we’ve decided to do this via a “code drop” model, where we make available versions of the compiler+library code logically matching each release of the F# language itself. In the F# team, releases of F# are matched to coincide with releases of Visual Studio itself: using this release cadence simplifies our development processes and gives clarity to language versioning. This means the code we are making available today is for the F# 2.0 language, released in April 2010, including the small changes for the MSI tools updates through November 2010. We expect to make matching code drops if/when service pack(s) of Visual Studio 2010 are released, though sometimes it may take a while for us to get that out the door.
    En gros, d'après ce que je comprends, ils vont diffuser que des instantanés des sources du compilateur correspondant aux versions successives du compilateur (2.0, 3.0, etc...) ?

  19. #19
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Oui, leur système de versionning n'est pas public. On ne peut pas accéder au code de développement, il faut attendre la version suivante.

  20. #20
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Points : 57
    Points
    57
    Par défaut
    Une nouvelle version de F# est sortie! Et c'est d'autant plus une bonne nouvelle qu'elle intègre des corrections spécifiques pour Mono

    Il ne reste plus qu'un plugin pour monodevelop et mon bonheur sera complet

Discussions similaires

  1. Visual Studio 2010 et .NET Framework 4.0 disponible en version Bêta
    Par Jérôme Lambert dans le forum Visual Studio
    Réponses: 32
    Dernier message: 03/09/2014, 22h36
  2. Réponses: 119
    Dernier message: 01/02/2011, 22h31
  3. F# sera inclus dans Visual Studio 2010
    Par LLB dans le forum F#
    Réponses: 7
    Dernier message: 16/06/2010, 13h43
  4. Réponses: 8
    Dernier message: 30/08/2009, 10h19
  5. Téléchargez la première CTP de Visual Studio 2010 et du .NET Framework 4.0
    Par Jérôme Lambert dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 31/10/2008, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo