Le pub des programmeurs
- 1 927 réponses
- 117 participants
- 131 714 vues
- 130 followers

Anonyme



zieQ

Edit: chui sur windows on aura compris donc LADSPA et CoreAudio ça me va pas


Dr Pouet

Citation : Je connais pas vraiment perl, j'ai du faire quelques lignes de programme, difficile de juger. Je supporte pas la syntaxe au premier abord en tout cas.
Ben en partant de zéro, il vaut clairement mieux choisir Python. Mais les caractéristiques et qualités des deux sont suffisamment proches (prototypage rapide, portabilité, librairies riches...) pour que connaissant bien l'un on ne soit pas hyper motivé pour découvrir l'autre.
L'une des premières appplis célèbre en Python a été le gestionnaire de package de Red Hat (le versions initiales au moins, parce-que ça a peut-être bien été ré-écrit en C ou C++).
Citation : Néanmoins pour l'audio, je pense que c'est pas (encore) adapté car pas de wrappeur.
Et puis au niveau perfos ça doit être assez loin quand même.
Faudrait plutôt du Caml ou du Objective-Caml pour ça. Quasiment la simplicité de langages de script, et plus rapide que du C...

(A noter que Microsoft en a dérivé F#.)

Pov Gabou

Citation :
Je suis d'accord, python c'est bien pratique. Néanmoins pour l'audio, je pense que c'est pas (encore) adapté car pas de wrappeur
Tu peux le faire toi meme. Surtout que le VST est code en C avec wrapper C++, ce qui devrait permettre un wrapping plus facile (par exemple, python::boost ?)
Citation :
En C++, il y a également une foultitude de libraries de calcul numérique, donc le prototypage peut aussi bien sur faire directement en C++.
??

- Compilation hyper lente, surtout si t'utilises les templates (stl, boost).
- Le C++ n'a pas de verification d'acces aux bornes, necessite de gerer la memoire, etc...
- Le C++ n'a pas de structure evoluee. Il y a bien la STL ou boost, mais c'est quand meme hyper lourd, c'est super facile de faire des erreurs, et changer de structure en cours de route est penible (ce qui est l'oppose de la contrainte de prototypage).
- Le C++ est difficilement scriptable.
- C'est penible de rentrer et de sortir des donnees structurees en C++.
Typiquement, j'avais implemente une librairie en C pour du calcul statistique, ca m'a pris 1 bon mois en comptant les tests sur les differentes plateformes. En C++, ca aurait ete pareil, je pense. Par exemple, ecrire un programme test prenant en entree des donnees structurees type matrices, listes de vecteurs, et sortant le meme types de donnes, c'est penible, ca prend a chaque fois vachement de temps, meme en utilisant des librairies specialisees (par exemple hdf5), et c'est quelque chose dont tu as besoin souvent pour tester la validite de tes calculs.
En python, ca m'a pris 1 journee pour le truc de base, 2 de plus pour le packaging en utilisant un truc que je connaissais pas, plus 1 demi journee pour refactoriser le code.
Citation :
Ben en partant de zéro, il vaut clairement mieux choisir Python. Mais les caractéristiques et qualités des deux sont suffisamment proches (prototypage rapide, portabilité, librairies riches...) pour que connaissant bien l'un on ne soit pas hyper motivé pour découvrir l'autre.
En perl, il y a pas scipy, ce qui fait toute la difference pour moi, quand meme.
ocaml, j'ai clairement envie de m'y mettre un jour; la dualite interprete/compile me plait beaucoup. Avec LISP et haskell, ce sont les 3 langages qui ont l'air de vraiment permettre d'autres manieres de programmer (et qui soient suffisament populaires pour permettre de faire des choses interessantes). Il y a aussi erlang qui a l'air rigolo pour tout ce qui est programmation parallele.
Le C m'a appris le fonctionnement de base d'un programme (gestion memoire, entre autre), le C++ comment ne pas programmer, le python comment reellement utiliser des structures types liste/hash, comment utiliser des meta-classes.

miles1981

Le module Boost.Python, je vais sans doute m'y mettre comme j'ai envie de me mettre à Python - et comme il y a des bindings avec un peu presque tout, c'est génial ! -
Vérification d'accès aux bornes : t'as jamais utilisé la STL correctement ;)
Gestion de la mémoire : t'as jamais utilisé les pointeurs intelligents ;)
Pas de structure évoluée :


C'est clair que le scriptage, c'est


