Sinon, il y a la logithèque, je suppose qu'elle est aussi présente dans mint. Dans toutes les distributions GNU/Linux moderne, il y a des centaines voir des milliers de logiciels qui peuvent être installés en quelques cliques.
C'est plus « naturel » comme comportement, main étant de type IO (), l'inférence de types remonte jusqu’à head et le trouve de type IO () aussi, et donc l’évaluation de return () est stricte (love en a besoin).
L'optimisation de queue consiste à simplement mettre à jour les arguments de des argument dans la pile et à faire un jump sur la première instruction de la fonction au lieux de les empiler une nouvelle fois et de faire un call.
Là, il n'y a pas une fonction, mais trois. C'est pas possible de faire tourner ça sur place (il n'y a qu'un seul sommet de pile). Sauf si gcc remarque que ce code est compilable sans récursion, ce qu'il fait (gcc 4.7 avec -O2, les fonctions a, b et c sont là pour l’empêcher « d'optimiser » le programme en "while(1);"
head:subq$8,%rspxorl%eax,%eaxcallcaddq$8,%rspjmplove#au lieu de faire un appel récursif. blood:subq$8,%rspxorl%eax,%eaxcallbaddq$8,%rspjmpheadlove:subq$8,%rspxorl%eax,%eaxcallaaddq$8,%rspjmpblood
Quand on a renoncé à contrôler la version du logiciel exécutée sur sa machine, effectivement, c'est mort (la régression s'est faite au moment de ce renoncement).
Quand la mise à jour d'un logiciel sort et qu'elle apporte des régressions majeures, on garde la vielle version. Pourquoi ne pas généraliser cette technique d'une efficacité stupéfiante ?
Il y a plein de personne dans une salle, l'une d'elle sort, attend un peu et revient, et questionne ensuite les autres pour savoir ce qu'ils se sont raconté
En physique classique : Les gens resté dans la salle se raconte une histoire et répondent ensuite aux question de l'expérimentateur
En physique quantique : Les gens resté dans la salle ne se racontent rien. Quand l'expérimentateur pose des questions, ils répondent ce qu'ils veulent de manière à ce que l'histoire racontée reste cohérente.
Et pour les futur fans du lisp, fuyez CommonLisp. Scheme, Clojure,… Les jolis Lisp c'est pas ce qui manque. Le seul truc sympa à faire en CL c'est un musée des horreurs.
Très chouette initiative, et très chouette moyen de faire la promotion d'un réseau (obsolète ?). Cependant, je ne me vois pas faire tourner un logiciel de plus.
Bittorent est quand même très décentralisé (avec la possibilité d'avoir plusieurs tracker).
Personnellement "quel site pourri" c'est ce que je me dis quand je tombe sur un blog où il faut s'inscrire pour laisser un commentaire, et je ne m'inscris jamais. Je pense qu'il y en aurait pas mal oui. La personne n'aurait aucune raison de patienter une journée, c'est même pas une pratique répandue, il ne comprendrait probablement même pas pourquoi (en tenant le même raisonnement que ci-dessus).
J'ai pas grand chose à dire, ce débat me désespère. Je ferais juste remarquer que la charge de la preuve à été renversée dans cette histoire, et donc que la raison s'en est allée.
PS : une petite chose quand même. L'argument du « Ceux qui sont contre sont ceux qui ont souffert du système de notation » est ridicule de deux manière. La première c'est qu'on peut être bien souffrir de quelque chose et être contre, c'est parfaitement légitime. La seconde, il y de nombreuses personnes dans le monde qui se battent contre des choses dont ils ne sont pas victimes directement. Ça s'appelle de l'empathie, de l'altruisme, de la droiture, c'est humain.
J'ai adopté nouveau avec fedora 15 si je me souviens bien.
C'était la première version qui me permettait de jouer à urban terror correctement (et je me suis du coup débarrassé du dernier blob de mon système).
Je suis tout à fait stupéfait par le fait que les performances du driver nvidia et nouveau soient comparable. Je me souviens d'une époque où il y avait deux ordre de grandeurs d'écart.
Une autre différence assez fondamentale (propre à haskell) est que cette fonction fonctionne sur les flux infinis, au moment où la première ligne "ceci est une chaine" est imprimée sur l'écran, concat ["e même trop lo","ngue ! … n'a toujours pas été évalué.
format::Int->String->[String]formatns=letformat'[]=[]format'wds=let(d,fin)=auxnwdsin(unwordsd):format'fininformat'$wordsswhere-- aux retourne un couple (premiere ligne, reste du texte)auxc[]=([],[])auxc(w:wds)=letlw=lengthwinifc-lw-1<-1then([],w:wds)elselet(d,fin)=aux(c-lw-1)wdsin(w:d,fin)main=putStr$unlines$format20$concat["Ceci"," est un","e chaine assez ","longue, voir","e même trop lo","ngue ! Tellement longue que l'on peut se demander si elle va tenir !"," sur une seule ligne"]
J'ai un peu galéré pour compter les espaces… et évité les trucs très propre à haskell. Il y a très forcement une solution bien plus élégante. Mais ce code est pur, et donc est possible de faire format10 = format 10 et d'utiliser cette fonction de manière concurrente.
C'est rigolo comme approche. Effectivement, le comportement d'un code objet est parfaitement émulé.
Ce code est très impératif. La fermeture utilisée pour instancier une classe, généralement on s'en sert pour aider le compilo à ne pas évaluer une expression deux fois, ou partager une fonction partiellement appliquée (par exemple pour ne compiler qu'une fois une expression régulière) et l'appliquer ensuite sur plein de chaines).
Le pattern matching concrètement c'est pas différent d'un filtrage avec des instanceof en java, c'est juste beaucoup beaucoup plus sucré. La syntaxe primitive est le match foo with | bar => 3 | baz => 1 | …
Une approche fonctionnelle pourrait consister à construire les lignes récursivement en piochant dans une liste et en décomptant les caractères.
Ça c'est une variable privée :
let buffer = Buffer.create length
Oui et non, buffer n'est pas une variable, c'est une déclaration. Seulement la valeur attachée à buffer, elle, est une variable, et n'a rien de fonctionnel. Ça viole la transparence référentielle.
fonctionnel/objet ne sont que des représentations d'un même code
Ça dépend comment on défini "même code", parce que par exemple, pour la factorielle entre
acc = 1; while(n) acc *= n--;
et
(\f.\x.f(x x) \x.f(x x)) (\f.\n.if n == 0 then 1 else n * f (n-1)) n
il y a un monde.
Dans certains langages de programmation fonctionnel, c'est vraiment la seconde version qui est exécutée. Il y a le graphe de l'expression qui est construit dans le tas et l'évaluation se fait en réduisant ce graphe.
D'autre part j'ai tendance à penser que LA caractéristique des langages fonctionnels, aussi importante que la récursivité est la pureté. L'idée c'est d'écrire des maths dans un programme et que l'ordinateur les mouline.
est-ce que mon interrogation est naïve, et je ne fait que constater des évidences, ou bien est-ce moi qui suis trop imbibé de code objet et n'ai pas réussi à m'en détacher ?
OCaml est un langage multi-paradigme. Avec Haskell par exemple il est impossible d'écrire ce genre de chose sans encapsulation.
Derrière chaque mensonges il y a un menteur. dire « L'ennemi c'est le mensonge » c'est dire « Ce ne sont pas les armes à feu qui tuent, ni les soldats, se sont les balles »
Je comprend le propos. Il est fondamental de garder la quette de vérité au cœur de tout débats, mais faut pas oublier qui la maltraite.
Parce que déréférencer le site web d'un journal, ils l'ont déjà fait (pour une histoire comparable avec un journal belge), et que le taux de fréquentation du site en question à chuté de 60% (de mémoire). C'est triste mais c'est un fait, un site qui n'est pas référencé par Google, c'est un site avec les jambes pétés.
Bref : qui a besoin de qui?
Google a besoin de contenu, et la presse à besoin d'indexation. C'est une symbiose. Maintenant, Google est bien plus solide, et la presse est parait-il en difficulté.
La presse tente de racketter google avec un argumentaire douteux. Google réplique en menaçant de leur péter les jambes avec une barre à mine.
C'est pas évident de prendre parti pour l'un ou l'autre…
Les capteurs d'aujourd'hui ont déjà en rendement quantique excellent, il y a peu d'amélioration à espérer. Même avec un rendement quantique de 1, un objectif parfait, et en admettant que l'on dispose une puissance de calcul infinie. Est-ce qu'il est raisonnable d'imaginer appliquer cette technique en temps réel, et en plein jour ?
Je veux dire que les expériences sont faites avec énormément de tirs dans le noir complet, pour avoir une quantité suffisante de données à traiter. La barrière pour sortir de ce cadre semble être physique, pas technologique.
Parce que c'est pas possible d'expliquer ce genre de choses :
voidf(intc){c=0;}// ne fait rienvoidf(intc[]){c[0]=0;}// fait quelque chose
Sans entrer dans les détails de l’adressage "alors tu vois, ce "c" c'est un entier, et ce tableau "c" c'est en fait l'adresse d'une série d'entiers mis bout à bout en mémoire"…
et les "alors, quand on appelle une fonction, les arguments sont copiés puis empilés, blablabla porté lexicale … copies locales modifiées sans effet de bord" avec la syntaxe let in c'est vachement plus simple.
En fait, ça dépend s'il s'agit d'apprendre la programmation ou apprendre à programmer un ordinateur, C paraitrait très indiqué dans ce cas (syntaxe simple, relativement homogène, et langage proche de la machine).
[^] # Re: Freenet
Posté par Zylabon . En réponse au journal Bookmark: Un utilisateur de Retroshare condamné pour avoir relayé une copie d'une œuvre copyrightée. Évalué à 1.
Pour les dev freenet, la sécurité de l'utilisateur est le critère numéro 1.
Je pense pas me planter en affirmant que ça n'arrivera jamais.
Please do not feed the trolls
[^] # Re: Plusieurs solutions.
Posté par Zylabon . En réponse au message Ouvrir windows . Évalué à 2.
Sinon, il y a la logithèque, je suppose qu'elle est aussi présente dans mint. Dans toutes les distributions GNU/Linux moderne, il y a des centaines voir des milliers de logiciels qui peuvent être installés en quelques cliques.
Please do not feed the trolls
[^] # Re: "Tail call optimization"
Posté par Zylabon . En réponse au journal Chantonnons en récursion . Évalué à 2.
En Haskell c'est rigolo aussi :
Par contre la version suivante boucle :
C'est plus « naturel » comme comportement, main étant de type IO (), l'inférence de types remonte jusqu’à head et le trouve de type IO () aussi, et donc l’évaluation de return () est stricte (love en a besoin).
Please do not feed the trolls
[^] # Re: "Tail call optimization"
Posté par Zylabon . En réponse au journal Chantonnons en récursion . Évalué à 2.
L'optimisation de queue consiste à simplement mettre à jour les arguments de des argument dans la pile et à faire un jump sur la première instruction de la fonction au lieux de les empiler une nouvelle fois et de faire un call.
Là, il n'y a pas une fonction, mais trois. C'est pas possible de faire tourner ça sur place (il n'y a qu'un seul sommet de pile). Sauf si gcc remarque que ce code est compilable sans récursion, ce qu'il fait (gcc 4.7 avec -O2, les fonctions a, b et c sont là pour l’empêcher « d'optimiser » le programme en "while(1);"
Please do not feed the trolls
[^] # Re: Il ne faut pas confondre l'innovation et le progrès.
Posté par Zylabon . En réponse au journal De l'inéluctable progrès de l'informatique, ou pas.. Évalué à 10.
Quand on a renoncé à contrôler la version du logiciel exécutée sur sa machine, effectivement, c'est mort (la régression s'est faite au moment de ce renoncement).
Please do not feed the trolls
# Il ne faut pas confondre l'innovation et le progrès.
Posté par Zylabon . En réponse au journal De l'inéluctable progrès de l'informatique, ou pas.. Évalué à 1.
Tout est dans le titre.
Quand la mise à jour d'un logiciel sort et qu'elle apporte des régressions majeures, on garde la vielle version. Pourquoi ne pas généraliser cette technique d'une efficacité stupéfiante ?
Please do not feed the trolls
[^] # Re: Un peu d'humour
Posté par Zylabon . En réponse à la dépêche Retard++ de Fedora 18 et nom de code quantique pour la version 19. Évalué à 3.
On me l'avait décrit comme ça une fois :
Il y a plein de personne dans une salle, l'une d'elle sort, attend un peu et revient, et questionne ensuite les autres pour savoir ce qu'ils se sont raconté
En physique classique : Les gens resté dans la salle se raconte une histoire et répondent ensuite aux question de l'expérimentateur
En physique quantique : Les gens resté dans la salle ne se racontent rien. Quand l'expérimentateur pose des questions, ils répondent ce qu'ils veulent de manière à ce que l'histoire racontée reste cohérente.
Please do not feed the trolls
[^] # Re: Scala
Posté par Zylabon . En réponse au journal Adopter un style de programmation fonctionnel. Évalué à -1.
Et pour les futur fans du lisp, fuyez CommonLisp. Scheme, Clojure,… Les jolis Lisp c'est pas ce qui manque. Le seul truc sympa à faire en CL c'est un musée des horreurs.
Please do not feed the trolls
[^] # Re: 21ème siècle
Posté par Zylabon . En réponse au journal Vidéo montage de la conférence de Richard Stallman à la HEB-ESI, le 28 septembre 2012. Évalué à 2.
+1 pour le torrent
Très chouette initiative, et très chouette moyen de faire la promotion d'un réseau (obsolète ?). Cependant, je ne me vois pas faire tourner un logiciel de plus.
Bittorent est quand même très décentralisé (avec la possibilité d'avoir plusieurs tracker).
Please do not feed the trolls
[^] # Re: Non.
Posté par Zylabon . En réponse à l’entrée du suivi Limitation à la création de journaux aux comptes qui ne viennent pas juste d'être créés. Évalué à 1 (+0/-0).
Ben non, 0, ça ne fonctionne pas comme ça.
Personnellement "quel site pourri" c'est ce que je me dis quand je tombe sur un blog où il faut s'inscrire pour laisser un commentaire, et je ne m'inscris jamais. Je pense qu'il y en aurait pas mal oui. La personne n'aurait aucune raison de patienter une journée, c'est même pas une pratique répandue, il ne comprendrait probablement même pas pourquoi (en tenant le même raisonnement que ci-dessus).
Please do not feed the trolls
[^] # Re: Un milliard pour le fisc
Posté par Zylabon . En réponse au journal Du beau french bashing sur les sites anglophones à propos de la taxe Google !. Évalué à 1.
Je me répond à moi même pour vous donner un autre lien à ce sujet :
http://owni.fr/2012/10/31/12-milliards-google-irlande-fisc-redressement/
Please do not feed the trolls
[^] # Re: bah...
Posté par Zylabon . En réponse au journal Du beau french bashing sur les sites anglophones à propos de la taxe Google !. Évalué à 10.
Ouai… les français ont du mal avec les États qui pratiquent la torture.
Please do not feed the trolls
# Un milliard pour le fisc
Posté par Zylabon . En réponse au journal Du beau french bashing sur les sites anglophones à propos de la taxe Google !. Évalué à 8.
Bien moins ridicule, parce que ça serait bien que google paye des impôts. Bon, aucun intérêt privé la dedans, et c'est peut être là le problème.
http://www.lemonde.fr/technologies/article/2012/10/30/le-fisc-francais-pourrait-reclamer-un-milliard-d-euros-a-google_1783397_651865.html
Please do not feed the trolls
# Un solution grossière pour un problème inexistant.
Posté par Zylabon . En réponse au journal De la finalité du système de notation. Évalué à 6.
J'ai pas grand chose à dire, ce débat me désespère. Je ferais juste remarquer que la charge de la preuve à été renversée dans cette histoire, et donc que la raison s'en est allée.
PS : une petite chose quand même. L'argument du « Ceux qui sont contre sont ceux qui ont souffert du système de notation » est ridicule de deux manière. La première c'est qu'on peut être bien souffrir de quelque chose et être contre, c'est parfaitement légitime. La seconde, il y de nombreuses personnes dans le monde qui se battent contre des choses dont ils ne sont pas victimes directement. Ça s'appelle de l'empathie, de l'altruisme, de la droiture, c'est humain.
Please do not feed the trolls
# La Hadopi soucieuse de l'image qu'elle donne…
Posté par Zylabon . En réponse à la dépêche Revue de presse de l’April pour la semaine 43 de l’année 2012. Évalué à 5.
C'est à mourir de rire. Si le ridicule tuait la Hadopi ferait passer Duncan McLeod pour un bouffon.
Nan, sérieusement, c'est bidon, ils osent tout.
Please do not feed the trolls
[^] # Re: Nouveau : vraiment opérationnel
Posté par Zylabon . En réponse à la dépêche Entretien avec Martin Peres, développeur Nouveau. Évalué à 1.
D'ailleurs il me semble que si le moteur
estétait libre, le mod lui ne l'était pas. Donc c'était effectivement pas le dernier.Please do not feed the trolls
[^] # Re: Nouveau : vraiment opérationnel
Posté par Zylabon . En réponse à la dépêche Entretien avec Martin Peres, développeur Nouveau. Évalué à 4.
J'ai adopté nouveau avec fedora 15 si je me souviens bien.
C'était la première version qui me permettait de jouer à urban terror correctement (et je me suis du coup débarrassé du dernier blob de mon système).
Je suis tout à fait stupéfait par le fait que les performances du driver nvidia et nouveau soient comparable. Je me souviens d'une époque où il y avait deux ordre de grandeurs d'écart.
Chapeau ! Il ne manque qu'OpenCL du coup ?
Please do not feed the trolls
[^] # Re: Ben, non, pas vraiment…
Posté par Zylabon . En réponse au message Paradigme fonctionnel : juste un habillage ?. Évalué à 4.
Une autre différence assez fondamentale (propre à haskell) est que cette fonction fonctionne sur les flux infinis, au moment où la première ligne "ceci est une chaine" est imprimée sur l'écran, concat ["e même trop lo","ngue ! … n'a toujours pas été évalué.
Please do not feed the trolls
[^] # Re: Ben, non, pas vraiment…
Posté par Zylabon . En réponse au message Paradigme fonctionnel : juste un habillage ?. Évalué à 3.
J'ai un peu galéré pour compter les espaces… et évité les trucs très propre à haskell. Il y a très forcement une solution bien plus élégante. Mais ce code est pur, et donc est possible de faire format10 = format 10 et d'utiliser cette fonction de manière concurrente.
Please do not feed the trolls
# Ben, non, pas vraiment…
Posté par Zylabon . En réponse au message Paradigme fonctionnel : juste un habillage ?. Évalué à 2.
C'est rigolo comme approche. Effectivement, le comportement d'un code objet est parfaitement émulé.
Ce code est très impératif. La fermeture utilisée pour instancier une classe, généralement on s'en sert pour aider le compilo à ne pas évaluer une expression deux fois, ou partager une fonction partiellement appliquée (par exemple pour ne compiler qu'une fois une expression régulière) et l'appliquer ensuite sur plein de chaines).
Le pattern matching concrètement c'est pas différent d'un filtrage avec des instanceof en java, c'est juste beaucoup beaucoup plus sucré. La syntaxe primitive est le match foo with | bar => 3 | baz => 1 | …
Une approche fonctionnelle pourrait consister à construire les lignes récursivement en piochant dans une liste et en décomptant les caractères.
Oui et non, buffer n'est pas une variable, c'est une déclaration. Seulement la valeur attachée à buffer, elle, est une variable, et n'a rien de fonctionnel. Ça viole la transparence référentielle.
Ça dépend comment on défini "même code", parce que par exemple, pour la factorielle entre
acc = 1; while(n) acc *= n--;
et
(\f.\x.f(x x) \x.f(x x)) (\f.\n.if n == 0 then 1 else n * f (n-1)) n
il y a un monde.
Dans certains langages de programmation fonctionnel, c'est vraiment la seconde version qui est exécutée. Il y a le graphe de l'expression qui est construit dans le tas et l'évaluation se fait en réduisant ce graphe.
D'autre part j'ai tendance à penser que LA caractéristique des langages fonctionnels, aussi importante que la récursivité est la pureté. L'idée c'est d'écrire des maths dans un programme et que l'ordinateur les mouline.
OCaml est un langage multi-paradigme. Avec Haskell par exemple il est impossible d'écrire ce genre de chose sans encapsulation.
Please do not feed the trolls
# Captain obvious
Posté par Zylabon . En réponse au journal Arguments et mensonge. Évalué à 9.
Derrière chaque mensonges il y a un menteur. dire « L'ennemi c'est le mensonge » c'est dire « Ce ne sont pas les armes à feu qui tuent, ni les soldats, se sont les balles »
Je comprend le propos. Il est fondamental de garder la quette de vérité au cœur de tout débats, mais faut pas oublier qui la maltraite.
Please do not feed the trolls
[^] # Re: guerre de voyous
Posté par Zylabon . En réponse au journal Google menace de déréférencer la presse française.. Évalué à -1. Dernière modification le 20 octobre 2012 à 13:50.
Parce que déréférencer le site web d'un journal, ils l'ont déjà fait (pour une histoire comparable avec un journal belge), et que le taux de fréquentation du site en question à chuté de 60% (de mémoire). C'est triste mais c'est un fait, un site qui n'est pas référencé par Google, c'est un site avec les jambes pétés.
Please do not feed the trolls
# guerre de voyous
Posté par Zylabon . En réponse au journal Google menace de déréférencer la presse française.. Évalué à 5.
La presse tente de racketter google avec un argumentaire douteux. Google réplique en menaçant de leur péter les jambes avec une barre à mine.
C'est pas évident de prendre parti pour l'un ou l'autre…
Please do not feed the trolls
# Les idées d'applications me semblent très très très optimistes
Posté par Zylabon . En réponse au journal Ramesh Raskar et l’imagerie à un trillion d’images par seconde.. Évalué à 3. Dernière modification le 17 octobre 2012 à 23:29.
Les capteurs d'aujourd'hui ont déjà en rendement quantique excellent, il y a peu d'amélioration à espérer. Même avec un rendement quantique de 1, un objectif parfait, et en admettant que l'on dispose une puissance de calcul infinie. Est-ce qu'il est raisonnable d'imaginer appliquer cette technique en temps réel, et en plein jour ?
Je veux dire que les expériences sont faites avec énormément de tirs dans le noir complet, pour avoir une quantité suffisante de données à traiter. La barrière pour sortir de ce cadre semble être physique, pas technologique.
Please do not feed the trolls
# du fonctionnel immuable
Posté par Zylabon . En réponse au message Quel langage pour initier un enfant de 10 ans à la programmation. Évalué à 1.
Parce que c'est pas possible d'expliquer ce genre de choses :
Sans entrer dans les détails de l’adressage "alors tu vois, ce "c" c'est un entier, et ce tableau "c" c'est en fait l'adresse d'une série d'entiers mis bout à bout en mémoire"…
et les "alors, quand on appelle une fonction, les arguments sont copiés puis empilés, blablabla porté lexicale … copies locales modifiées sans effet de bord" avec la syntaxe let in c'est vachement plus simple.
En fait, ça dépend s'il s'agit d'apprendre la programmation ou apprendre à programmer un ordinateur, C paraitrait très indiqué dans ce cas (syntaxe simple, relativement homogène, et langage proche de la machine).
Please do not feed the trolls