Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails)

#51 Le 14/03/2010, à 13:49

inconnu

Re : Petit guide pour aider au choix d'un langage

Encore une fois merci pour toutes ces références (j'ai déjà trois bouquins de 300 pages  à m'infuser tongue). Bon c'est quand même passionnant, dès fois un peu complexe, mais je suis globalement assez surpris de la qualité. Pour tout dire, je ne pensais pas qu'il existait des ouvrages en Français, aussi complet et accessible au débutant. Par exemple sur l'architecture de l'ordinateur.
Je voulais vous demander, à tout hasard hein, si vous connaissiez une référence d'un bouquin ou d'un site, sur l'assembleur ? Ou peut être que le bouquin sur l'architecture de l'ordinateur va aborder ce langage de manière suffisante (j'en suis aux microinstructions mad) ?

#52 Le 14/03/2010, à 15:46

Le Farfadet Spatial

Re : Petit guide pour aider au choix d'un langage

Salut à tous !

shlok a écrit :

Je voulais vous demander, à tout hasard hein, si vous connaissiez une référence d'un bouquin ou d'un site, sur l'assembleur ? Ou peut être que le bouquin sur l'architecture de l'ordinateur va aborder ce langage de manière suffisante (j'en suis aux microinstructions mad) ?

Bon, d'abord, ce n'est pas une question pour les débutants, donc je ne vais pas l'ajouter à la présentation.

   Sinon, pour répondre à ta question, cela dépend fondamentalement de l'architecture à laquelle tu t'intéresses. Tu sais déjà programmer, donc tu as surtout besoin des jeux d'instructions et de savoir comment fonctionne le matériel. En conséquence, je te conseille de regarder les documentations des constructeurs et, en effet, des ouvrages génériques sur les architectures (par exemple ce qu'il y a dans la présentation du début de ce fil de discussion). De mon temps, il y avait La Bible PC de Michäel TISCHER, mais je crois que ce livre n'est plus édité. Tu peux déjà jeter un œil vers :

      Assembleur x86
      Kip R. IRVINE
      Campus Press

   Cela dit, ce livre est vraiment orienté DOS (et architecture x86).

   Si tu n'as pas de problème avec l'anglais, tu peux aller voir ce site :

      http://homepage.mac.com/randyhyde/webst … index.html

   Il y a de quoi faire.

   Juste une dernière chose : au vu des architectures actuelles et des capacités qui sont celles des compilateurs désormais, l'assembleur n'est plus le moyen de faire les programmes les plus rapides. De plus, l'assembleur n'est pas, par définition, portable. En revanche, cela reste toujours le moyen d'accéder finement au matériel. Je te conseille donc de ne pas chercher à faire des programmes entiers en assembleur, mais de t'habituer à coder en assembleur les parties spécifiques où tu as besoin de cet accès.

   Voilà, j'espère que cela aide.

   À bientôt.

                                                                                                                                 Le Farfadet Spatial


L'antre du farfadet :
http://le.farfadet.spatial.free.fr/
Textes, musiques et peintures

Hors ligne

#53 Le 14/03/2010, à 18:50

tshirtman

Re : Petit guide pour aider au choix d'un langage

tiens j'étais passé à coté de ça, je traîne pas assez sur le forum (enfin pas assez partout).

C'est sympa comme idée, et ça peut en effet aider un débutant, mais je suis un peu déçus par certaines mise en avant ou en retrait, tu fais le choix de donner ton avis sur les langage, ce qui ouvre donc à la critique de ces avis wink.

Personnelement je pense que conseiller le PHP comme "excellent choix" sans préciser plus est dangereux, car s'il a l'avantage de la simplicité du déploiement (apache mod_php présent partout), c'est loin d'être un bon langage, il est bourré de problèmes syntaxiques et encourage les mauvaises pratiques, l'avis est je pense à nuancer sérieusement.