Pénible de rentrer sortir des données structurées ? Par rapport à quel langage ?
J'ai aussi conçu des bibliothèques de calcul, le temps utilisé est surtout dû à mon manque d'architecture et de direction au départ, maintenant j'utilise tout ce que j'ai fait facilement !
Audio Toolkit: http://www.audio-tk.com/

Pov Gabou

Citation :
Vérification d'accès aux bornes : t'as jamais utilisé la STL correctement
Il y a pas une structure standart pour faire du calcul rapide en C++. valarray a jamais marche, vector est trop lent, tu peux faire un truc qui par exemple change le .at() de vector en [] selon des options de compilation, mais bon, recompiler pour changer ca, genial... Il y a des trucs du genre blitz++, mais c'est ultra lourd, et je trouve la syntaxe des template affreuse en general. J'aime bien relire ce que j'ai fait 6 mois apres, et les template, niveau facilite de lecture, c'est quand meme pas le top.
Citation :
Gestion de la mémoire : t'as jamais utilisé les pointeurs intelligents
Bouah, t'inquiete, smart pointer, tout ca, je connais. Tu peux pas tout simplement pas comparer a un langage ou la gestion est faite pour toi. Il y a a peu pres personne de sain d'esprit pour pretendre que la gestion memoire n'est pas un truc ultra-penible, complexe, et terrible en consequence sur le temps de programmation. Dans certains cas, ca peut etre necessaire, mais dans la plupart des cas, ca l'est plus. smart pointer, il y a tous les trucs bien penibles a prendre en compte parce que tu peux pas copier, tu peux pas utiliser sur les containers alors faut utiliser autre chose, etc... J'ai pas envie de me prendre la tete la dessus quand je veux implementer un nouveau algo de stats que je ne connais pas.
Citation :
Pas de structure évoluée : Tu veux quoi ? Y'a presque tout ce qu'il faut au niveau modularité et réutilisabilité, comme pour tous les autres langages orientés objet
Y a pas de listes, de hashmap, de possibilite de meta-classes. Il y a pas de librairie standard pour le graphique, il y a meme pas de standard pour le multi-threading ! Compare a python, par exemple, qui permet facilement de gerer de multiples protocoles reseaux, qui a une librairie de strings unicode, une lib GUI de base, etc... Le C++ te donne rien, c'est comme le C, en fait, que des trucs ultra basiques.
Niveau dynamique, y a rien (RTTI est une blague, je crois d'ailleurs que pas grand monde l'utilise). C++ reussit quand meme le tour de force d'etre un langage ultra complexe tout en utilisant que des concepts ultra simples. Il y a pas de doc automatique.
Un exemple: disons que pour mon truc statistique (EM pour melange de gaussiennes), j'ai un ensemble de fonctions pour faire les differents calculs. Je veux essayer plusieurs architectures. En python, c'est facile de changer, je suis sur que je vais pas avoir un probleme subtile en reassemblant mes fonctions en classe. Je realise qu'utiliser des hash serait plus approprie que des listes, c'est facile a faire. La STL te permet pas de faire ca (je trouve que l'independance container/algo est surfaite. Concretement, si t'as un code qui utilise la STL, tu peux pas changer facilement de container rien qu'en remplacant list<int> a par vector<int>. Par exemple, l'utilisation du sort est differente).
Plus theoriquement, le C++ est tres difficile a parser correctement, et ca rend le refactoring automatique pour ainsi impossible.
Citation :
Pénible de rentrer sortir des données structurées ? Par rapport à quel langage ?
Par rapport a tous les autres ?

Non franchement, avant, j'etais beaucoup matlab + C++. Depuis un an, je suis beaucoup plus python + C, et je me trouve a faire plus de science, moins de trucs a la con en programmant. Comme python possede en standard des outils de packaging, je sais que je peux recopier mon environnement facilement sur un autre ordi (matlab est une merde pour ca, je parle meme pas du C++ evidemment qui exige makefile et autre horreurs).
Alors apres, une fois que tu veux faire une grosse appli, Ok, le C++ s'impose pas mal (quoique, je coderais certainement plus jamais un truc 100% en C++) pour certains types d'applis, mais pour ce que je fais a 90% du temps...
L'autre truc plus lequel le C++ est pas mal je pense, c'est pour utiliser tous les trucs a la mode style template pour faire "middleware" entre C et un langage "haut niveau" comme python ou autre chose. Un truc comme boost::python est par exemple extremement interessant: ca permet de remplacer les parties lentes en python par du C/C++ au fur et a mesure, en gardant dans une certaine mesure la flexibilite de python.

