Se connecter
Se connecter

ou
Créer un compte

ou
FR
EN

Le pub des programmeurs

  • 1 927 réponses
  • 117 participants
  • 131 736 vues
  • 130 followers
Sujet de la discussion Le pub des programmeurs
Salut :coucou: y a des programeurs sur AF si oui vous bossez sous quoi ?
Afficher le sujet de la discussion
201

Citation :
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.



Je suis pas un fan de java pour pas mal de raisons, mais on considere en general que la gestion automatique de memoire fait gagner un facteur 2 en "productivite" par rapport a C/C++. Je pense qu'un framework permettant de gerer le filesystem, le reseau, etc... aide beaucoup aussi a son developpement. En C++, tu veux rapidement faire une liste de tous les fichiers d'un certain dossier, et faire certaines operations dessus, faut utiliser un truc non standart, car ca n'existe pas dans la librairie standart).

python, il faut l'utiliser un petit peu pour comprendre. Il y a plein de petites choses qui sont extremement utiles. Un truc en python bien pratique, que j'utilise souvent, c'est la modification d'objets en cours de route, ou la specialisation de classes en fonction d'arguments.

Par exemple, selon un arg pass a un objet lors de sa creation, je vais changer certaines fonctions de l'objet. Ou je vais specialiser certaines fonctions a la volee ('currying' en langage fonctionnel: ramener une fonction a plusieurs parametres a un seul. Par exemple, en lisp, si tu as
(defun f(x y) (+ x y)), tu peux definir (defun g(x) (f 2 x)), et g(3) te donnera 5).

La, y a un exemple de modification de methodes d'objets et d'evaluation partielle

http://www.ar.media.kyoto-u.ac.jp/members/david/ublas/blop.py.html

Citation :
Sans manipuler de pointeur, peut on par exemple géré "rapidement" (oublions la simplicité) des fusions de graphes, d'automates, etc ?



Je suis pas sur de voir ce que tu veux dire ? Ce qui est sur, c'est qu'un pointeur n'est pas obligatoire dans un langage pour etre turing complet. Par exemple, LISP est un langage extremement puissant, il y a pas de pointeur. Apres, faut voir ce que tu appelles pointer: comme en C ? Java a des pointeurs, par exemple, mais ils peuvent pas pointer n'importe ou (pas de "dangling pointer" ).

Les pointeurs pouvant pointer n'importe ou, c'est plus ou moins indispensable pour la programmation systeme, j'imagine (comment tu fais pour acceder au DMA sans ?). Il y a le projet singularity qui implemente un OS en C# modifie, chez MS, je pense que c'est interessant de voir comment ils font.

Pour ton truc de graphes, automates, vraiment, non, je comprends pas ce que tu veux dire :)
202

Citation : Faut faire la part des choses, C et C++ c'est juste au dessus de l'assembleur, sinon moi je vous parle d'unification à la prolog que ni python, ni java, ni C# ne font.



Là je ne suis pas d'accord. Ce sont vraiment des langages de haut niveau. Essaie d'écrire un programme en assembleur pour faire l'équivalent de ce que tu fais en C ou C++ et tu verras la différence de taille de code.

Après à chaque langage ses avantages et ses inconvenients. Le prolog c'est génial pour faire des déductions, du calcul de preuves. Le caml c'est plus adapté pour faire du calcul mathématique car c'est un langage fonctionnel. Le C c'est juste de l'impératif, alors que le C++, C#, Java c'est de l'objet. Il faut donc choisir le bon outil en fonction de ce que l'on veut faire. Il ne me viendrait pas à l'idée de vouloir faire de l'impératif en prolog, même si j'adore ce langage. Pour l'objet, pour moi, on n'a pas fait pas mieux que le C++ au niveau possibilité de langages + libraries disponibles. Si on regarde par contre uniquement les possibilités du langage, on préfèrera certainement Smalltalk ou les langages sans pointeurs (quoique moi j'aime bien savoir ce que je manipule).
203

Citation :
Ce sont vraiment des langages de haut niveau.