Python (bon, je suis fan, "full disclosur") par contre est clairement mis en retrait, alors que c'est un langage d'une grande clarté, complètement objet, très fonctionnel (et très doué pour d'autre paradigmes), très indiqué pour le débutant, mais en effet, le swinnen n'est pas une bonne référence, les bouquins de tarek sont mieux. Bref, à mon sens, parmis les premiers langage a soumettre à un débutant, du fait de sa simplicité, la richesse de sa std, la clarté de sa syntax, le dynamisme de sa comunauté, et j'en passe.

Le c++, bon, comme beaucoup de gens t'es fan, et tu l'indique en gros, comme la solution à tous les problèmes… tu nuances quand même: ce n'est pas un langage pour débutant (ouf), il faut quand même être clair, s'il peut servir de solution à pratiquement tous les développement possible (mais quel langage moderne ne peut pas y prétendre?) il est clairement peu clair, trop complexe, personne ne le maitrise à fond, toute entreprise s'en servant sérieusement en interne, pose des règles très strictes à son utilisation, pour que tout le monde s'en serve pareil (sinon personne ne parle le même c++) (voir par exemple les règles de codage pour le c++ chez google ). Et s'il était si parfait, le java (qui le le porte a un niveau supérieur) n'aurait pas eu un tel succès, mais le java a ses propres problèmes.

Bref, je pense pas mal de mal de c++ (et ceci m'a aidé à savoir pourquoi).

Mais je le répète, excellente initiative.

Hors ligne

#54 Le 14/03/2010, à 20:15

Le Farfadet Spatial

Re : Petit guide pour aider au choix d'un langage

Salut à tous !

tshirtman a écrit :

tu fais le choix de donner ton avis sur les langage

Ce n'est pas un choix, il est tout simplement impossible de faire autrement : ce n'est pas la peine de se le cacher, à partir du moment où quelqu'un donne un conseil pour le choix d'un langage, il donne son avis. Cela dit, j'ai essayé d'être aussi objectif que possible, d'une part. D'autre part, il est clairement indiqué dès le départ qu'il y a nécessairement une part de subjectivité dans la présentation. D'ailleurs, ton intervention, je ne t'en fais pas le reproche, est très fortement marquée par ta propre subjectivité.

tshirtman a écrit :

Personnelement je pense que conseiller le PHP comme "excellent choix"

Ce n'est pas ce qui est écrit :

Le Farfadet Spatial a écrit :

Pour le web, PHP (en général couplé à MySQL) est un très bon choix.

Je ne vois pas en quoi c'est faux. Même si, oui, Python est un langage plus sérieux.

tshirtman a écrit :

sans préciser plus est dangereux, car s'il a l'avantage de la simplicité du déploiement (apache mod_php présent partout), c'est loin d'être un bon langage, il est bourré de problèmes syntaxiques et encourage les mauvaises pratiques, l'avis est je pense à nuancer sérieusement.

Je reconnais bien là le Python-maniaque ! Cela dit, d'accord : que penses-tu qu'il faudrait indiquer ?

tshirtman a écrit :

Python (bon, je suis fan, "full disclosur") par contre est clairement mis en retrait

Il n'est certainement pas mis en retrait. Je ne vois pas ce qui te permet de dire cela. Par contre, je trouve que les Python-maniaques ont tendance à vouloir absolument que l'on dise que Python est le meilleur langage du monde. Python a des qualités, mais il n'existe pas de langage parfait pour tout, Python pas plus que les autres.

tshirtman a écrit :

Le c++, bon, comme beaucoup de gens t'es fan

Là encore, je ne sais pas ce qui te permet de dire ça. En tout cas, ce n'est certainement pas vrai. S'il se trouve que c'est le langage que j'utilise le plus souvent, c'est en raison d'un choix pragmatique, certainement pas parce que je pense que c'est le meilleur langage du monde, ni mon préféré, ni celui que je vais utiliser dans toutes les situations.

tshirtman a écrit :

et tu l'indique en gros, comme la solution à tous les problèmes…

J'indique clairement qu'il est difficile, mal enseigné et qu'il n'est pas adapté pour débuter : en quoi cela sous-entend que ce serait la solution à tous les problèmes ?

tshirtman a écrit :

Et s'il était si parfait, le java (qui le le porte a un niveau supérieur) n'aurait pas eu un tel succès, mais le java a ses propres problèmes.

Encore une fois, je n'ai jamais pensé ni affirmé que C++ est parfait. Ensuite, Java et C++ ne sont pas concurrents, leurs domaines d'applications ne sont absolument pas les mêmes. Java n'est pas le niveau supérieur de C++. Les concurrents, à l'heure actuelle, de C++ sont C et Fortran, les concurrents de Java sont C# et Objective-C.

   Bon, tu adores Python et déteste C++. Il n'empêche que C++ a de vrais qualités et que Python ne peut servir à tout. Lorsque l'on montre les indéniables qualités de C++, cela ne veut pas dire qu'on dit qu'il est la solution pour tout. À l'inverse, si on ne dit pas que Python est le seul langage à considérer, cela ne veut pas dire qu'on le met en retrait.

   À bientôt.

   Le Farfadet Spatial


L'antre du farfadet :
http://le.farfadet.spatial.free.fr/
Textes, musiques et peintures

Hors ligne

#55 Le 14/03/2010, à 21:31

tshirtman

Re : Petit guide pour aider au choix d'un langage

sans vouloir entrer dans une polémique stérile, les quelques points qui me font pensé que ton jugement de python, comme de C++, sont biaisés…

Dans à peu près le même domaine que Perl, mais avec peut-être une syntaxe plus claire : Python.

on lit ici que python sert grosso modo aux mêmes choses que perl (principalement des petits scripts systeme, un peu de web, mais perl est clairement en perte de vitesse de ce coté là) et que ça syntaxe est *peut être* plus claire que celle de l'un des languages considéré comme l'un des plus cryptiques existant… pour un langage généralement loué pour sa clarté c'est un peu fort… pour un langage de plus en plus adopté par les scientifiques en remplacement du fortran qu'ils trainent depuis 30ans, pour un langage énormément utilisé dans le web, dans les applis industrielles, dans le dev d'outil graphique, dans de plus en plus de jeux vidéos… c'est quand même un peu fort de le comparer aux mêmes utilisations que perl…

Enfin, un langage extrêmement versatile et généraliste,

là j'aurais pus m'attendre à ce que tu parle de python… mais non c'est bien le classique c++, le langage du futur d'il y a 20ans, qui n'a pas atteins ses objectifs de pdm malgré le fait qu'il s'appuie honteusement sur le succès du C sans en reprendre les principaux avantages, simplicité et cohérence, sans apporter un modèle objet complet… bref, sans le mériter…

edit: sur l'aspect plus constructif, je pense que faire un peu de mise en forme (séparation des langages en sections, avec titre en gras, lien vers le site du langage…) pourrais donner une meilleur visibilité en langages en bas de liste, qui sont un peu perdus dans le flou, pour qui n'a pas encore lus l'ensemble d'une traite.

Dernière modification par tshirtman (Le 14/03/2010, à 21:59)

Hors ligne

#56 Le 14/03/2010, à 22:20

Le Farfadet Spatial

Re : Petit guide pour aider au choix d'un langage

Salut à tous !

tshirtman a écrit :

on lit ici que python sert grosso modo aux mêmes choses que perl (principalement des petits scripts systeme, un peu de web, mais perl est clairement en perte de vitesse de ce coté là) et que ça syntaxe est *peut être* plus claire que celle de l'un des languages considéré comme l'un des plus cryptiques existant… pour un langage généralement loué pour sa clarté c'est un peu fort…

L'argument de lisibilité n'est pas facile à manipuler, raison pour laquelle j'ai mis le « peut-être ».

   Aujourd'hui, il est indéniable que Python, Perl et Ruby ont des domaines d'applications semblables et, pour l'instant, aucun n'a vraiment pris le pas sur les autres, en dépit de l'effet de loupe de Ubuntu. Même si, personnellement, je suis plus intéressé par Python, je pense qu'aujourd'hui, dans une présentation, on ne peut pas passer l'un des trois sous silence et il reste encore pertinent de les comparer les uns aux autres.

pour un langage de plus en plus adopté par les scientifiques en remplacement du fortran qu'ils trainent depuis 30ans

Python ne vient pas en remplacement de Fortran pour les scientifiques. Il vient plutôt en remplacement de Matlab ou de R. De plus, il reste inadéquat pour pas mal de cas : par exemple, il est inapproprié au calcul numérique intensif.

pour un langage énormément utilisé dans le web, dans les applis industrielles, dans le dev d'outil graphique, dans de plus en plus de jeux vidéos… c'est quand même un peu fort de le comparer aux mêmes utilisations que perl…

Hé bien Perl est utilisé dans le web, dans des applications industrielles, dans le développement d'outils graphiques, dans des jeux vidéos... Chez pas mal de scientifique également. Du coup, il est parfaitement pertinent de les comparer dans ce cadre.

Enfin, un langage extrêmement versatile et généraliste,

là j'aurais pus m'attendre à ce que tu parle de python… mais non c'est bien le classique c++

Hé bien, il est incontestable que C++ est extrêmement versatile, à tel point que son créateur l'a vu utilisé dans des domaines qu'il n'envisageait pas (voir Le Langage C++ de Bjarne STROUSTRUP).

   Je suis désolé, mais, pas plus que C++, je n'ai pas que Python dans la tête.

le langage du futur d'il y a 20ans, qui n'a pas atteinds ses objectifs de pdm malgrès le fait qu'il s'appuis honteusement sur le succès du C sans en reprendre les principaux avantages, simplicité et cohérence, sans apporter un modele objet complet… bref, sans le mériter…

Donc, c'est moi qui ait un point de vue partial et biaisé...

   Déjà, je ne sais pas où tu as trouvé le moindre objectif de parts de marché pour C++, qui est à l'origine un projet marginal, dont le succès a surpris (voir The Design and Evolution of C++ de Bjarne STROUSTRUP). On est très loin des ambitions de CPL à son époque ou de D plus récemment.

   Ensuite, ce n'est pas honteux de s'appuyer sur le passé, au contraire, c'est une bonne chose, c'est même une pratique nécessaire.

   Enfin, le modèle objet était balbutiant aux début de C++ et c'est notamment l'expérience acquise avec ce langage qui a permis de le faire évoluer et à devenir mature.

   Inutile d'essayer : je ne dirais pas que Python est le meilleur langage du monde parfait pour tout, ni non plus que C++ est lamentable. Ni l'une ni l'autre de ces affirmations n'est vraie, ceci d'un point de vue parfaitement objectif.

   Par contre, si tu me donnais les précautions que tu voudrais que je donne concernant PHP, je serais intéressé.

   À bientôt.

   Le Farfadet Spatial


L'antre du farfadet :
http://le.farfadet.spatial.free.fr/
Textes, musiques et peintures

Hors ligne

#57 Le 14/03/2010, à 23:00

tshirtman

Re : Petit guide pour aider au choix d'un langage

Le nom C++ n'a pas été choisit au hasard, j'ai pas lus le bouquin (de référence) de Bjarn en entier (j'avoue que son style, de même que la syntaxe de son langage m'a assommé), mais j'ai bien lus le début, le but est bien de dire "c'est comme le C, mais avec des classes, mais en moins bricolage que 'C with classes'" C, à l'époque était le roi du monde… mais bon oui, on va dire que c'était un petit projet (comme C en 1968-9, c'est marrant). Quand je parle de s'appuyer sur le succès je ne parle pas de technique (même si le C++ à fait des erreurs du fait de vouloir rester compatible avec C) mais de marketing, le succès en entreprise du C++ (même partiel) est largement du au fait qu'il soit "presque C, mais avec des trucs en plus, donc ça peut servir" dans la tête de beaucoup de gens (tu constate toi même qu'il est très mal enseigné la plupart du temps) et donc profite d'un aura qu'il ne mérite pas.

Pour le python dans les calculs numériques, numpy ne doit pas t'être étranger, c'est puissant… certes il faut être capable d'exprimer tes problèmes de façons matricielles, mais c'est vraiment rapide… Certes on peut aller plus vite, notamment en C, mais autant coder un module C spécialisé dans les calculs qu'on a a faire (si numpy ne convient pas), et faire tout le code autour en python.

Pour PHP, j'aurais tendance à dire "un langage extrêmement répandus pour le WEB, facile à apprendre, mais souffrant d'un syntaxe assez peu cohérente, et de failles de sécurité récurrentes si employés sans une extrême rigueur", ou un truc du genre… disons qu'un langage conçus pour faire compteur de pages de CV à la base… ben ça donne ça…

Hors ligne

#58 Le 15/03/2010, à 00:32

Le Farfadet Spatial

Re : Petit guide pour aider au choix d'un langage

Salut à tous !

tshirtman a écrit :

Quand je parle de s'appuyer sur le succès je ne parle pas de technique (même si le C++ à fait des erreurs du fait de vouloir rester compatible avec C) mais de marketing

C++ n'appartient à personne, comment parler de marketing ?

Pour le python dans les calculs numériques, numpy ne doit pas t'être étranger, c'est puissant… certes il faut être capable d'exprimer tes problèmes de façons matricielles, mais c'est vraiment rapide… Certes on peut aller plus vite, notamment en C, mais autant coder un module C spécialisé dans les calculs qu'on a a faire (si numpy ne convient pas), et faire tout le code autour en python.

Bof.

   Non, vraiment, il faut se rendre compte qu'absolument tous les langages, Python inclus, ont leurs limites et leurs domaines d'application. En dépit de la qualité de Numpy, Python n'est pas du tout adapté au calcul numérique à haute performance. Il n'a de toute façon pas été conçu pour cela et ce n'est pas l'objectif de Numpy -- il s'agit plutôt d'un moyen de le rendre très concurrentiel par rapport à Matlab.

Pour PHP, j'aurais tendance à dire "un langage extrêmement répandus pour le WEB, facile à apprendre, mais souffrant d'un syntaxe assez peu cohérente, et de failles de sécurité récurrentes si employés sans une extrême rigueur", ou un truc du genre… disons qu'un langage conçus pour faire compteur de pages de CV à la base… ben ça donne ça…

À la base, PHP est une collection de scripts qui ont été développés pour un site personnel. Il a rencontré un vrai succès parce qu'il a été le bon langage au bon moment. Finalement, c'est la même histoire que C et C++.

   Alors, oui, il est permissif et il faut faire attention à la façon dont on code avec. Cela dit, c'est plus un problème de faire attention aux références que l'on donne à son sujet. Pour moi, cela n'empêche qu'il demeure une bonne porte d'entrée à la programmation. Veux-tu dire que tu le déconseillerais à un débutant ? Mais alors, pour quelqu'un qui veut faire du web dynamique et seulement du web dynamique, que lui conseiller ? Sachant que c'est tout de même moins immédiat avec Python, qui n'est d'ailleurs pas proposé par tous les hébergeurs.

   Bon, je suis désolé, mais je ne vois pas ce que je peux faire de tout cela.

   À bientôt.

   Le Farfadet Spatial


L'antre du farfadet :
http://le.farfadet.spatial.free.fr/
Textes, musiques et peintures

Hors ligne

#59 Le 15/03/2010, à 02:02

tshirtman

Re : Petit guide pour aider au choix d'un langage

Bah, tu en fais ce que tu veux, j'ai dis ce que j'avais à dire ^^.

Non, vraiment, il faut se rendre compte qu'absolument tous les langages, Python inclus, ont leurs limites et leurs domaines d'application

c'est vachement dogmatique, et ça me fait penser que tu cherche un domaine ou python ne serait pas le roi juste par ce que pour toi ce n'est pas possible de se dire "general purpose" et de tenir le paris…

Sinon, juste sur la forme

edit: sur l'aspect plus constructif, je pense que faire un peu de mise en forme (séparation des langages en sections, avec titre en gras, lien vers le site du langage…) pourrais donner une meilleur visibilité en langages en bas de liste, qui sont un peu perdus dans le flou, pour qui n'a pas encore lus l'ensemble d'une traite.

c'est moins une affaire de gout personnels que de clarté, je pense pas que ce soit trop controversé comme opinion.

a++

Hors ligne

#60 Le 15/03/2010, à 02:26

Le Farfadet Spatial

Re : Petit guide pour aider au choix d'un langage

Salut à tous !

tshirtman a écrit :

Non, vraiment, il faut se rendre compte qu'absolument tous les langages, Python inclus, ont leurs limites et leurs domaines d'application

c'est vachement dogmatique, et ça me fait penser que tu cherche un domaine ou python ne serait pas le roi juste par ce que pour toi ce n'est pas possible de se dire "general purpose" et de tenir le paris…

Ça-y-est, je vais me faire taxer de dogmatisme...

   Depuis les années 60, on a vu plein de langage dont l'ambition affichée était de devenir le langage parfait pour tout. Il y a eu PL/I ou CPL, par exemple. Tous ont été des échecs retentissant : non seulement ils n'ont jamais réussi à s'imposer, mais en plus, ils n'ont jamais fait disparaître les langages qu'ils entendaient supplanter, à savoir principalement Fortran et Cobol. Ces expériences répétées me font, mais pas seulement moi, considérer avec beaucoup de circonspection toutes les tentatives qui prétendent réaliser un tel objectif. D'autant que différents domaines d'applications peuvent avoir des besoins contradictoires en matière de langage de programmation.

   Toujours est-il qu'aujourd'hui il n'existe pas de langage parfait pour tout. Ce n'a d'ailleurs jamais été l'objectif de Python. Il n'est notamment pas approprié au calcul numérique intensif, comme déjà dit ici, même s'il est pertinent de l'utiliser dans les traitements périphériques. Python n'est pas adapté à la programmation système. Python n'est pas non plus nécessairement le meilleur choix dans de l'embarqué -- non, dans ce cas, je ne crois pas que C++ ni même C soit un bon choix. Et ainsi de suite, j'arrête l'inventaire à la Prévert.

   Vraiment, il est important, si l'on apprécie un langage et que l'on veut vraiment le servir, de bien se rendre compte qu'il a un certain domaine d'application et de bien cerner ce domaine. Parce que, lorsque quelqu'un a un problème particulier, lui dire sans chercher à analyser le problème « utilise Python, c'est parfait pour tout », c'est non seulement dogmatique, mais en plus un bon moyen de le dégouter du langage lorsque, sans faire attention, on lui a conseillé ce langage alors qu'il n'est justement pas approprié au problème.

je pense que faire un peu de mise en forme (séparation des langages en sections, avec titre en gras, lien vers le site du langage…) pourrais donner une meilleur visibilité en langages en bas de liste, qui sont un peu perdus dans le flou, pour qui n'a pas encore lus l'ensemble d'une traite.

Ça, en revanche, c'est une remarque que je vais prendre en compte.

   À bientôt.

   Le Farfadet Spatial


L'antre du farfadet :
http://le.farfadet.spatial.free.fr/
Textes, musiques et peintures

Hors ligne

#61 Le 15/03/2010, à 09:12

no_spleen

Re : Petit guide pour aider au choix d'un langage

Bonjour,

Cela m'intéresserai pas mal si un fan de python pour le calcul scientifique pouvait faire un petit code de benchmark pour que l'on puisse comparer avec le c++ ou le fortran. 

tshirtman, tu te sentirais capable de faire un code python réalisant, par exemple,
- le remplissage d'une matrice carrée M de taille n avec des nombres aléatoires
- le produit matriciel MxM
- L'affichage du temps de calcul ?

Hors ligne

#62 Le 15/03/2010, à 09:44

Le Farfadet Spatial

Re : Petit guide pour aider au choix d'un langage

Salut à tous !

no_spleen a écrit :

- L'affichage du temps de calcul ?

Faire du benchmark est intéressant, c'est certain. Cela dit, il vaut mieux éviter de faire afficher le temps de calcul par le code lui-même et avoir recours à la fonction « time ». Le reste du code n'est pas difficile à faire. Par contre, il faut prendre une taille de matrice conséquente pour pouvoir dire quelque chose.

   Également, cela ne serait qu'une étape, il faudrait songer à une application un peu plus réaliste.

   En tout cas, ça m'intéresse aussi. Une simple multiplication matricielle doit ressembler à ça (je laisse à un Python-manique le soin de sortir un meilleur code) :

import numpy
A = numpy.random.rand(100000,100000)
B = numpy.random.rand(100000,100000)
C = A * B
print C

Je n'ai pas testé.

   À bientôt.

                                                                                                                                     Le Farfadet Spatial


L'antre du farfadet :
http://le.farfadet.spatial.free.fr/
Textes, musiques et peintures

Hors ligne

#63 Le 15/03/2010, à 11:03

no_spleen

Re : Petit guide pour aider au choix d'un langage

Ton code à l'air de marcher. Je vais faire quelques tests. Juste une question, les matrices de numpy sont des simples ou double précision ?

Hors ligne

#64 Le 15/03/2010, à 11:27

tshirtman

Re : Petit guide pour aider au choix d'un langage

Ce qui est bien en python c'est que quand on a un code simple et clair, c'est el général le code optimal pour la tache... le tiens me parait tout à fait correct, j'ai juste enlevé le print, qui élimine tout intéret au bench, vu la lenteur des IO en général, et des terminaux en particulier.

Tu t'es posé la question de la taille mémoire nécessaire pour ce code? ^^ 100000*100000 int ça fait 10 000 000 000 de fois 32bits, j'ai peur de manquer de ram là (en fait il me laisse pas faire, ça doit être pour ça ^^) t'as une lib en C++ qui te fais ça? J'ai divisé par 100 (un 0 de chaque coté) et c'est encore un peu long (sur mon eeepc), mais ça passe. Si quelqu'un veux bien me donner un code C++ équivalent, que je bench… savoir si c'est des facteurs ou des magnitudes la différence de perf… si c'est des facteurs < 10 je vois vraiment pas pourquoi quiconque se donnerait le mal de faire ça en C++ ^^.

pour l'embarqué en effet python est un peu gros (problème de stdlib énorme) mais il y a des solutions comme Cython ou ShedSkin, qui compilent du Python en C/C++ relativement optimisé, tout python n'est pas implémenté mais c'est très correct…

je lance avec time et je te dis quand ça se termine.

Hors ligne

#65 Le 15/03/2010, à 11:33

no_spleen

Re : Petit guide pour aider au choix d'un langage

Voila,

J'ai utilisé des matrices 1000 x 1000 pour que cela tienne en mémoire (Le farfadet doit avoir plus l'habitude des matrices creuses), et j'ai réalisé la multiplication 10 fois.

Le code python

import numpy

for i in range(10):
        A = numpy.random.rand(1000,1000)
        B = numpy.random.rand(1000,1000)
        C = A * B

le résultat

time python matmul.py 

real	0m0.791s
user	0m0.640s
sys	0m0.148s

le code fortran

PROGRAM TEST
IMPLICIT NONE

DOUBLE PRECISION     :: A(1000,1000),B(1000,1000),C(1000,1000)
INTEGER              :: i

DO i=1,10
        CALL random_number(A)
        CALL random_number(B)
        CALL dgemm('N','N', 1000, 1000, 1000, 1 , A , 1000 , B , 1000 , 1 , C , 1000)
END DO

END PROGRAM TEST

Le résultat

time ./matmul 

real	0m0.415s
user	0m0.384s
sys	0m0.016s

Ce code fortran a été compilé avec l'intel fortran et l'implémentation MKL de blas, ce qui fait peut être la différence...

Hors ligne

#66 Le 15/03/2010, à 11:41

tshirtman

Re : Petit guide pour aider au choix d'un langage

avec des matrices de 10000*10000 c'est vachement plus long ^^ (sur eeepc901).

real 9m36.119s
user 0m27.438s
sys 0m23.717

edit: sur ma machine de boulot (E8200  @ 2.66GHz), c'est bien plus raisonnable:

real	0m8.727s
user	0m6.848s
sys	0m1.664s

j'installe fortran-compiler, j'ai jamais touché à ce langage ^^.

Dernière modification par tshirtman (Le 15/03/2010, à 11:47)

Hors ligne

#67 Le 15/03/2010, à 15:42

no_spleen

Re : Petit guide pour aider au choix d'un langage

tshirtman, le petit exemple plus haut m'a séduit par la simplicité du langage. Et je me demande si je ne vais pas me prêter au même exercice que récemment avec le C++, c'est à dire écrire un petit code FEM en python, pour comparer les avantages et inconvénients (voir le post "de l'utilité de la POO en calcul scientifique").
Sur amazon, j'ai trouvé ce livre
"Python - Les Fondamentaux du langage - La Programmation pour les scientifiques. de Matthieu Brucher"
Le connais-tu ? Connais-tu une autre référence moderne ? Ce qui m'attire dans ce livre est qu'il semble spécifiquement orienté sur le calcul scientifique.

Hors ligne

#68 Le 15/03/2010, à 16:24

tshirtman

Re : Petit guide pour aider au choix d'un langage

Content de voir que le langage te plaît smile. Non je ne le connais pas, et je n'ai pas spécialement lus de livres sur le sujet, mon utilisation de python est plus généraliste, j'ai lus beaucoup d'articles sur l'utilisation du python dans les sciences (biologie, physique…), mais je pourrais difficilement te recommander un livre (je suis plus "net" que bouquins pour apprendre).

ps: Pourrais tu m'indiquer la ligne exacte avec laquelle tu as compilé ton code fortran plus haut? que je compare le produit matriciel de 10000² sur ma machine? ^^

Hors ligne

#69 Le 15/03/2010, à 16:31

no_spleen

Re : Petit guide pour aider au choix d'un langage

en fait j'utilise le compilateur INTEL FORTRAN et les librairies MKL d'intel.

J'ai un makefile que j'utilise pour tous mes programmes fortran

F= /opt/intel/FORTRAN/11.1/064/bin/ia32/ifort
I = /opt/intel/mkl/10.2.4.032/include/32
L = /opt/intel/mkl/10.2.4.032/lib/32

matmul : matmul.f90
	$F -O4 -o matmul matmul.f90 -I$I -L$L -lmkl_blas95 -lmkl_lapack95 -lmkl_intel -lmkl_sequential -lmkl_solver -lmkl_lapack -lmkl_core -liomp5 -lguide -lpthread -lm

J'ai voulu compiler l'exemple avec gfortran et l'implémentation debian de blas, mais c'est extrêmement lent chez moi, je ne comprend pas pourquoi, voila ce que j'ai fait

gfortran -O4 -o matmul matmul.f90 -L/usr/lib -lblas

J'ai l'impression que gfortran n'aime pas les grosses matrices, ce qui serait le comble pour un compilateur destiné uniquement à du calcul numérique !

Hors ligne

#70 Le 15/03/2010, à 16:32

no_spleen

Re : Petit guide pour aider au choix d'un langage

Les compilateurs INTEL pour C++ et fortran sont gratuits sur linux

Hors ligne

#71 Le 15/03/2010, à 16:39

tshirtman

Re : Petit guide pour aider au choix d'un langage

ok, téléchargement en cours ^^ (quasi 700mo en tout, c'est du lourd, je sais pas comment on faisait du fortran en 1957, huhu).

Dernière modification par tshirtman (Le 15/03/2010, à 16:40)

Hors ligne

#72 Le 15/03/2010, à 16:46

no_spleen

Re : Petit guide pour aider au choix d'un langage

et t'as essayé avec gfortran ?

Hors ligne

#73 Le 15/03/2010, à 16:53

tshirtman

Re : Petit guide pour aider au choix d'un langage

ça compile, et ça s'exécute, mais c'est bien plus lent que python là…

real	4m45.748s
user	4m44.974s
sys	0m0.748s

là ou python mets moins d'une seconde (j'en suis resté au 1000x1000 là)

Dernière modification par tshirtman (Le 15/03/2010, à 17:01)

Hors ligne

#74 Le 15/03/2010, à 16:58

no_spleen

Re : Petit guide pour aider au choix d'un langage

Ben oui, apparemment gfortran est très mauvais. Rien ne sert d'avoir un bon langage si l'on a pas un bon compilo !!!

Hors ligne

#75 Le 15/03/2010, à 17:02

tshirtman

Re : Petit guide pour aider au choix d'un langage

on peut parler de pypy pour les perfs de python aussi wink
http://speed.pypy.org/overview/

pfff il faut libstdc++5 maintenant… ok, un problème de lib à l'exécution maintenant, c'est vachement fun a installer ce truc ^^

Dernière modification par tshirtman (Le 15/03/2010, à 17:31)

Hors ligne

Haut de page ↑