zieQ

Mais je reconnais quand même que le C++ a plein de défauts. Comme tu dis, le packaging c'est chiant. Les pointeurs a débugger c'est chiant. Maintenant, quand on prend les bonnes habitudes, on fait moins d'erreurs connes. J'ai maintenant une grosse appli multiplateforme en C++ que je maintiens facilement et qui est performante.
Maintenant ma devise c'est de choisir les bons outils pour faire un truc. Et pour le moment, vu la quantité de librairies qu'on trouve écrites en C++ et qu'on peut réutiliser, je ne suis pas prêt d'en changer. Crois-moi, si seul l'outil comptait, ça ferait longtemps que je serais passé à autre chose. P-e un peu de python, et certainement bcp d'eiffel/smalltalk. Le fait d'utiliser python m'intéresse beaucoup. Mais actuellement, tu le dis toi-même, on ne peut pas faire ce que je souhaite. Donc pour moi ça s'arrête là, pour le moment du moins ;)

The Monz

Perso, je developpe en C++ depuis un paquet d'années, sur windows avec les MFC
depuis un autre paquet d'année, et depuis que je suis passé à .Net et C#, je
trouve que tout est plus simple.
C'est pas que le framework t'apporte des choses que tu ne pouvais faire avant,
mais simplement, il te simplifie la vie, accelère les developpements, etc.
Perso, je travaille dans une boite ou l'on fait des simulateurs (rail, defense,
aérien).. et utiliser C++/MFC ou C#, c'est kif kif... et quel plaisir de
travailler en environnement Visual Studio...
Alors, je sais bien que bcp d'entres vous n'aimes pas trop windows, mais
il faut reconnaitre que cet environnemnet est vraiment bien fait.. (de plus
il y a une version entièrement gratuit, visual Studio Express...)
Donc, "Open your mind to C# ;)"
THe Monz, Toulouse

The Monz

Perso, je developpe en C++ depuis un paquet d'années, sur windows avec les MFC
depuis un autre paquet d'année, et depuis que je suis passé à .Net et C#, je
trouve que tout est plus simple.
C'est pas que le framework t'apporte des choses que tu ne pouvais faire avant,
mais simplement, il te simplifie la vie, accelère les developpements, etc.
Perso, je travaille dans une boite ou l'on fait des simulateurs (rail, defense,
aérien).. et utiliser C++/MFC ou C#, c'est kif kif... et quel plaisir de
travailler en environnement Visual Studio...
Alors, je sais bien que bcp d'entres vous n'aimes pas trop windows, mais
il faut reconnaitre que cet environnemnet est vraiment bien fait.. (de plus
il y a une version entièrement gratuit, visual Studio Express...)
Donc, "Open your mind to C# ;)"
THe Monz, Toulouse

Pov Gabou