Ca depend de ce que tu entends pas haut niveau. Le C te donne quand meme pas grand chose par rapport a l'assembleur a part une syntaxe pour les fonctions. finalement. T'as quoi comme constructions pour le langage ? les struct, les fonctions, un pre processeur sommaire, un systeme de types basique, point barre. Faire un compilateur C est relativement facile, c'est meme ce qu'il y a de plus facile comme compilo.

Les createurs du C eux meme on cree le C comme un assembleur portable il me semble (je trouve pas la citation, elle est peut etre pas Kernighan et Ritchie).

Citation :
Là je ne suis pas d'accord. Ce sont vraiment des langages de haut niveau. Essaie d'écrire un programme en assembleur pour faire l'équivalent de ce que tu fais en C ou C++ et tu verras la différence de taille de code.



A mon avis, il y a plus de difference entre le C et un autre langage plus haut niveau (lisp, python, etc...) qu'entre le C est l'assembleur.

Typiquement, si je fais un gcc -S blop.c avec le code suivant:

Citation :


#include <stdio.h>

void foo(void)
{
}

void bar(int a)
{
a * a;
}

int bou(int a)
{
int b;

b = a * a;

return b;
}

void hello(void)
{
printf("hellon");
}



En asm (syntaxe AT&T, en enlevant le code d'initialisation), ca retourne:

Citation :


.globl foo
.type foo, @function
foo:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.size foo, .-foo
.globl bar
.type bar, @function
bar:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.size bar, .-bar
.globl bou
.type bou, @function
bou:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl 8(%ebp), %eax
imull 8(%ebp), %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
leave
ret
.size bou, .-bou
.section .rodata
.LC0:
.string "hello"
.text
.globl hello
.type hello, @function
hello:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl $.LC0, (%esp)
call puts
leave
ret
.size hello, .-hello



Et dans le code C, il y a deja les fondamentaux du langage: type, chaine de charactere, fonctions.
204
Putain, le quote respecte pas les tab, ca fait de la merde...
205
Faudrait une balise
[code][/code]
Qui ne respecte pas les caractère des smileys
206
Oui, c'est pour ce que je m'etait fait chier a foutre mes code en html, mais j'ai la flemme.

D'un cote, je comprends le besoin de pas autoriser les balises html, mais bon, la, ce serait quand meme super pratique pour ce genre de cas.
207

Citation :

 Police fixe sur AF ! 



Les balises sont [ f] et [ /f] (sans les espaces).

Il y a deux moyens d’oublier les tracas de la vie : la musique et les chats.
Albert Schweitzer

208
Ah yes, ca a plus de gueule, comme ca
209
Ha oui la ca ressemble a de l'asm :bravo:
210
Oui c'est bien ce que je disait, le C est plus facile à déchiffrer. En plus, il te fournit des types de base (avec vérifications de types), une syntaxe pour les fonctions, des fonctions toutes prêtes. Pour moi c'est déjà quelque chose de "haut-niveau". Certes c'est pas le langage de plus haut niveau qui soit mais de là à le comparer à de l'assembleur...
211

Citation :
Oui c'est bien ce que je disait, le C est plus facile à déchiffrer. En plus, il te fournit des types de base (avec vérifications de types), une syntaxe pour les fonctions, des fonctions toutes prêtes. Pour moi c'est déjà quelque chose de "haut-niveau"



Par haut niveau, on sous entend quand meme en general quelque chose ou tu n'as plus a te soucier de la memoire, etc... Je veux dire, plus bas niveau de C, t'as pas grand chose qui ne soit ni de l'ASM, ni antedilivien. Le C, c'est utilise dans l'embarque, prog systeme, bref tres pres de la machine.

Je trouve que parmi les langages utilises assez "massivement" (java, C, C#, C++, php, python, perl, visual basic) , le C/C++ est de loin le plus bas niveau, et est beaucoup plus proche de l'assembleur que python l'est du C, par exemple.
212

Citation :
le C est plus facile à déchiffrer



C'est vachement revelateur, le dechiffre, n'empeche ! :diable:
213

Citation : Par haut niveau, on sous entend quand meme en general quelque chose ou tu n'as plus a te soucier de la memoire, etc...



Pas uniquement la mémoire. Haut-niveau pour moi c'est quand le langage fournit un certain nombre de services pour simplifier la tâche du programmeur. La gestion mémoire en fait partie mais pas uniquement. Il y aussi le typage et vérification/conversion de types, les structures, le polymorphisme... Après je suis d'accord que le C est de moins haut-niveau que certains autres langages que tu cites. Par contre, je ne mets pas le C++ dans le même panier que le C, car l'objet apporte un grand nombre de "services".
214
Je parlais d'automate et/ou de graphes, car je me suis laissé dire (de source sur lol) que c'était l'implémentation d'algo qui les manipulent (par exemple RPNI pour l'apprentissage de langage, notamanet la fusion d'etat etc) était très importante (évidement) dans le temps d'execution. Bref en gros l'algo implenter naivement en java ou perl ou camL était en fait très très lent par rapport à ce qu'une version C (ou C++) pouvait faire.

le C est de plus haut niveau que l'assembleur, aucun doute, sinon il n'existerai pas, mais je connais pas d'autre langage plus proche? (de l'assemleur)

et pour en rajouter une couche, on peut faire de l'objet en C :D: (bon ok c'est limite mais possible)
215
De nos jours, l'assembleur, c'est bon pour programmmer les PIC (et encore, on commence à voir du C là aussi...)
C'est dur pour l'égo surdimensionné du programmeur, mais le fait d'utiliser des langages de haut-niveau ainsi que des gestions automatisées des resources permet avec un compilateur moderne des optimisations bien plus importantes du code (en fonction de la machine etc...) que les astuces de comptoires (très bien dans l'absolue) que l'on trouve sur tous les forums ou autres listes de trucs et astuces.

