|
Publicité ' | ||||||||||||||||||||||||
|
|
#81 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
Citation:
un peu des deux... par défaut non, mais X11 (donc certainement XWindow) est "activable" mais plus lent (enfin, si j'ai bien retenu... je n'ai pas programmé avec MacOS X, le MacOS 9 de ma prépa m'en a écoeuré à jamais )
|
|
|
|
00
|
|
|
#82 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
-- Jedaï |
|
|
|
00
|
|
|
#83 |
|
Invité régulier
![]() Inscription : juin 2006 Messages : 6 ![]() |
Désolé, je ne suis pas très habitué de genre de forum évolué. Je ne connais que celui d'Anubis language. Et je viens de comprendre que MP veut dire "Mail Privé". C'est très évident lorsqu'on le sait.
|
|
|
00
|
|
|
#84 | |
|
Futur Membre du Club
![]() Inscription : septembre 2004 Messages : 50 ![]() |
Citation:
|
|
|
|
00
|
|
|
#85 | |
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Citation:
À court terme c'est une bonne solution. À plus long terme, ça serait dommage de ne pas bénéficier de l'interface graphique de Mac. |
|
|
|
00
|
|
|
#86 |
|
Membre éclairé
![]() ![]() Inscription : août 2005 Messages : 417 ![]() |
On peut facilement se faire une idée de ce qui est nécessaire comme primitives (tant graphiques qu'autres) dans la machine virtuelle d'Anubis. Il suffit de consulter le fichier 'anubis/library/predefined.anubis', où elles sont toutes déclarées. Le symbole £avm permet d'écrire des instructions (et appels système) de ladite machine. On pourra voir qu'il n'y a pas des centaines de fonctions.
__________________
Ma page maths. |
|
|
00
|
|
|
#87 |
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 513 ![]() |
Quel est le type de machine abstraite de Anubis 1.7: SECD, CAM, FAM, ZAM ?
Je recommande la lecture de ce document: http://pauillac.inria.fr/~xleroy/talks/zam-kazam05.pdf La phrase clé étant: "Curried function application is costly in the CAM". |
|
00
|
|
|
#88 | |||||||
|
Membre éclairé
![]() ![]() Inscription : août 2005 Messages : 417 ![]() |
Citation:
Par ailleurs, il se trouve que je connais très bien la CAM, pour la raison que je l'ai vue naître à Paris 7, et que j'ai participé à sa diffusion. En effet, quand en 1984 j'ai passé ma thèse d'état en topologie algébrique, j'ai demandé à Guy Cousineau un sujet de deuxième thèse (obligatoire pour une thèse d'état), et il m'a proposé ... la CAM, qu'il venait de créer avec Pierre-Louis Curien. Par la suite, c'est moi qui l'ait fait connaître aux logiciens de Paris 7, lors d'un exposé du séminaire de logique Krivine-Girard. Quelques jours auparavant, je rencontre Jean-Louis Krivine dans une discussion, et comme il ne manque pas d'humour, il me dit: alors au prochain séminaire, tu nous refiles la CAM... Voila pour la petite histoire. Par contre, je ne connaissais pas les autres machines citées par SpiceGuid. Je me suis un peu documenté pour voir de quoi il en retourne, au moins en ce qui concerne la ZAM, et la ZAM2. Pour ce qui est de la machine virtuelle d'Anubis, crée en 2000, donc longtemps après ma rencontre avec la CAM, j'ai eu le temps de repenser la chose et de faire quelques optimisations. Le résultat semble être assez proche de la ZAM2. Précisément, voici comment ça marche. Le compilateur Anubis transforme un terme (en fait une lambda-expression) de la forme: en un bout de code qui fabrique une seule fermeture. Cette fermeture est construite (à l'exécution donc) par allocation d'un seul segment de mémoire, qui contient les informations suivantes:
En fait, la principale des raisons pour lequelles je voulais absolument n'embarquer dans le micro-contexte que les valeurs des variables vraiment utilisées par la fonction n'était pas une affaire de performances, mais une affaire de garbage-collector. En effet, en Anubis (mais pas seulement en Anubis), quand un fichier, une connexion réseau, une base de données, etc... est ouverte, on n'a jamais à se préoccuper de la fermer. D'ailleurs, il n'y a pas d'instruction pour cela. C'est le garbage-collector qui ferme lui-même ces objets en même temps qu'il désalloue le segment qui les contient quand le compteur de référence tombe à zéro. Ainsi donc, supposons que le contexte local contienne un tel objet (disons une connexion réseau), et que dans ce contexte on fabrique une fonction à la volée qui ne fait pas référence à cette connexion mais qui survit beaucoup plus longtemps que la connexion. Si tout le contexte était embarqué, la connexion ne serait jamais fermée avant que cette fermeture elle-même ne disparaîsse, ce qui évidemment pose un gros problème, car les deux choses (la connexion et la fonction) sont sans rapport l'une avec l'autre, et des connexions pourraient rester beaucoup trop longtemps ouvertes, voire indéfiniment. Bien entendu, ce système a nécessité une duplication des instructions peek qui permettent d'aller chercher une valeur dans la pile à une profondeur donnée, car ces valeurs sont soit directement dans la pile, soit dans le micro contexte d'une fermeture qui se trouve elle même dans la pile. Pour une valeur se trouvant dans un micro-contexte, il faut deux nombres en opérandes du peek (qui dans ce cas s'appelle d'ailleurs micro_peek), un pour la profondeur dans la pile, et l'autre pour l'offset dans le micro-contexte. On peut d'ailleurs constater tout cela de visu. Il suffit en effet de compiler un source Anubis avec l'option (non documentée) -sc (sc pour 'symbolic code'). Le compilateur produit alors pour chaque module un fichier d'extension .sc qui est une version lisible du fichier d'extension .adm correspondant. Quand le module fabrique des fermetures, on a des représentation de la pile qui montrent un micro-contexte. Les profondeurs de piles sont numérotées avec des entiers et les positions des valeurs des micro-contextes sont numérotées avec deux entiers séparés par un point, comme dans l'exemple suivant: D'abord un petit source Anubis: Code :
Code :
Code :
Un peu plus loin, on voit une utilisation de l'instruction 'micro_peek', dont l'opérande "prefix" n'existe en fait pas (il est juste pour la décoration du fichier .sc) et dont les deux autres opérandes sont la profondeur dans la pile et l'offset de 'prefix' dans le micro-contexte (entre temps, la profondeur de la fermeture dans la pile a changé: elle est passée de 4 à 3). Je compte conserver ces principes pour Anubis 2 (ça marche très bien et il semble que c'est assez optimal). Toutefois, si vous avez des idées pour optimiser encore, je suis preneur bien sûr... Une dernière remarque: ceci ne remet pas en cause le rôle joué par les catégories, qui peuvent tout aussi bien modéliser ce système que la CAM.
__________________
Ma page maths. |
|||||||
|
|
00
|
|
|
#89 |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
En ce qui concerne les fonctions curryfiées dans la ZAM, il me semble qu'il y a une optimisation effectuée "après coup" pour supprimer par le mécanisme de "tail-call elimination"
pour ce qui est de la CAM, il me semble que l'optimisation consistant à ne pas systématiquement embarquer l'environnement complet a également été effectuée... si j'ai bien suivi le cours que nous a fait Michel Mauny
|
|
|
00
|
|
|
#90 | |
|
Membre Expert
![]() ![]() Inscription : septembre 2006 Messages : 1 036 ![]() |
Si je me souviens bien, les fermetures ne sont plus chaînées dans la machine virtuelle de OCaml : d'ailleurs, la CAM, c'est du passé.
Citation:
|
|
|
|
00
|
|
|
#91 |
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 513 ![]() |
La SECD, CAM et FAM sont toutes dépassées (elles créent toutes trop de fermetures intermédiaires pour les appels de fonction curryfiées), dans les faits il n'existe plus que deux VM:
* la ZAM pour les langages strictes (ML,Anubis) * la G-machine pour les langages paresseux (Miranda,Haskell) Hors sujet: Microsoft est à la fois un membre du consortium OCaml et l'employeur de Simon Peyton Jones (l'architecte de la G-machine). Est-ce que Simon P. Jones est impliqué dans F# ? Enfin les compilateurs Scheme préfèrent la compilation CPS (Continuation Passing Style). En tout cas, il est impressionnant que Anubis soit aussi près d'être compétitif sur tous les fronts, malgré le peu de ressources humaines dont le projet dispose (si on compare à l'INRIA ou à Microsoft). |
|
00
|
|
|
#92 | |||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
Citation:
Citation:
Citation:
je ne peux pas juger... je ne l'ai pas encore testé la remarque que je ferai sera plus au niveau fonctionnalités... a-t-on autant de fonctionnalités, et de possibilités d'interfacer des librairies écrites dans d'autres langages (très chiantes à refaire, ou extrêment performantes) ? il faut quand même se dire que les langages ayant un grand pouvoir expressif le payent parfois aux niveaux des optimisations qu'il est possible de leur appliquer (mais c'est un autre débat) |
|||
|
|
00
|
|
|
#93 | |||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Citation:
Citation:
|
|||
|
|
00
|
|
|
#94 |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
au passage, je ne sais pas si l'équipe qui développe le "coeur" de OCaml est si nombreuse que cela... http://gallium.inria.fr/
sachant que dans cette équipe, il y a aussi du monde qui bosse sur les projets annexes comme menhir ou cduce certes, il y a plein de monde qui utilisent ocaml à l'inria, mais cela ne "compte" pas, sinon on peut mettre tous les développeurs .Net dans les contributeurs de F# (ça s'interface quoi )
|
|
|
00
|
|
|
#95 | |
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 513 ![]() |
Citation:
Cette transformation est très bien décrite dans le document de Peyton Jones sur la G-machine. |
|
|
00
|
|
|
#96 |
|
Membre éclairé
![]() ![]() Inscription : août 2005 Messages : 417 ![]() |
Bonjour à tous.
Quelques remarques inspirées par les posts précédents.
__________________
Ma page maths. |
|
|
00
|
|
|
#97 | |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Ils ont choisi de se baser sur Caml plutôt que de créer un langage de toute pièce. C'est certes discutable, mais ça offre beaucoup d'avantages : le bootstrap est super simple, vu que F# a d'abord été écrit en Caml ; l'ensemble des bibliothèques Caml peut être réutilisé beaucoup plus facilement ; pour les utilisateurs, c'est aussi plus simple que d'apprendre un tout nouveau langage. Donc, plutôt qu'un manque d'imagination, c'est surtout une question d'interopérabilité (et on ne va pas reprocher ça à Microsoft :p) avec Caml et .NET en même temps. Par ailleurs, ce n'est absolument pas une simple copie. Tout le système OO est différent, et il y a pas mal de différences et d'ajouts (que j'ai déjà cités plusieurs fois dans le forum). Le langage progresse vite et des innovations sont faites. Par exemple, l'implémentation des active patterns (pattern matching extensible) est extrêmement intéressante. En ce moment même, ils ajoutent des opérateurs de slicing (e.g. let s = "abcdef" in s.[2,4]) qui peuvent surchargés et étendus pour n'importe quel type (en lecture, ou en assignation (s.[2,3] <- s.[4,5])) ; ils réfléchissent aussi à l'intégration de mixins dans le langage. Si on a pu leur reprocher un manque d'imagination au début, ce n'est plus le cas depuis un an. Comme je l'ai dit aussi, ils ne sont que 2 à concevoir le langage (plus quelques personnes qui aident ponctuellement), et F# n'a pas pour but de gagner de l'argent. Je trouve finalement le résultat plus que correct et n'ai jamais senti ça comme un manque d'imagination. |
|
|
|
00
|
|
|
#98 |
|
Membre éclairé
![]() ![]() Inscription : août 2005 Messages : 417 ![]() |
@LLB Il est clair que tu connais F# beaucoup mieux que moi, et que as raison. Malgré cela, j'ai été interpellé par le fait que le 'core language' F# est pratiquement Caml à la virgule près, sans pourtant en porter le nom (ou un nom dérivé de Caml). Caml est-il seulement cité dans les documents MicroSoft ? Je trouve cela un peu choquant. Je ne sais pas ce qu'en pensent les gens de l'équipe Caml.
Par contre, compte tenu de la visibilité de MicroSoft, si cela pouvait faire monter le pourcentage de développeurs (et de décideurs) utilisant les langages fonctionnels, ce serait une bonne chose. Il valait peut-être mieux d'ailleurs pour MicroSoft, choisir un langage éprouvé comme Caml, plutôt que de tenter d'en créer un nouveau (sur quelles bases d'ailleurs). C'est de bonne politique.
__________________
Ma page maths. |
|
|
00
|
|
|
#99 | |||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Citation:
Ca me semble assez clair. Je comprends aussi tes craintes, j'ai eu les mêmes quand j'ai découvert F#. Mais force a été de constater que j'ai été très agréablement surpris et que Microsoft est remonté dans mon estime grâce à ça. J'utilise quotidiennement F# depuis 6 mois, je suis en contact régulier avec Don Syme (son concepteur) et je dois reconnaitre qu'il fait du bon travail (tout comme les gens de l'INRIA, ou comme toi, de ce que j'ai vu). C'est assez loin de l'image de Microsoft que j'avais au départ. Citation:
|
|||
|
|
00
|
|
|
#100 | |
|
Membre éclairé
![]() ![]() Inscription : août 2005 Messages : 417 ![]() |
Citation:
__________________
Ma page maths. |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com