Citation :
Je rejoins un peu miles1981, y a bcp de défauts que tu cites qui n'en sont pas. Oui la STL peut faire peur au début mais personnellement, je l'utilise tout le temps et je n'ai jamais les problèmes dont tu parles. En plus, on a le choix des libraries pour effectuer les fonctions dont on a besoin.
J'attaquais pas tant le C++ en tant tel que son utilisation pour le prototypage. Je veux dire, j'ai jamais entendu qqn avant utiliser le C++ pour prototyper quelque chose. C'est ca qui me parait bizarre, et c'est dans ce sens que c'est penible, la stl. Rien que gerer les infini, les divisions par zero, c'est extremememnt penibles dans un langage compile... Pour du traitement de signal, tu peux pas comparer matlab et le C++ niveau facilite et puissance, c'est pas le meme monde. Python permet justement de faire ce que matlab permet (en gros), tout en ayant un 'vrai' langage.
Les problemes dont je parle pour la stl, l'ABI, le packaging, sont des lieux communs (valarray, meme stroustrup a reconnu que c'etait un echec dans les dernieres editions de son bouquin), pour le reste. Evidemment, un plugin VST, tu vas le faire en C++. Un gros soft audio, tu vas le faire en C++ (je pense que ce doit etre le langage de 90% des programmes audio "lourds", toute plateforme confondu, mac, pc ou linux).
Citation :
Alors, je sais bien que bcp d'entres vous n'aimes pas trop windows, mais
il faut reconnaitre que cet environnemnet est vraiment bien fait.. (de plus
il y a une version entièrement gratuit, visual Studio Express...)
En dehors du fait windows only, le probleme de visual studio est que si t'es pas programmeur, c'est extremememt lourd a gerer. A chaque nouvelle version, il faut reapprendre pas mal de trucs, et perso, etant avant tout scientifique, j'ai pas le temps pour ca. Maintenant, je reconnais qu'il y a pas mal de trucs bien faits dans visual studio (je connais surtout la version 6, ca a du s'ameliorer depuis: debuggage, header pre compiles, performances).
Sinon, C#, il y a mono sous unix, et ca marche plutot pas mal.

miles1981

L'orthogonalité des conteneurs/algorithmes de la STL est voulue pour la réutilisabilité et la maintenance. A la place d'avoir O(NM) fonctions, on n'en a plus que O(N+M), une sacré différence !
Y'a pas de liste -> et std::list, c'est quoi ? Les hashmap ne sont pas encore standard, mais ça vient ! De même que pour les pointeurs intelligents, quand je dis pointeurs intelligents, il y a bien plus que les auto_ptr, de même pour les générateurs aléatoires.
Et pour ce qui est de réapprendre VS, comme rien n'a changé entre VC6 et VC8 à part la conformité du standard, et aussi, on voit bien qu'on a pas besoin de makefile ;)
Bon, on voit bien qu'on a chacun des intérêts divergents, de mon côté, ce qu'il me faut, c'est une exécution rapide. Je n'ai pas le temps de développer un test en python puis de porter les pièces trop lentes, il me faudra une semaine pour faire une simple exécution qui me prend 1 jour en C++. Je fais aussi des stats des optimisations, et à longueur de journée. Clairement, Python n'est pas assez puissant pour moi, je préfère C++ avec les templates. Je perd 5 minutes à la compilation, mais je gagne quand je passe d'un test en float à un test en double parce que pas tout à redéfinir - vive la généricité -, et je gagne un facteur 2 sur mes tests après - qui durent quelques jours voire semaines -. Le choix est vite fait. C++ natif.
Audio Toolkit: http://www.audio-tk.com/

Pov Gabou