Bon je vais continuer à me mettre des gens à dos, mais comme c'est parti, c'est pas grave. Un code écrit en C une fois qu'il est compilé, il tourne sur un type de machine (si tout va bien). Il ne sera jamais amélioré, il est figé à vie. Si des nouveaux jeux d'instruction ou un nouvel OS sortent, il faut tout recompiler, retrouver les librairies etc... Alors qu'en Java, il marche sur toutes les plateformes. Une nouvelle JRE sort, le programme marche encre, ça se trouve il a été optimisé, et en plus il tient compte des dernières nouveautés de processeurs etc.

Alors, ok c'est pas demain qu'on vera des VST écrits en Java, et les langages comme Java et C# ont encore du progrès à faire, mais qu'on se le tienne pour dit : dans la plupart des situations (mis à part dans des domaines comme l'embarqué, l'aéronautique etc) c'est bien vers des solutions de haut niveau qu'il faut s'orienter et commencer à lacher les vieux boulets qu'on trimbale depuis les débuts du PC de Messieurs IMB et Crosoft.
216

Citation : mais je connais pas d'autre langage plus proche? (de l'assembleur)


En termes de productivité et lisibilité (ou maintenabilité), le Fortran et le Cobol doivent être entre le C et l'assembleur. A la limite, les vieux Basic avec leur numéros de lignes étaient aussi très peu maintenables, bien que facile à prendre en main et gérant pas mal de trucs pour l'utilisateur. Comme quoi la notion de "bas niveau" est pas si simple qu'on pourrait le croire !

Quant à l'assembleur, sur des projets importants (disons de 100.000 à 1 million de lignes), ça n'a quand même rien à voir avec le C... ;)

Par contre, dans ces nouveaux langages, il n'y en a pas encore qui aident réellement à la programmation multi-thread (au sens détection d'accès concurrents à la mémoire dès la compilation). Finalement l'Ada semble être le seul (populaire) à être allé assez loin dans cette direction. Je connais des gens qui sont aussi "fluents" en C++, java et Ada, et qui utilisent ce dernier quand le choix est complètement libre, à cause de sa productivité (pour des trucs assez gros qui devront être maintenus, pas pour du proto). Ca me semble assez crédible finalement.

