Dans les labos de microsoft, on nous parle de ca :
http://research.microsoft.com/fsharp/fsharp.aspx
Et il ont joué beau jeu : ils avouent que oui c'est bien du pompé de ocaml, que oui on a reprit les supers concept d'inférence de type et le filtrage de motif.
Ce qui m'amuse dans l'histoire, c'est qu'a l'époque ou ocaml était l'étoile montante qui intéressait tout le monde, on discutait dans les couloirs qu'une superbe intégration avait été faite à VisualStudio mais que plus personne ne savait ou elle en était. Je me demande si F# n'en est pas le résultat final.
Bref, si cela peut pousser du monde a faire du fonctionnel bien comme il faut, il y a des chances que ça forme du monde et redonne de l'intérêt a ocamel (a qui la principale barrière est, je le rappelle, l'apprentissage - penser fonctionnel n'a rien a voir avec l'impératif, ni l'objet).
Enfin, si quelqu'un a des informations issues des coulisses de l'inria a ce sujet, je vous invite a les partager, parce que F# va jusqu'à être compatible avec le bytecode ocaml, ce qui titille mon petit doigt.
# lobbying
Posté par B16F4RV4RD1N . Évalué à 7.
http://www.recherche.gouv.fr/discours/2005/inriamicrosoft.ht(...)
ainsi les deniers publics de la France contribuent au développement du "framework" .NET de microsoft.
Ils auraient mieux fait de s'associer avec Novell / Red Hat / IBM / Mandriva et co pour promouvoir le développement de Ocaml sur les unix libres.
Du coup cela me donne envie d'en savoir un peu plus sur la programmation fonctionnelle :
http://fr.wikipedia.org/wiki/Programmation_fonctionnelle
mais je dois avouer que je ne comprends pas tout, déjà que j'ai du mal avec l'impératif...
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: lobbying
Posté par TImaniac (site web personnel) . Évalué à 2.
Bref si tu veux mon avis, avec ou sans ce partenariat, F# existe.
[^] # Re: lobbying
Posté par pasBill pasGates . Évalué à 4.
En fait MS pourrait faire des pots de Nutella 100% bio et avec des produits achetes a des prix decents aux producteurs de pays pauvres que certains y trouveraient toujours qqe chose a redire.
[^] # Re: lobbying
Posté par lezardbreton . Évalué à 5.
[^] # Re: lobbying
Posté par pasBill pasGates . Évalué à 2.
Remarque qu'IBM pourrait liberer un tas de code en OpenSource, arreter de mettre des patentes sur tout ce qui existe(devine qui detient le plus grand nombre de patentes sur cette petite planete...), ... mais bizarrement eux ce sont des heros parce que le libre leur convient dans 2-3 cas et qu'ils le poussent la tout en l'ignorant totalement partout ailleurs.
[^] # Re: lobbying
Posté par mobutu . Évalué à 8.
Rien n'est tout blanc ni tout noir, c'est plein de nuances de gris. Ca n'empêche pas IBM d'être plus proche du gris clair et Microsoft du gris sombre. C'est normal de préférer s'allier avec IBM étant donné qu'ils ont déjà posé une certaine contribution. Qu'est-ce que Microsoft a fait pour le libre ? dis le moi.
[^] # Re: lobbying
Posté par pasBill pasGates . Évalué à 2.
[^] # Re: lobbying
Posté par Cali_Mero . Évalué à 4.
[^] # Re: lobbying
Posté par pasBill pasGates . Évalué à 2.
[^] # Re: lobbying
Posté par fredix . Évalué à 2.
[^] # Re: lobbying
Posté par pasBill pasGates . Évalué à 3.
[^] # Re: lobbying
Posté par fredix . Évalué à 3.
[^] # Re: lobbying
Posté par Nicolas Schoonbroodt . Évalué à 0.
Imaginons que MS ait N brevets et IBM en ait N+2.
MS dit : Sur nos N brevets, vous pouvez en utiliser N sans qu'on vous attaque. IBM répond : Vous pouvez en utiliser N+1. Avec ton raisonnement IBM est le gentil, et MS, pour être plus gentil, doit déposer plus de brevets.
Réfléchit deux secondes.
PS : ce que j'aime bien dans les débats avec pBpG c'est que les gens qui débattent avec lui donnent les batons pour se faire battre, alors que lui est très prudent et intervient souvent très justement. Enfin c'est mon avis.
[^] # Re: lobbying
Posté par B16F4RV4RD1N . Évalué à 2.
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: lobbying
Posté par Nicolas Schoonbroodt . Évalué à -3.
カリメロ : IBM gentil ils n'utiliseront pas leurs brevets
pBpG : Non, 500 seulement
fredix : 500 contre 0, IBM gentil
pBpG : MS 30
fredix : 30 < 500 CQFD
moi : N < N+1, et pourtant...
toi : oui mais MS a plein de trucs à la con
Alors sur la forme :
1. tu es complètement hors du sujet de ce fil
2. la prochaine fois, lit le fil auquel tu réponds
et sur le fond :
3. prouve que le pire brevet de IBM n'est pas pire que le pire de MS
4. prouve qu'IBM n'a aucun brevet sur un truc qui existait déjà ailleurs avant
Merci.
[^] # Re: lobbying
Posté par tene . Évalué à 2.
--> []
[^] # Re: lobbying
Posté par TImaniac (site web personnel) . Évalué à 2.
http://www.microsoft.com/interop/osp/default.mspx
[^] # Re: lobbying
Posté par PachaFonk . Évalué à 6.
Ton raisonnement est à mon avis un peu vrillé :
Tu nous dis : Si MS était "lesgenti'" .. on continuerait à dire qu'ils sont Lémaichan... Ce qui prouve qu'ils sont "lesgenti" CQFD...
Mémé, ortils, toussa...
# Commentaire supprimé
Posté par Anonyme . Évalué à 10.
Ce commentaire a été supprimé par l’équipe de modération.
# apprendre la programmation fonctionnelle
Posté par ɹǝıʌıʃO . Évalué à 2.
[^] # Re: apprendre la programmation fonctionnelle
Posté par Anonyme . Évalué à 6.
Personnellement, je trouve les langages fonctionnels inutilisables, et même si je troll pas mal sur ce sujet, ça vient surtout du fait que je ne suis pas foutu de m'y faire. Certains diront que je suis un mauvais programmeur, mais rien à taper.
Ce que je reproche *beaucoup* à l'université paris sud (eh oui, si je ne dis pas de bêtise, j'ai été l'un de vos élève l'an dernier ou il y a deux ans, mais je ne peux confirmer, ma mémoire des noms étant inexistante, par contre vous devez vous souvenir du mien), c'est le comportement radical des profs de caml qui essaient de nous convertir à l'ocaml en nous le présentant comme la solution miracle, le langage quasi parfait, qui écrase cette antiquité de langage C. Nous n'oublierons bien sûr pas que les profs de java font de même avec leur langage favoris (et un prof de maths m'a soutenu que les sondes martiennes utilisaient le java, ce qui avec des proco de - de 25 Mhz m'étonnerait énormément (http://www.cpushack.net/space-craft-cpu.html)).
D'ailleurs j'ai remarqué qu'à chaque discussion sur ce sujet avec un prof, le résultat était le même: «tu dis ça parce que tu ne connais pas, tu verra plus tard».
Bah je ne sais pas pour plus tard, mais en attendant, ce langage préhistorique qu'est le C m'auras permis de coder un window manager, et de travailler sur un server de jeu online multi-threadé (je ne compterai pas les milliers de lignes de code de bidouilles). Au passage, il aura aussi servis à coder Linux, BSD, Apache, GCC (qui compile également du C++, du java, du fortran...), xorg, une bonne part des jeux vidéos existants (domaine partagé avec le C++, et où les autres langages sont absents), et j'en passe.
Comme quoi, pour une antiquité, je trouve qu'il vieillit bien (et contrairement à eclipse (java) ne prend pas des centaines de Mo de RAM à chaque lancement)
[^] # Re: apprendre la programmation fonctionnelle
Posté par wahnby . Évalué à 2.
[^] # Re: apprendre la programmation fonctionnelle
Posté par gasche . Évalué à 5.
> même chose dans les langages fonctionnels (lisp, ocaml, F#
> donc), les langages objets (Java, ruby,
> je-ne-citerai-pas-C++-qui-fait-bondir-les-fanas-de-l'objet...), et
> les langages impératifs (C...); c'est avant tout une question de
> goût, goût qui dépend de la façon de penser du programmeur,
> de sa manière d'aborder les problèmes.
Il me semble que l'on peut effectivement faire la même chose. La question c'est "comment" ?
Un if/then/else en ocaml ça n'a rien à voir avec un if {} else {} en C. Le principe est totalement différent (d'un côté on a une valeur/expression, de l'autre on a plus ou moins des instructions/statement) et pourtant on peut faire les mêmes choses.
C'est ce genre de différences qui est, à mon avis, vraiment fondamental. Effectivement, on a deux choses qui à la base sont faites pour correspondre à la même idée (programmer c'est à mon avis formuler sa pensée de manière à ce qu'un ordinateur la comprenne), et qui au final permettent de faire les mêmes choses (c'est pas le langage qui décide de ce qu'on fait, mais nous), mais la différence entre les deux reste importante/intéressante.
C'est vrai pour OCaml, et j'imagine que c'est encore plus vrai pour les langages purement fonctionnels; en tout cas OCaml incorpore de nombreux traits impératifs (et je pense que c'est un avantage), mais qui sont intégrés dans le mécanisme global du langage, fonctionnel.
C'est peut-être pour ça que les gens ont autant de mal avec les langages fonctionnels. Quand on met un codeur en C devant un cours de ocaml, pour ce que j'en ai observé, leur premier réflexe est de se dire "comment on fait une boucle for, comment on incrémente une variable, c'est quoi exactement la syntaxe de if/else, etc.". Forcément, si on retient "au lieu de if (prout) { foo(); } else { bar(); } on met if prout then foo() else bar()", on ne pourra pas comprendre pourquoi ça fait des trucs bizarres quand on met juste une valeur à la place des foo() et bar(), et on se dira "décidément, je n'arrive pas à comprendre les langages fonctionnels". Sans parler de la syntaxe de déclaration de fonction/valeurs qui a l'air complètement hallucinante.
Dans ce cas là j'aurais tendance à dire que ce n'est ni la faute du langage, ni celle du codeur, mais celle de la méthode. Il faut arrêter de commencer un nouveau langage par ce qu'on connaît déjà, quitte à fouler au pieds la logique de base du langage si elle est en contradiction avec les autres langages que l'on connait : il faudrait débuter par ce qui est fondamental, et différent.
[^] # Re: apprendre la programmation fonctionnelle
Posté par fmaz fmaz . Évalué à 1.
[^] # Re: apprendre la programmation fonctionnelle
Posté par GTof . Évalué à 2.
On peut faire exactement les mêmes programmes dans tout ces langages, ils sont tous Turing complets. En revanche pour un problème donné, certains langages sont plus adaptés que d'autres.Pour le concours de programmation ICFPC [1], on devait programmer une machine virtuelle. Nombreux sont ceux qui ont commencé avec leur langage préféré puis se sont rabattu vers le C (où du moins ont réécris une grande partie en C pour l' interfacer avec leur langage). En effet les autres langages donnaient des machines virtuelle bien trop lentes.
Le problème était clairement de nature impérative : gérer la mémoire à la main, interpréter les séquences d'instruction, etc ... En C, un malloc puis une gestion directe de la mémoire par des pointeur étaient parfait alors que dans les langages qui gèrent eux même la mémoire il fallait le simuler par une structure de donnée, d'où un surcoût. Le transtypage entre entiers et pointeurs était aussi très pratique en C. Bref pour CE problème le choix du C étaient judicieux.
Notons aussi que pour certains langages, un bon nombre de leur bibliothèques viennent d'un interfaçage avec une bibliothèque en C comme GTK, SDL, etc ...
Toutefois on ne code pas de machine virtuelle tous les jours et rares sont les programmes qui demandent de gérer à la main la mémoire autant qu'une VM. On a plus souvent besoin de structures de données (listes, arbres, etc ...) et là utiliser une implémantation de ses structures en C ne sera pas plus efficace qu'en fonctionnel, object, ...
Utiliser des langages de haut niveau à de nombreux avantages : gestion automatique de la mémoire, typage, objects, exceptions, ordre supérieur, etc ... Ca évite des bugs, les programmes sont plus faciles à lire et à écrire. Certes c'est aussi faisable en C, mais simuler des des exception en C ne sera jamais aussi simple qu'un "try ... with ..." en OCaml et pas forcément plus efficace.
Un serveur web ou un window manager n'ont pas de contraintes spécifiques sur la gestion mémoire, ils peuvent être codés aussi efficacement en haut niveau, la facilité en plus. Pour les jeux, l'approche de Slune est intéressante : le moteur graphique en C pour les besoin en performance et le reste du jeu en python pour les facilités du langage.
[1] http://icfpcontest.org/
[^] # Re: apprendre la programmation fonctionnelle
Posté par mobutu . Évalué à 2.
Pourquoi "l'approche de slune" ?
Ca se fait depuis très longtemps. J'ai vu passer des jeux, entre autres, avec des bouts de lisp pour l'un, des bouts de lua pour l'autre, et même plus fort, des jeux avec un interpreteur crée exprès pour le jeu et un langage adapté. Bien sûr, selon les calculs mis en jeu, il reste quand même une belle partie de C/C++, et pas que pour le graphisme.
Les jeux d'aventure sont les plus gros utilisateurs de script, et ça se comprends. (à part le graphisme, y'a rien qui fasse hurler une becanne dans un jeu d'aventure.. et encore, les graphismes dans la majorité des jeux d'aventure restent modestes.)
[^] # Re: apprendre la programmation fonctionnelle
Posté par Mildred (site web personnel) . Évalué à 3.
J'espère que tu ne veux pas dire un truc du genre int entier = (int) monpointeur car c'est MAL. Rien ne te garantit sizeof(int) == sizeof(void*)
[^] # Re: apprendre la programmation fonctionnelle
Posté par ɹǝıʌıʃO . Évalué à 3.
On peut faire la même chose avec tous ces langages, au moins en théorie, si l'on en croit Church et Turing. C'est une excellente raison pour choisir celui qui convient le mieux à la tâche à réaliser : C pour écrire un pilote de carte graphique, Fortran pour exploiter au mieux une grosse machine parallèle à mémoire partagée (le langage est horrible mais comme il est très utilisé par cette communauté, c'est pour lui qu'on a des compilateurs qui profitent pleinement du matériel), Prolog lorsque le problème s'exprime facilement sous forme déclarative, Lustre pour contrôler le système de sécurité d'un réacteur nucléaire, Caml pour le traitement de données structurées (langages, graphes, etc.). D'où l'intérêt d'enseigner plusieurs approches de la programmation. On n'est pas obligé d'aimer Caml, pas plus que Prolog ou Lustre, mais il faut au moins les connaître, sans quoi on manque quelque chose.
Au-delà du langage, c'est l'approche qui compte vraiment. Un exemple en est gcc : comme il doit être capable de s'auto-compiler, il doit impérativement :) être écrit en C. Pourtant, la principale nouveauté de la version 4 est le passage à un nouveau modèle de représentation du code intermédiaire appelé tree-ssa. Ce modèle est directement issu de l'approche fonctionnelle de la programmation, où on s'intéresse à différentes transformations sur les données structurées. Pour gcc, les transformations utilisées servent à optimiser le code. C'est ce genre d'exemples qui mène à des boutades du style "C (ou C++, ou autre chose) est le langage fonctionnel du futur".
C, un langage porté à bout de bras par le succès d'Unix, est un cas à part. Il bénéficie d'une gigantesque inertie : comme "tout" est écrit en C et que "tous les systèmes" ont un compilateur C, "tout le monde" apprend C et donc programme en C. Je ne sais plus qui remarquait que C n'est pas vraiment portable mais plutôt porté : on s'arrange pour que ça marche, puisqu'il le faut. À l'origine il était proche du matériel : on envoie au processeur une séquence d'instructions à exécuter, une par une, les données étant supposées disponibles. Très bien... pour une machine des années 1980. Maintenant nous sommes en 2006 et les machines ne fonctionnent plus du tout de cette manière, mais la base installée est tellement énorme et les progrès en traitement des langages tels que l'on adapte les compilateurs et on utilise des bibliothèques ou des services fournis par système (création et contrôle de processus) plutôt que réécrire les programmes. Personne ne sait si cette tendance va durer ou si d'autres langages vont s'imposer. Ce qui est sûr, c'est que chacun va pouvoir continuer de faire ce qui lui plaît. Pour ma part j'utilise généralement Caml quand j'ai quelque chose à écrire, mais ça ne m'empêche pas de garder de l'intérêt pour l'assembleur x86.
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 2.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: apprendre la programmation fonctionnelle
Posté par Vivi (site web personnel) . Évalué à 2.
C'est pas exactement ça. Le principe des langages fonctionnels est de travailler avec des valeurs (non modifiables) et non avec des variables (au sens d'emplacement mémoire) modifiables. Le SSA impose qu'une variable ne soit écrite une seule fois, d'où la similarité avec les langages fonctionnels.
cf. Andrew W. Appel, SSA is Functional Programming http://www.cs.princeton.edu/~appel/papers/ssafun.ps
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 1.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 1.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: apprendre la programmation fonctionnelle
Posté par Vivi (site web personnel) . Évalué à 1.
Bof non je trouve pas. Le paragraphe que tu cites s'appelle "What functional programmers can learn from SSA" et s'adresse donc aux gens qui font du fonctionnel ; ça explique justement que les notations utilisées par la communauté SSA peuvent être utile pour les programmeurs de langage fonctionnels. Ce n'est donc pas un "détournement", c'est juste identifier un aspect du SSA qui peut être profitable dans un autre contexte. Ce n'est pas le propos de l'auteur de réduire le SSA à des flowcharts.
Le SSA n'est pas plus qu'une représentation possible d'un programme
oui et ? L'auteur ne dit pas le contraire.
Enfin bon le but de l'article est de montrer l'équivalence entre ces deux notions: transformation SSA et programme fonctionnel. Pas que la technique SSA est issue du fonctionnel.
Quand une même notion est découverte indépendemment par des approches différentes il y a souvent des choses intéressantes à tirer de "l'autre approche".
[^] # Re: apprendre la programmation fonctionnelle
Posté par ɹǝıʌıʃO . Évalué à 2.
[^] # Re: apprendre la programmation fonctionnelle
Posté par Mark Havel . Évalué à 0.
[^] # Re: apprendre la programmation fonctionnelle
Posté par Dr BG . Évalué à 4.
[^] # Re: apprendre la programmation fonctionnelle
Posté par ɹǝıʌıʃO . Évalué à 2.
[^] # Re: apprendre la programmation fonctionnelle
Posté par Frédéric Péters (site web personnel) . Évalué à 1.
problème. Là, ton exemple, il m'apparait carrément plus adapté
à un langage de script qu'à ocaml.
import os
for filename in sorted(os.listdir(os.getcwd())):
print filename
[^] # Re: apprendre la programmation fonctionnelle
Posté par ɹǝıʌıʃO . Évalué à 2.
[^] # Re: apprendre la programmation fonctionnelle
Posté par Vivi (site web personnel) . Évalué à 2.
Array.map print_endline (Sys.readdir (Sys.getcwd ()))
[^] # Re: apprendre la programmation fonctionnelle
Posté par ɹǝıʌıʃO . Évalué à 1.
# Un peu déçu
Posté par gasche . Évalué à 3.
En gros, je trouve ocaml vraiment bien, .NET je suis plutôt sceptique (mais j'essaie de ne pas avoir de préjugés), et j'ai tendance à trouver qu'il y a plus de trucs biens du Ocaml en moins que de truc supers du .NET en plus (forcément, eux je les ai pas vu).
Je me base sur le comparatif http://research.microsoft.com/fsharp/manual/ml-compat.aspx
Je trouve ça vraiment dommage : les labels c'est super cool (même si je ne sais pas encore m'en servir avec aisance) et le reste aussi.
Ça par contre, c'est plutôt intéressant.
Ça c'est super dommage.
Si on veut vraiment contraindre, il faut mettre les contraintes sur les arguments dans le .ml (let fun (arg: type) = ...)). C'est embêtant.
Paf.
(surtout qu'à vue de nez, le code pour passer de F# à C# n'est pas monstrueusement plus pratique/sympathique que celui pour passer de Ocaml au C. Mais n'ayant utilisé aucun des deux, je ne sais pas grand chose)
Pour résumer, je dirais qu'à mon avis le F# est vraiment diminué par rapport au OCaml, et que pour valoir vraiment le coup il faudra que les facilités apportées par .NET soient importantes.
Il faudrait aussi comparer l'efficacité d'un programme compilé avec le compilo Ocaml et un équivalent F# (Il doit bien y avoir un JIT ou quelque chose comme ça, non ?).
[^] # Re: Un peu déçu
Posté par Vivi (site web personnel) . Évalué à 1.
Bah déjà tu peux comparer la vitesse d'exécution du bytecode OCaml et celle du programme F# sur le CLR.
Enfin c'est intéressant comme comparatif, ça casse un peu le mythe du "on peut implémenter n'importe quel langage avec .NET".
Sinon on peut citer OCamIL comme projet similaire: http://www.pps.jussieu.fr/~montela/ocamil/ modifier le compilo OCaml pour lui faire générer du bytecode pour .NET.
[^] # Re: Un peu déçu
Posté par TImaniac (site web personnel) . Évalué à 3.
L'intérêt, c'est qu'un wrapper écrit en C# est portable (pas de code natif, rien à recompiler en changeant de plateforme).
Sinon c'est clair que F# n'est pas aussi puissant que OCaml et aussi rapide. Alors quel est l'intérêt de F# ? La réponse est dans leur FAQ, que je vais essayer de traduire :
Quels sont les objectifs de F# ?
Une façon de voir les choses est de considérer que F# tente de résoudre les 7 problèmes majeurs décris dans la publication classique de Wadler : "Pourquoi personne n'utilise les langages fonctionnels ?" : Bibliothèques, Portabilité, Disponibilité, Facilité de déploiement, Outils, Entraînement et Popularité. Parmi ceux ci, F# résoud le problème des bibliothèques (en donnant accès immédiatement à des centaines de bibliothèques .NET de haute qualité ne nécessitant pas de wrapper), la portabilité (le bytecode .NET est portable, par exemple le projet Mono en donne une implémentation sur de nombreuses plateformes), déploiement (les assemblies .NET sont un excellent système de déploiement) et les outils (les outils pour .NET marchent également avec F#).Les autres problèmes sont en partis résolus par le fait que F# a un coeur conçu de la même manière que celui d'Ocaml, une implémentation de langage fonctionnel populaire pour lequel un bon nombre de document d'apprentissage sont disponibles, ainsi que pour la plateforme .NET où l'on trouve de nombreux document d'apprentissage sur le web.
En gros F# n'apporte pas grand chose au langage proprement dit par rapport à OCaml (comme tu le soulignes, la grammaire est la même, en moins bien supporté), mais apporte de nombreux atouts sur tout l'environnement. Il est ainsi facile d'écrire un module d'un projet .NET en F# sans que les problèmes techniques d'intégration habituels entre environnement différents apparaissent.
[^] # Et si on partagait?
Posté par cryx . Évalué à 0.
Je n'aime pas la philsophie actuelle de MS.
Oui il commence à partager mais ils restent dans leurs coins, n'ayant aucun scrupule à réécrire des softs déjà existants au lieu d'aider les développeurs.
Pour anecdote:MS a "pondu" Sandcastle, tool permettant de créer du help compilé (versions: 1.0 et 2.0) sous Windows sur base d'un XML généré avec VS.net...
Sandcastle est annoncé comme le grand remplaçant de NDoc.
Bref, NDoc c'est fini car le développeur en a eu marre de perdre son temps à développer en solo...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.