Citation :
Par exemple std::vector, c'est un wrapper autour des tableaux en C, sans compter que les algos sont plus rapides.
Plus rapides que quoi ? Je pense que c'est dure de battre une implementation basee sur atlas pour tout ce qui est algebre lineaire.
std::list ne fait pas vraiment partie du langage: des que tu dois pas ca en argument a une fonction C (quand meme la majorite des librairies de calcul numerique), tu perds tout le benefice. C'est comme les strings, en fait. Puis les messages d'erreur sont penibles pour la stl (j'en avais chie quand j'avais utilise blitz++, que j'ai abandonne depuis).
Citation :
Bon, on voit bien qu'on a chacun des intérêts divergents, de mon côté, ce qu'il me faut, c'est une exécution rapide. Je n'ai pas le temps de développer un test en python puis de porter les pièces trop lentes, il me faudra une semaine pour faire une simple exécution qui me prend 1 jour en C++. Je fais aussi des stats des optimisations, et à longueur de journée.
J'avoue quand meme etre surpris. Parce qu'en stats comme ailleurs, la regle des 80/20 reste valide. J'ai du mal a croire que tu sois limite plus par le temps d'execution que le temps de programmation, c'est quasiment toujours l'inverse qui arrive. Des trucs comme matlab sont beaucoup utilises pour cette raison, fondamentalement.
Mais bon, t'es peut etre un genie de la programmation, j'ai rencontre qqs personnes qui sont capables de coder ce que je code en python en C++ en moins de temps. C'etait pas la majorite.
Citation :
Je perd 5 minutes à la compilation, mais je gagne quand je passe d'un test en float à un test en double parce que pas tout à redéfinir - vive la généricité -, et je gagne un facteur 2 sur mes tests après - qui durent quelques jours voire semaines -.
Changer de float en double est quand meme plus simple dans un langage haut niveau qu'en C++ ;)

miles1981

std::list fait partie du langage, c'est une partie de la STL, il n'y a pas plus de différence qu'avec Python, Java ou autres où la liste n'est pas non plus un type de données natif.
Changer un type de données de float en double, c'est 2 secondes chronomètre en moins : un simple typedef à changer et tout le programme utilise un nouveau type de données. Vive les templates.
En ce qui concerne Matlab, je suis comme toi, je n'ai pas :D Je l'utilise juste parce qu'il fait de beaux graphiques quand je lui donne des nuages de points à manger et à afficher en couleurs. Si Python est capable de le faire mieux en moins de temps, je prend sans hésiter !
Audio Toolkit: http://www.audio-tk.com/

Pov Gabou

Citation :
ATLAS est la plus rapide pour les calculs matriciels, OK. Maintenant, pour ce qui est de la sélection du type de données, c'est pas aussi simple qu'un paramètre template dans une classe.
ben si, puisque python (enfin numpy) fait le truc pour toi. Tu travailles en double par defaut, mais tu peux travailler en float avec une ligne au debut de ton script (ou module).
Puis le typedef, tu peux le faire en C, je vois pas pourquoi t'aurais besoin des template pour ca. L'interet des template est quand meme autre.
Citation :
std::list fait partie du langage, c'est une partie de la STL, il n'y a pas plus de différence qu'avec Python, Java ou autres où la liste n'est pas non plus un type de données natif.
Si parce que c'est integre au langage, a tous les niveaux. T as beaucoup de code c++ qui n'utilise pas la stl, alors que t as pas de code python sans liste. In fine, tu peux toujours dire que c'est equivalent, parce que finalement, python est implemente en C, et donc tu peux reimplementer python en C++...
Puis niveau syntaxe, le concept de list comprehension est quand meme plus lisible en python, la aussi consequence du fait que ce soit partie integrante du langage. Parce que le
std::list<int> a(n)
std::list<int>::iterator i
int j(0);
for(i = a.begin(); i != a.end(); ++i) {
*i = j * j
}
j'ai jamais accroche, mais bon, c'est peut etre perso. (je pense que meme qu'en general, les gens preferent a = [i*i for i in range(n)] ).
Citation :
En ce qui concerne Matlab, je suis comme toi, je n'ai pas
Si, si, j'ai. Je suis vraiment curieux de savoir ce que tu codes comme truc, pour de vrai. Si tu pouvais en dire plus


miles1981


En fait je fais des modèles d'apparence non linéaires - la version classique, c'est l'ACP, là, c'est non linéaire ou linéaire par morceau -. Et tout est programmé à peu près proprement ;)
Le typedef sert à spécialisé le template d'une classe matricielle générique ;)
C'est clair que si Python te fait la sélection de manière transparente, ça va.
Audio Toolkit: http://www.audio-tk.com/

Pov Gabou

Citation :
C'est clair que si Python te fait la sélection de manière transparente, ça va.
Typiquement, le defaut est au double, ce qui est normal. Mais tu peux changer ca si tu veux. Les fonctions detectent automatiquement le type a traiter, et appellent les bonnes fonctions derriere en BLAS/LAPACK (les wrappers sont automatiquement geres depuis fortran, ou atlas, ou autre implementation blas/lapack).
Pour l'ACP, tu fais ca sur quel types de donnees ? des photos satelitaires ? Des videos ? Parce que pour que ca prenne des jours ou des semaines, ca doit etre de sacres dimensions !

Wolfen


Question : en quelques mots, c'est quoi les pointeurs intelligents, à quoi ça sert ?
Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

Pov Gabou

L'idee de base, c'est qu'en C++, le compilateur appelle le destructeur pour toi :
Citation :
class A {
public:
A() { cout << "bou ctor An"}
~A() { cout << "bou dtor An"}
};
Si apres tu fais dans une fonction:
Citation :
int foo(void)
{
A a();
}
Le compilateur va automatiquement appeler ~A() a la fin de foo. L'idee fondamentale avec les pointeurs intelligents, c'est d'utilier cette technique avec l'allocation dynamique. Normalement, quand tu utilises l'allocation dynamique "a la C", tu as quelque chose du genre:
Citation :
int foo(void)
{
A* a;
a = new A();
// code avec a
}
Et hop, la, le compilateur n'appelle PAS ~A() pour toi: t'as une fuite memoire. Tu dois faire
Citation :
int foo(void)
{
A* a;
a = new A();
// code avec a
// on utilise plus a
delete a;
}
Le code au dessus , a la C, est super sujet a erreur. Si le code est simple, ok, ca marche. Maintenant, le plus souvent, tu vas appeler d'autres fonctions a l'interieur, qui vont peut etre generer des erreurs: tu vas avoir des "code path" ou dele a ne sera pas appele. L'exemple typique, c'est une exception dans foo.
L'idee, c'est qu'au lieu de faire un appel a new, tu encapsules le pointer a dans une classe Blop pour que le compilateur :
Citation :
Blop<T> {
public:
Blop <T> (T* ptr) { ptr = new T()};
~Blop <T> ( delete ptr);
}
Maintenant tu fais
Citation :
int foo(void)
{
Blop<A> a();
// code avec a
// on utilise plus a
}
Comme a est un *objet*, de type Blop<A>, cree sur la pile, le compilateur va automatiquement appeler ~Blop, qui wrappe l'appel au destructeur. En gros, avec ce type de technique, tu passes le contrat: la fonction foo "possedde" a, et c'est sa responsabilite de detruire a quand foo retourne a la fin de son execution, quoi qu'il arrive.
Avec new, le contrat c'est: je sais ce que je fais, je detruirai moi meme a, ce qui veut dire qu'il faut penser a tous les cas qui peuvent arriver a l'interieur de foo, et dans chaque detruire a.
Bon, apres, c'est plus complique que ca, il y a les problemes de copies, etc... (mon code C++ ne compilera certainement pas, et ne marchera de toute facon pas, ca fait longtemps que je fais plus de C++, j'ai la flemme de verifier la syntaxe).
Avec les tableaux, c'est pareil: si tu utilises vector<double> a la place de double* a, tu es sur que au niveau memoire, ca va marcher.
Bon, maintenant, ca, c'est la theorie. En pratique, tu as beaucoup de cas problematiques, donc c'est loin d'etre extraordinaire *a mon avis*. Typiquement, les pointeurs intelligents ne gerent que ce qui est connu du compilateur C++. Donc pour les signaux, c'est mort, par exemple.
In fine, j'aime tout autant
Citation :
int foo(void)
{
A *a;
int status;
a = malloc(sizeof(*a));
if (a == NULL) {
goto end;
}
status = do(a);
if (status != 0) {
goto fail_do;
}
return 0;
fail_do:
free(a);
end:
return -1;
}
Puis tu peux pas utiliser le meme type de smart pointer selon que tu utilise un objet, un container stl, etc... Donc si a un moment tu changes dans ton code d'un type a l'autre, il faut pas oublier de changer le type de smart pointer, etc... La syntaxe des template en C++ est extremement mauvaise (la, tout le monde est d'accord en general, mais ca sera peut etre arrange dans le prochain standart. Le pb des template est qu'ils ont ete introduits sans beaucoup de reflexion, comme B. Stroustrup l'a reconnu ::
http://blog.codedread.com/archives/2006/01/03/the-next-c/
)
Bref, fondamentalement, je crois que: "putain mais quand tu fais du code mathematique, c'est deja assez complique de s'assurer que tout marche bien pour devoir se prendre la tete avec des trucs aussi bas niveau. Un systeme de gestion de memoire automatique fait le boulot pour toi, ca marche souvent aussi bien voire mieux, et c'est pas interessant a faire de toute facon".
Les smart pointer C++ les plus utilises sont la:
http://www.boost.org/libs/smart_ptr/smart_ptr.htm