Un peu dans le même ordre d'idées, sur des projets importants un typage fort est quand même très utile. Cela dit on a assez rarement beaucoup de choix au niveau langage, ça se termine souvent par : C++ si ça doit aller vite, et java sinon (surtout s'il y a pas mal d'IHMs).
217
Soir'
puisque je voit des programmeurs audio aguérris, j'ai une chtite question pour vous :
comment vous faite un equalizer avec un PC ?
enfin, je veut dire, au niveau de la programmation...
hesitez pas à détailler.
merci
218
Il me semble aussi avoir lu que le C se voulait être un assembleur de haut niveau, au sens ou on pouvait continuer d'accéder au matériel tout en écrivant des programmes bien plus compacte. D'où les pointeurs...

Jul

219
Le C a effectivement été créé par Kernigan et Ritchie pour écrire des systèmes d'exploitation (leurs prototypes d'Unix en fait). Ils en avaient marre de repartir presque de zéro à chaque changement de calculateur.

Livre d'histoire :


:mrg:

Un compilateur C était ensuite généralement fourni avec chaque Unix de manière à pouvoir porter les outils de base. Le but n'était pas de faire un langage de très haut niveau. Mais par la suite, à partir du moment où tu as déjà un compilateur qui marche sur ton système, tu es tenté de l'utiliser (notamment de faire des économies en n'achetant rien de plus). J'imagine que c'est pour ça que le C s'est aussi largement imposé.

Pourtant quand on comparait C + vi de base, par rapport à Turbo Pascal 7, le confort de développement n'avait un peu rien à voir. Et puis la vitesse de compilation... 80.000 lignes par minute en Pascal sur un 386 !!
220

Citation :
En termes de productivité et lisibilité (ou maintenabilité), le Fortran et le Cobol doivent être entre le C et l'assembleur.



Fortran et cobol, ca rentre dans la categorie antediluvien, non ? Je parlais bien de langages "recents", cad qui sont encore utilises pour faire de nouveaux projets.

Non serieusement, le C haut niveau, c'est pas tenable comme argument. Je veux dire, c'est quand meme bien la premiere fois que je vois le discours etre tenu. J'ai rien contre le C, c'est un langage que j'utilise beaucoup, mais je le fais pour des trucs bas niveau (implementation d'algo difficilement implementables en python, ce qui est assez rare maintenant quand meme).

Citation :
Par contre, dans ces nouveaux langages, il n'y en a pas encore qui aident réellement à la programmation multi-thread (au sens détection d'accès concurrents à la mémoire dès la compilation).



C'est pas tout a fait vrai. Par exemple, les langages fonctionnels, permettent de paralleliser pas mal de trucs facilement (la encore, mapreduce sur google :) ). Ensuite, erlang est un langage qui gere explicitement la concurrence, et c'est pas un jouet (c'est utilise pour l'implementation de switch telephoniques, par exemple: ericsson, deutsch telekom, etc...)

Ada, je connais tres peu, et c'est vrai que ca avait l'air interessant. Mais par contre, contrairement a ce que tu dis, j'ai l'impression que peu de programmeurs aiment. C'est vachement contraignant, et c'est considere par beaucoup comme un langage ayant echoue.

Citation :
C++ si ça doit aller vite, et java sinon



Putain, ca fait je ne sais combien de posts que je me tue a dire pourquoi c'est pas vrai, qu'il y a des choses a voir ailleurs :ptdr:

Citation : comment vous faite un equalizer avec un PC ?
enfin, je veut dire, au niveau de la programmation...



A quel niveau tu veux savoir ? L'algo dsp, le tuyautage autour ? Un equalizer de base (ie un filtre shelve), c'est relativement facile. Tu peux trouver les equations de base (il y a d'autres trucs plus sophistiques) la:

http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

Citation :
Il ne sera jamais amélioré, il est figé à vie. Si des nouveaux jeux d'instruction ou un nouvel OS sortent, il faut tout recompiler, retrouver les librairies etc... Alors qu'en Java, il marche sur toutes les plateformes. Une nouvelle JRE sort, le programme marche encre, ça se trouve il a été optimisé, et en plus il tient compte des dernières nouveautés de processeurs etc.



Je suis d'accord sur le fond, a savoir que c'est un domaine (recompilation dynamique de code) qui va voir beaucoup de progres, et qui va engendrer des trucs de plus en plus utiliser. Par contre, pour java, je suis pas tout a fait d'accord parce qu'en pratique, le coup du write once, run everywhere, c'est pas verifie. T'as toujours des problemes de plateformes, de version java, etc... Ensuite, absolument rien t'empeche d'appliquer les memes techniques a du code compile machine plutot que du bytecode java: rosetta, par exemple, sous mac os X, utilise exactement cette technique. qemu, emulateur d'OS, utilise aussi cette technique (dans un but different)

Un exemple:

https://pdos.csail.mit.edu/~baford/vm/

Citation :
et pour en rajouter une couche, on peut faire de l'objet en C (bon ok c'est limite mais possible)



C'est pas limite, je l'utilise toujours quand je fais du C. Ca facilite beaucoup les choses quand tu as des librairies avec pas mal de parametres. FFTW, par exemple, est implementee comme ca. Ce qui est lourd en C, c'est tout ce qui concerne l'heritage, et la, clairement, j'utiliserai pas le C. (je fais C++ + QT pour du graphique avec python pour le proto); a part si le C est intermediaire, et sorti par un programme par un programme de plus haut niveau.

Ton truc d'automate, j'avoue ne pas voir de quoi tu parles; tu as un lien qui en dit plus ?
221
Salut

je me demande si de mémoire, le PLM n'est pas un bel hybride entre C et Assembleur...

Je me souviens avoir lu du PLM à l'aérospatial dans les années 1998 sur du
code embarqué pour l'A320 (véridique)

Par contre, meme si on ne peut pas écrire en C# (ou java) des VST, j'ai entendu
parler que sur Vista, M$ fournir WASAPI qui sera une interface de qualité
professionnel Audio. On peut gager qu'on pourra alors faire de l'audio en C#
comme on faisait de l'ASIO.. en C++ (cela dit, on peut déja faire de l'audio
en C#... ) mais de la à developper un VSTi en C#... je crois qu'il y a pour
le moment des problèmes de wrapper...

Quoique, personnellement, j'ai réussi à mettre du C# dans du code C++ (c'est
facile à faire)... mais surtout à appeler depuis une appli Non managé, via
une DLL, ce propre Code...

En clair, on doit pouvoir faire un VST en C# (sauf peut-etre pour l'IHM, et
encore, je pense que cela doit etre fastidieux mais réaliable)

THe Monz, Toulouse

PS : la page ou il parle de WASAPI :
http://msmvps.com/blogs/odewit/archive/2005/12/09/78606.aspx
222

Citation : Fortran et cobol, ca rentre dans la categorie antediluvien, non ?


Certes mais il y a encore énormément de code maintenu actuellement dans ces langages. En calcul scientifique le Fortran est toujours très répandu et le Cobol c'est en gestion (banques, assurances...)

Citation : Je parlais bien de langages "recents", cad qui sont encore utilises pour faire de nouveaux projets.


Toi oui, mais peut-être pas celui qui a posé la question ! Du reste, je ne serais pas surpris qu'il y ait encore régulièrement de nouveaux projets réalisés en Fortran, à cause des raisons :
- beaucoup de scientifique sont très familiers du Fortran et pas du tout des autres langages
- pas mal de super-calculateurs (genre Fujitsu) n'ont que le Fortran comme librairies voire compilateur optimisés pour leur architecture (processeurs, bus etc.)

Citation : Non serieusement, le C haut niveau, c'est pas tenable comme argument. Je veux dire, c'est quand meme bien la premiere fois que je vois le discours etre tenu.