miles1981


Et oui, c'est ça le principe des pointeurs intelligents, et même du paradigme RAII - Ressource Acquisition Is Initialization - ;)
Audio Toolkit: http://www.audio-tk.com/

The Monz

ce boulot de nettoyage pour toi.
Alors, certes, tu es obligé de faire l'allocation de ton objet
Ex: Form A = new Form();
Mais apres, c'est le GC (garbage tralala) qui le gèrera pour toi.. Cela
dit, tu peux implementer aussi le "Dispose" qui peut etre associer au Delete
de C++.
Il est clair que C++ est plus un langage pour informaticien qu'un langage
pour scientifique qui souhaite focaliser (et c'est logique et normal) son
énergie sur l'aspect scientifique de son problème implémenter via l'informatique.
Maintenant, si je prone l'utilisation de C# c'est parce que d'un point
de vue évolution de l'informatique, C++ par rapport à C# c'est comme
l'assembleur par rapport au C++ ou au C...
Si on veut un code ultra rapide, il est clair que C# ne sera pas dans beaucoup de cas le langage le mieux adapté pour la performance... Mets bon,
il est possible dans le langage C# d'utilisé une directive "unsafe" qui fait
que ton code va etre executé en mode "non managé" , donc sans usage du GC et
donc avec un gain de performance énorme.. mais aussi une ouverture au codage
dégueulasse avec erreur sur les pointeurs que ce mode t'autorisera à utiliser.
Pour moi, en tant qu'inge informatique expérimenté, je dirais qu'on est actuellement dans une phase identique à celle qu'on a connu au début des
années 1990, la ou bcp de librairies scientifiques étaient en fortran et que
ce langage commencait à passer la main au C++ ou meme C qui n'avait pas
forcément mis à disposition ces librairies.
Je crois qu'il est essentiel de distinguer dans vos propos concernant les
langages les aspects purement langage, et les aspects librairies...
STL n'a rien à voir avec C++.. C'est juste une librairie que beaucoup de
gens trouvent pratiques.. Mais ce n'est qu'une librairie codé dans un langage...
Un peu comme les gens qui font du java et qui te sortent une quantité
importante de package rendant tel ou tel service. La encore, cela n'a rien
à voir avec le langage mais plutot avec l'environnement logiciel, son framework en quelques sortes fournis avec.
C'est pour cela que je fais une assez forte promotion de C# et du framework .Net (il existe des librairies mathématiques pour .Net) car avec ce framework
on peut davantage se concentrer sur son métier plutot que sur les aspects
purement informatique (cela se fait un peu au détriment des performances).
Mais personnellement, ma société developpe des simulateurs ou la notion de
performance est importante (sans pour autant en etre critique), et l'utilisation de .Net en C# (mais en VB.Net ou autre langage .Net ont aurait les meme performances... sauf peut-etre en C++.Net un poil plus rapide, mais plus abscon en terme de syntaxe) nous satisfait pleinement.
Voila.
THe Monz, Toulouse

miles1981

De plus, ATLAS est toujours encore en Fortran et aucune bibliothèque C ou C++ arrive vraiment à la battre. FFTW est écrit en CaML à la base, donc C/C++ n'a pas vraiment gagné la course aux perfs, on utilise toujours les "vieilles" bibliothèques.
Audio Toolkit: http://www.audio-tk.com/

Anonyme

Dire que C# prends le pas sur le C++ c'est comme les gens qui raconte que java était le nouveau C++. C'est des langages de plus haut niveau. La gestion de la mémoire en C++ c'est pas la pour faire jolie, c'est nécéssaire dans de nombreux cas encore (et ca le restera à priori).
Ensuite effectivement qu'un compilateur C++ sans librairie std c'est pas très utile, mais comme le dis miles, ca fait partie (quasiement?) du langage...
Ensuite faut pas rever non plus, java fait à peine plus que C++, la plupart des librairie externe intéréssante ne sont pas du tout portable (notament pour le multimédia, JMS ou java3D ca marche bien que sous MS ou Mac peut etre, mais le code doit quand meme tenir compte de l'OS).
Ensuite comme l'a dis Gabou, on utilise pas tous ces langages pour la meme chose.

Pov Gabou

Citation :
Cela dit, concernant les pointeurs, en C#, le garbage collector va faire
ce boulot de nettoyage pour toi.
Alors, certes, tu es obligé de faire l'allocation de ton objet
Ex: Form A = new Form();
Mais apres, c'est le GC (garbage tralala) qui le gèrera pour toi.. Cela
dit, tu peux implementer aussi le "Dispose" qui peut etre associer au Delete
de C++.
Tu peux aussi mettre un GC en theorie au C++ (typiquement, boehm), mais j'ai jamais trop essaye.
Citation :
STL n'a rien à voir avec C++.. C'est juste une librairie que beaucoup de
gens trouvent pratiques.. Mais ce n'est qu'une librairie codé dans un langage...
Un peu comme les gens qui font du java et qui te sortent une quantité
importante de package rendant tel ou tel service. La encore, cela n'a rien
à voir avec le langage mais plutot avec l'environnement logiciel, son framework en quelques sortes fournis avec.
Je suis pas d'accord sur la stl n'ayant rien a voir avec le C++: dans les versions recentes du bouquin de reference de Stroustrup, la moitie du bouquin est comparee a ca.
Pour moi, java a gagne "contre" le C++ pour 2 raisons:
- plus de gestion de memoire a la main
- un gros framework disponible partout ou le langage est disponible.
Le 2e point est fondamental: ca veut dire que tout le monde utilisant le langage va utiliser les constructions disponibles. C'est la raison pour laquelle je trouve ca un peu con les gens qui disent "python c'est debile, lisp faisait tout ca il y a 40 ans". Oui, mais lisp, tu fais comment pour acceder au net ? Tu fais comment pour faire du calcul matriciel ? Il y a des librairies, mais pas standart. Comme le C++ qui, en 2006, n'a pas de gestion de threads... Donc std:;list en C++, et les listes en python, c'est pas pareil, parce que tu verras jamais de code python sans listes (ou tres peu), alors que la majorite du code C++ n'utilise meme pas la stl.
Citation :
De plus, ATLAS est toujours encore en Fortran et aucune bibliothèque C ou C++ arrive vraiment à la battre. FFTW est écrit en CaML à la base, donc C/C++ n'a pas vraiment gagné la course aux perfs, on utilise toujours les "vieilles" bibliothèques.
Hmmm... un find . -name '*.f' dans les sources atlas me donnent que des fichiers fortran d'interface ;) ATLAS utilise des kernels en C et en assembleur, et tune les implementations utilisant les kernel tres optimises. Y a rien d'implemente en Fortran. De meme, fftw est ecrit en C (tu verras qu'ils aiment pas le C++;) ), mais la aussi, la generation du code est faite par un autre outil (en effet OCAML).
Citation :
La gestion de la mémoire en C++ c'est pas la pour faire jolie, c'est nécéssaire dans de nombreux cas encore (et ca le restera à priori).
Ca, j'y crois pas par exemple. Pour moi, aujourd'hui, la gestion de memoire, c'est comme l'utilisation de l'assembleur il y a 20 ans. Pour la majorite des applications, c'est pas utile, ou meme impossible de gerer a la main. Pour les OS, oui, ok. Pour le temps reel, embarque, Ok. Pour le reste...
Par exemple, tout le succes de google a la base (techniquement s'entend bien sur), c'est grace a l'utilisation de pc merdiques pour construire un gros centre de calcul. Ca veut dire calcul distribue. Leur systeme est base sur le mapreduce, procede courant en programmation fonctionnelle, dont toutes les implementations a ma connaissance utilisent une gestion de memoire automatique (LISP avec un gc avant que le C soit ne).
Une bonne explication de ce que je veux dire est la:
https://www.joelonsoftware.com/items/2006/08/01.html
Citation :
Ensuite faut pas rever non plus, java fait à peine plus que C++
La gestion de memoire, c'est deja enorme.
Bon, tiens, la, je suis en train de regarder un peu les perfs ublas de boost (la derniere fois que j'avais regarde, c'etait pas encore inclus en standart sous ma distribution linux)... Putain, en tout cas, pour programmer, c'est laborieux.

Wolfen


Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

Pov Gabou

Bon, comme je connais pas trop ublas, et qu'il y a surement moyen d'ameliorer le code (valgrind me dit quand meme 20000 allocation memoire par iteration !!!!), je pense qu'on peut faire nettement mieux avec ublas (et avec un autre compilo), mais ce sera pas 10 fois plus rapide non plus je pense (peut etre un facteur 2):
python (info donnee par le profiler): 0.027 s par iteration
C++ (g++ version 4.0, flags optim: -O3 -funroll-loops -march=pentium4 -DNDEBUG): 0.03 s
le code est la:
http://www.ar.media.kyoto-u.ac.jp/members/david/ublas/blop.py.html
http://www.ar.media.kyoto-u.ac.jp/members/david/ublas/main.cpp.html
Si j'ai le courage, je regarderai en C demain, mais ca devient penible a faire (quoique je pense pouvoir gagner un bon ordre de grandeur par rapport a ublas qui n'a pas l'air super rapide quand meme).

Anonyme

Citation : Ca, j'y crois pas par exemple. Pour moi, aujourd'hui, la gestion de memoire, c'est comme l'utilisation de l'assembleur il y a 20 ans. Pour la majorite des applications, c'est pas utile, ou meme impossible de gerer a la main. Pour les OS, oui, ok. Pour le temps reel, embarque, Ok. Pour le reste...
Je répète : la gestion de la mémoire en C++ est utile (en conclusion de ce que tu dis donc).
Je répète aussi : on utilise, en général, le langage le plus adapté à ce que l'on veut faire.
Ensuite oui ok la gestion mémoire du java c'est le top, mais ca fait juste du C plus simple. La couche objet est assez légère.
Maintenant je suis d'accord, et encore plus convaincu après ce que tu dis sur le python (ma seule expérience du python m'avais laissé très perplexe, je pensais, encore un langage à la mode).
Sans manipuler de pointeur, peut on par exemple géré "rapidement" (oublions la simplicité) des fusions de graphes, d'automates, etc ?
- < Liste des sujets
- Charte