C'est un problème de terminologie, il faudrait une échelle. Disons que de 0 à 10, l'assembleur serait à 0, le C à 2 ou 3, le C++ à 5, Perl/Python à 7, Prolog 8 ou 9...

Après il faut décider si "haut niveau" commence à 1 ou à 6... !

Citation : > Par contre, dans ces nouveaux langages, il n'y en a pas encore qui aident réellement à la programmation multi-thread (au sens détection d'accès concurrents à la mémoire dès la compilation).

C'est pas tout a fait vrai. Par exemple, les langages fonctionnels, permettent de paralleliser pas mal de trucs facilement (la encore, mapreduce sur google ). Ensuite, erlang est un langage qui gere explicitement la concurrence, et c'est pas un jouet (c'est utilise pour l'implementation de switch telephoniques, par exemple: ericsson, deutsch telekom, etc...)


Faudrait que je regarde, ça doit être intéressant. Cela dit, dans l'industrie il est rare que ces langages soient seulement évoqués, et en tout cas ils sont quasiment jamais envisagés sérieusement.

Citation : Putain, ca fait je ne sais combien de posts que je me tue a dire pourquoi c'est pas vrai, qu'il y a des choses a voir ailleurs.


Ca dépend du contexte ça coco. Par exemple si tu as prévu d'utiliser des librairies comme Ilog Views ou Ilog Rules, de réutiliser des librairies déjà développées en interne... c'est vite torché ! Sans parler des arguments "marketing", du niveau : "Ada c'est complètement démodé, C++ c'est sur le déclin, java c'est à la mode". Si un grand chef te sort ça, la discussion est difficile.
:mrg:

Citation : Un code écrit en C une fois qu'il est compilé, il tourne sur un type de machine (si tout va bien). Il ne sera jamais amélioré, il est figé à vie. Si des nouveaux jeux d'instruction ou un nouvel OS sortent, il faut tout recompiler, retrouver les librairies etc... Alors qu'en Java, il marche sur toutes les plateformes. Une nouvelle JRE sort, le programme marche encre, ça se trouve il a été optimisé, et en plus il tient compte des dernières nouveautés de processeurs etc.


Dans beaucoup de contextes on considère que Java c'est tellement récent qu'on a pas encore réellement éprouvé ces avantages dont tu parles. En revanche, avoir du code développé en C pour PDP 11, porté ensuite sur Solaris, puis sur Linux, ça on sait qu'on y arrive à peu près. Ou encore du LTR (Langage Temps Réel) développé sur Mitra, porté sur Data General, puis sur AIX en développant un compilateur LTR->C et un environnement qui simule le scheduling du DG...

Certes il ne s'agit pas de jeux en 3D...
:bravo:
223

Citation : C'est un problème de terminologie, il faudrait une échelle. Disons que de 0 à 10, l'assembleur serait à 0, le C à 2 ou 3, le C++ à 5, Perl/Python à 7, Prolog 8 ou 9...

Après il faut décider si "haut niveau" commence à 1 ou à 6... !



Et encore, même cette échelle est subjective. Dans le fond, je suis d'accord avec Dr Pouet, ça dépend de tes besoins et donc du point de vue. Pour ma part, je n'ai pas besoin de garbage collector, d'autant plus si ça fait baisser les performances. Les langages sans typage fort, même si je n'en ai qu'une maigre expérience, je ne suis pas fan, on ne sait jamais ce qu'on manipule. Ce genre de fonctionnalités a donc moins d'importance que certaines autres à mes yeux et donc ne rentrent que peu dans mon critère "langage haut-niveau".
224

Citation : Certes il ne s'agit pas de jeux en 3D...


j'osais pas en parler, mais bon, les console de jeux (sony) c'est archaique, ca rentre pas dans le débat lol

Citation : Ton truc d'automate, j'avoue ne pas voir de quoi tu parles; tu as un lien qui en dit plus ?


https://www.google.fr/search?hs=s0X&hl=fr&client=firefox-a&rls=org.mozilla:en-US:official&q=RPNI%2Boncina&btnG=Rechercher&meta=
en gros ca sert à inférer un automate à partir d'exemple positif et negatif. Il y a bcp d'algo dans le meme genre (notament toutes les déclinaison possibe pour les automates probabiliste, automates d'arbres...). L'algo est très simple, mais repose sur la fusion d'état jusqu'a soit arriver à quelque chose de correct, soit de pas bon, et la faut revenir en arrière. Avec des automates géant, ca devient lourd à gérer. Enfin ce que je voulais dire par la, c'est que les pointeurs c'est pratique pour manipuler certaine structure de données, en est-il de meme (au point de vue éfficacité) si l'on ne dispose pas de pointeur? (et l'allocation mémoire).
225

Citation :
Faudrait que je regarde, ça doit être intéressant. Cela dit, dans l'industrie il est rare que ces langages soient seulement évoqués, et en tout cas ils sont quasiment jamais envisagés sérieusement.



Ben erlang, regarde les boites qui l'utilisent. Et si on a une discussion technique, je vois pas pourquoi on prendrait l'argument industriel: je veux dire qu'a ce compte la, les langages les plus utilises, c'est visual basic et excel.

Citation :
Certes mais il y a encore énormément de code maintenu actuellement dans ces langages. En calcul scientifique le Fortran est toujours très répandu et le Cobol c'est en gestion (banques, assurances...)



Non mais je sais tout ca. Mais je ne parle pas de ca. Ce que je raconte, c'est avec les outils dispo aujourd'hui, pour les nouveaux projets, le C est un langage de bas niveau. Compatibilite, bla bla, je connais tout ca, mais ca m'interesse pas dans le sens ou c'est pas une problematique technique. Parce qu'a ce compte la, on peut aussi parler des problematiques economiques et 'philosophiques' (cout des implementations, caractere open source, etc...). Si aujourd'hui, j'implemente un projet de logiciel scientifique, sur lequel j'ai le choix du langage, est-ce que le C ou le C++ est le langage le plus interessant, je pense que non. Un tel langage doit evidemment pouvoir reutiliser le code existant (entre autre fortran), mais c'est tout.

Le coup des scientifiques tres familiers avec Fortran et rien d'autre, je crois qu'ils ont presque tous les cheveux blancs, quand meme ;)

Citation :
C'est un problème de terminologie, il faudrait une échelle. Disons que de 0 à 10, l'assembleur serait à 0, le C à 2 ou 3, le C++ à 5, Perl/Python à 7, Prolog 8 ou 9...



Sur une echelle de 1 a 10, tu dis pas en general que 2 est en haut de la liste ;)

Citation :
On peut gager qu'on pourra alors faire de l'audio en C#
comme on faisait de l'ASIO.. en C++ (cela dit, on peut déja faire de l'audio
en C#... ) mais de la à developper un VSTi en C#... je crois qu'il y a pour
le moment des problèmes de wrapper...



Le probleme majeur que je vois avec le C# est le suivant: l'architecture de base d'un plug VST, c'est une dll avec un thread qui fait le process, qui lui doit etre temps reel, et les autres pour tout ce qui a autour (GUI, etc... Je simplifie, si tu fais un sampler, ca devient nettement plus complique par exemple, mais bon, restons simple). Faire tout ce qui est autour en C# ou n'importe quel autre langage, ca doit etre possible.

Le thread dsp, lui, ne doit comporter aucun appel systeme en general. Je passe sous linux la parce que je connais pas windows: le process dsp doit pouvoir tourner des qu'il a des donnees dispo en entree. Il ne doit jamais bloquer, et il ne doit donc jamais faire d'appel systeme: pas de malloc, pas de fopen, etc... Idealement, les seules fonctions qu'il appelle sont les tiennes, et ne font que du calcul. On peut imaginer se faire son propre allocateur memoire temps reel (a partir de pool, par exemple), mais dans le cas simples, c'est pas tres utile. Encore mieux, il faut eviter d'avoir des defaults de page dans ce thread, donc souvent, on va bloquer tous les buffers utilises par ce thread en memoire vive (il parait que c'est chaud a faire sous windows, voire impossible; je sais pas a quel point c'est vrai mais je me souviens d'un email de R. Kuper, developpeur en chef chez cakewalk, qui attendait avec impatience vista pour permettre ce genre de trucs)

Ensuite, ce thread a une priorite speciale, avec un scheduling particulier appelee SCHED_FIFO:

Citation : SCHED_FIFO can only be used with static priorities higher than 0, which means that when a SCHED_FIFO processes becomes runnable, it will always preempt immediately any currently running normal SCHED_OTHER process. SCHED_FIFO is a simple scheduling algorithm without time slicing. For processes scheduled under the SCHED_FIFO policy, the following rules are applied: A SCHED_FIFO process that has been preempted by another process of higher priority will stay at the head of the list for its priority and will resume execution as soon as all processes of higher priority are blocked again. When a SCHED_FIFO process becomes runnable, it will be inserted at the end of the list for its priority. A call to sched_setscheduler() or sched_setparam() will put the SCHED_FIFO (or SCHED_RR) process identified by pid at the start of the list if it was runnable. As a consequence, it may preempt the currently running process if it has the same priority. (POSIX 1003.1 specifies that the process should go to the end of the list.) A process calling sched_yield() will be put at the end of the list. No other events will move a process scheduled under the SCHED_FIFO policy in the wait list of runnable processes with equal static priority. A SCHED_FIFO process runs until either it is blocked by an I/O request, it is preempted by a higher priority process, or it calls sched_yield().



En gros, ca veut dire qu'un thread FIFO (si tu en as un seul sur le systeme, pour simplifier) va tourner autant qu'il veut, jusqu'a ce qu'il ait fini de faire son boulot: il ne sera pas interrompu par un autre thread (par exemple GUI).

pour resumer:
- un plug a un thread "temps reel"
- ce thread ne doit jamais bloquer: pas d'appel systeme, ie pas de malloc, pas de fopen, meme pas de primites de synchronisation (cf les efforts pour avoir des structures de donnes "lock free" : ); return false;" rel="nofollow" target="_blank">https://en.wikipedia.org/wiki/Lock-free_and_wait-free_algorithms, http://www.audiomulch.com/~rossb/code/lockfree/)
- tu ne veux pas avoir de defaut de page: tu fais en sorte de bloquer toute la memoire utilisee par ce thread dans la memoire vive.
-

Bref, tu peux pas faire ca avec du C# (tout ce qui concerne la memoire, a moins que tu puisses definir des policy speciales pour le GC selon les threads, ce qui serait assez impressionant).

Citation :
Enfin ce que je voulais dire par la, c'est que les pointeurs c'est pratique pour manipuler certaine structure de données, en est-il de meme (au point de vue éfficacité) si l'on ne dispose pas de pointeur? (et l'allocation mémoire).



Je connais rien au sujet dont tu parles (automates et cie), donc je peux pas trop m'avancer. Par contre, je vois pas le rapport entre structure de donnees et pointeurs. Je vois pas une seule structure qui ne soit pas utilisable dans un langage sans pointeur et qui soit implementable qu'en C. En tout cas, tous les trucs basiques (listes, queues, hash, arbres, etc...) sont presents d'office dans quasiment tous les langages modernes.

Pour ce qui est de la memoire dynamique, je pense vraiment qu'en general, tu ne devrais pas a t'en soucier. D'ailleurs, si tu utilises les techniques "modernes" du C++ (smart pointer, container), tu ne controles plus ces aspects la, et la, le C++ n'a plus vraiment d'avantage par rapport a d'autres langages vis a vis de l'efficacite. Par exemple, utiliser un truc a base de listes et hash, je suis pas sur que le C++ soit beaucoup plus rapide que du java ou du OCAML, par exemple.

Pour ce qui est des jeux video, je pense pas qu'il faille prendre ca comme de s jouets. J'ai plutot l'impression au contraire que c'est ce qu'il y a de plus sophistique comme logiciel avec un OS, au niveau de l'architecture.