OVH Cloud OVH Cloud

Erreur du preprocesseur

113 réponses
Avatar
candide
Bonjour,

Dans le bouquin de Ph. Drix ("Le langage C ANSI"), je trouve l'exemple
suivant pour illustrer les "substitutions réitérées" par le préprocesseur :


------------- 8< -------------------------------
#define w 0,1
#define f(x,y) (x)+(y)

f(w) /* est remplacé par (0)+(1) */
------------- >8 -------------------------------


Or, chez moi sur gcc, ça ne marche pas :

------------- 8< -------------------------------
candide@candide-desktop:~$ gcc -E test.c

test.c:4:4: erreur: macro « f » requiert 2 arguments, mais seulement 1
ont été passés
f
------------- >8 -------------------------------

Pourtant il me semble que l'exemple est valide, non ?

10 réponses

Avatar
wykaaa
Le Mon, 31 Mar 2008 15:18:28 +0200, Marc Espie a écrit:

In article , wykaaa
wrote:
Comment comparer Java et Python ????
Java est utilisé dans des applications importantes qui requièrent
fiabilité, évolutivité, etc. (comme les applications militaires).
Où est Python dans l'industrie ??? NULLE PART
Python est bien un langage marginal.


Enleve tes oeilleres, ca te fera du bien...

Python est utilise pour pas mal de choses. Sans doute pas dans les coins
que tu frequentes. Il y a un corpus tres important de code utilise en
simulation par exemple, et l'exemple que cite Candide n'est pas du tout
anecdotique: python tend a remplacer pas mal d'autres solutions pour
le pilotage d'experiences.

Il y a de meme un corpus important d'applications OpenSource developpees
en python.

Le plus gros defaut du langage, c'est certainement qu'il n'est pas tout
seul dans son domaine habituel. Ca se partage entre python, perl, php, et
ruby... donc forcement, si tu regardes l'un des 4, tu as une vision un
peu
reduite...

Mais ce sont d'excellents langages pour les gens qui ont ce type de
besoin.
Marginal pour l'informaticien pur, pas du tout marginal pour le
scientifique
qui a besoin de programmer des manips pour obtenir un resultat.

Pour repondre a candide: si tu as des inquietudes quant a la perennite de
python, il y en a pour une bonne dizaine d'annees, au moins, avant que la
tendance actuelle s'inflechisse.


Ah, et python est utilise dans l'industrie... du jeu.
La couche de haut niveau de Civ4, par exemple, c'est du python. ;-)


J'ai peut-être des oeillères mais je ne suis intervenu dans ma carrière
(j'arrive à la retraite...) que sur des projets d'au moins 200 000 lignes
de code et ça approchait le plus souvent le million ou plusieurs millions.
dans ce cadre là, des langages comme Python font plutôt figure de langages
jouets.

Et puisque tu cites quelques langages du même ordre, sache que ruby a
toutes mes faveurs dans cette famille de langages.

J'ai audité des millions de lignes de code (à l'aide de Logiscope). Ce que
je peux dire c'est que, même dans les domaines les plus pointus et qui
requièrent une grande fiabilité et sûreté de fonctionnement comme le
nucléaire, l'avionique ou le spatial, il n'y a pas 10% de programmeurs qui
programment "proprement. Ce n'est pas avec des langages comme Python
qu'ils vons le faire...

Mais je suis d'accord que pour des non informaticiens scientifiques qui
doivent faire des petites simulations ou des petits modèles, ce genre de
langage peut rendre des services mais alors il ne faut pas parler
d'informatique au sens industriel du terme (quand je dis industriel, je
rapproche la fabrication de logiciels à la fabrication d'automobiles ou
d'avions).


Avatar
Thierry B.
--{ wykaaa a plopé ceci: }--

La question que je me pose c'est : que sera Python dans 5 ans ?
Peut-être un langage complètement délaissé. Je ne vois pas qu'on
enseigne Python dans les facs ou dans les écoles, j'ai l'impression que



Pourtant, j'aimerais bien que ça soit enseigné dans les écoles.
C'est (opinion personnelle) un langage qui est à la fois facile:
on arrive très vite à faire des petits programmes qui marchent,
et didactique: pour que ça soit facile, il faut être un brin
rigoureux, un brin précis, il faut réfléchir avant d'écrire la
moindre ligne. Testé et approuvé par mes deux enfants (10 & 13).

Quand à son enseignement dans les facs, je dis oui aussi. Pour
les mêmes raisons, d'abord; et surtout pour les domaines couverts:
calcul scientifique, traitement du texte, interfaces graphiques,
interfaces avec d'autres langages/logiciels. On peut le voir comme
un langage "glue" qui permet de concentrer ses efforts sur le
résultat à atteindre, et pas sur les moyens à utiliser.

c'est un langage marginal voire déconsidéré. Par contre, Java, lui est
toujours là.


Comment comparer Java et Python ????


En essayant les deux ? Ou mieux, en demandant à son gamin de
tester :)

Java est utilisé dans des applications importantes qui requièrent
fiabilité, évolutivité, etc. (comme les applications militaires).


Fiabilité et Java, mmm, j'ai un doute, là. (j'vais m'faire des
ennemis, je crois). Enfin, ça a peut-être changé depuis le
temps où j'en faisais sérieusement...

Où est Python dans l'industrie ??? NULLE PART


Google, Yahoo, Zope/Plone, les jeux, que sais-je encore...

Python est bien un langage marginal.


Entre la marge et la limite, quoi...

+++ et comme ça commence à devenir HC, je vais me permettre un
multipost d'enfer, avec un foutou à suivre pour ceux qui
veulent bien continuer à discuter des langages de demain,
et de leur utilisation dans l'enseignement.


--
rpm -q --qf "%{NAME}t%{OS}t%{ARCH}n" -p /proc/kcore /dev/kmem


Avatar
Francois
J'ai audité des millions de lignes de code (à l'aide de Logiscope). Ce
que je peux dire c'est que, même dans les domaines les plus pointus et
qui requièrent une grande fiabilité et sûreté de fonctionnement comme le
nucléaire, l'avionique ou le spatial, il n'y a pas 10% de programmeurs
qui programment "proprement".


Ce n'est pas très rassurant cela, moi qui aimait bien l'avion jusqu'à
présent. :-)

Ce n'est pas avec des langages comme Python
qu'ils vons le faire...


Ben, au moins, avec Python, on est sûr que le code sera bien indenté. :-))


François

Avatar
wykaaa
Le Mon, 31 Mar 2008 16:27:56 +0200, Thierry Chappuis
a écrit:


Comment comparer Java et Python ????
Java est utilisé dans des applications importantes qui requièrent
fiabilité, évolutivité, etc. (comme les applications militaires).
Où est Python dans l'industrie ??? NULLE PART
Python est bien un langage marginal.


Bonjour,

C'est comme tout! The right tool for the right job. Suis-je le seul à
utiliser ce langage? Je ne crois pas qu'il soit si marginal que vous ne
semblez le penser: http://wiki.python.org/moin/OrganizationsUsingPython.
Dans le domaine du web, Python est notamment à la base de YouTube. Yahoo
et Google l'utilise de manière intensive et Django est un des frameworks
web les plus en vogue actuellement.


Pour le Web, les gens utilisent n'importe quoi et il n'y a qu'à regarder
les résultats catastrophiques concernant l'interopérabilité
multi-plateformes (les sites qui ne marchent qu'avec tel OS ou tel
navigateur, ou le machin flash dernier cri, etc.). Je rappelle (étant un
très vieil utilisateur d'Arpanet et d'Internet, bien avant le Web) que les
développeurs pionniers du réseau des réseaux se sont toujours efforcé,
dans leur choix, de faire en sorte que les protocoles et les outils soient
indépendants des plateformes.

Mais Python ne se limite pas au web. Son usage monte considérablement en
puissance dans le domaine de la programmation scientifique (qui est plus
mon domaine que le web). En effet, couplé à des modules tels que NumPy
et Scipy, il allie facilité de codage et facilité d'interfaçage avec des
langages tels que Fortran, C ou C++. Dans ce domaine d'application, la
NASA, pour ne citer qu'elle, utilise Python de manière extensive.
Peut-être pas pour les tâches les plus critiques, mais de là à parler de
Python comme un langage marginal, il y a un pas que j'hésiterais à
franchir.


La NASA n'utilise pas des lanages du genre Python pour les tâches
critiques.

Les applications de Python sont nombreuses et le nombre de ses
utilisateurs est en constante augmentation. Si on se fie aux différentes
études publiées ici:
http://www.developpez.net/forums/showthread.php?tG7194, ce langage ne
semble avoir le vent en poupe.


Très intéressant mais comme le fait remarquer zeavan dans le forum, cela
reflète plus le monde académique.
Je remarque une forte poussée de Ruby, qui est un bien meilleur langage
que Python , dans le même genre de famille de langage

Je ne le cache pas, j'apprécie beaucoup ce langage. Bien que je
programme beaucoup en C++ et en C, c'est le langage vers lequel je me
dirige en premier lieu lorsque ce choix dépend de moi, et précisément
pour les raisons qui lui sont reprochées dans les interventions qui
précèdent. Ces points forts sont à mon avis sa simplicité et sa
souplesse, sa bibliothèque standard extrêmement fournie, sont typage
dynamique et fort, son modèle objet élégant, etc.


Il est hors de question d'utiliser un langage à typage dynamique dans des
applications qui requièrent une très grande fiabilité et une excellente
sûreté de fonctionnement.

Je ne pense toutefois pas qu'il soit plus approprié qu'un Pascal ou que
ADA voir OCaml pour un apprentissage de la programmation. Ces langages
ont le grand mérite, selon moi, d'imposer une grande rigueur dans le
codage, ce qui est bonne chose pour cadrer les premiers pas d'un
débutant. Python est simple à prendre en main et force les bonnes
habitudes de programmation, mais le fait créer des varaibles sont les
déclarer est peut-être une liberté potentiellement source d'erreur pour
un débutant.


Le fait de povoir utiliser des variables ssans les déclarer est une source
d'erreur inépuisable même pour des professionnels aguerris !
De tels langages doivent être bannis dans l'industrie du logiciel et
rester dans les labos pour du maquettage et surtout ne pas être montrés à
des étudiants.


En ce qui concerne l'apprentissage, je suis assez vieux jeu. Je trouve
Pascal bien. Ada également, quoique basculant dans l'autre extrème du
trop rigoureux. C++ avec une approche à la "AC++" me séduit assez, mais
je n'ai pas essayé avec des étudiants.


Je vous garantis qu'utiliser ADA comme langage d'apprentissage à la
programmation donne les meilleurs résultats.
Les étudiants qui ont appris la programmation avec ce langage ne coderont
jamais de façon aussi sale que les soi-disants gourous ou virtuoses du
C++, du Python ou de je ne sais quel machin permettant toutes les folies...

Enfin, la vie d'un langage, c'est comme notre vie à nous. On ne peut pas
plaire à tout le monde et ce n'est pas plus grave que cela. Si les
problèmes d'indentation sont causes de misère chez vous, soit.
Personnellement, mon dévoué vim ne m'a jamais causé aucun soucis de
cette nature.
Je crois que vous ne mesurez pas bien (mille excuses de le penser) les

ravages que peuvent faire de tels traits de langage dans un environnement
industriel qui requiert une grande fiabilité.
Perso, je tremblerais si je savais que les centrales nucléaires sont
codées en Python ou tout langage du même genre.
Je tremble déjà en ayant vu certains bouts de codes en C pour celle-ci).
Heureusement, la majeure partie est en ADA (tout comme pour la fusée
Ariane).

Meilleures salutations


A vous aussi

Wykaaa


Avatar
wykaaa
Le Mon, 31 Mar 2008 22:21:06 +0200, Francois a
écrit:

J'ai audité des millions de lignes de code (à l'aide de Logiscope). Ce
que je peux dire c'est que, même dans les domaines les plus pointus et
qui requièrent une grande fiabilité et sûreté de fonctionnement comme
le nucléaire, l'avionique ou le spatial, il n'y a pas 10% de
programmeurs qui programment "proprement".


Ce n'est pas très rassurant cela, moi qui aimait bien l'avion jusqu'à
présent. :-)


Quand je dis programmer "proprement", je ne parle pas des bogues
potentiels, je parle de la programmation qui permet une meilleure
évolutivité, maintenabilité, interchangeabilité, lisibilité, etc. du code.

Moi aussi j'aime bien l'avionet ma constatation ne m'en privera pas malgré
tout...

Ce n'est pas avec des langages comme Python qu'ils vons le faire...


Ben, au moins, avec Python, on est sûr que le code sera bien indenté.
:-))


Je vois que vous conservez une bonne dose d'optimisme et d'humour. C'est
réjouissant !

Wykaaa


Avatar
candide


J'ai audité des millions de lignes de code (à l'aide de Logiscope). Ce
que je peux dire c'est que, même dans les domaines les plus pointus et
qui requièrent une grande fiabilité et sûreté de fonctionnement comme le
nucléaire, l'avionique ou le spatial, il n'y a pas 10% de programmeurs
qui programment "proprement.



La faute aux variables globales !! :)) Non sérieux , tu peux un peu
détailler stp, enfin concernant le C pour pas être trop hors-sujet ?
Quand tu dis que 90% ne savent pas programmer des applications
nécessitant une grande sécurité, quelle part de l'incompétence
attribues-tu à une mauvaise connaissance (universitaire) du langage C
lui-même ? est-ce juste une question de formation incomplète au pas
assez poussée ou une question de relâchement dans la façon de coder ?



Mais je suis d'accord que pour des non informaticiens scientifiques qui
doivent faire des petites simulations ou des petits modèles, ce genre de
langage peut rendre des services mais alors il ne faut pas parler
d'informatique au sens industriel du terme (quand je dis industriel, je
rapproche la fabrication de logiciels à la fabrication d'automobiles ou
d'avions).


Et à l'heure actuelle, on utilise massivement quel langage en
informatique industrielle ? Vois-tu un avenir au C "industriel" autre
que de la maintenance d'applications (tout du moins dans le domaine que
tu connais) ?

Merci, je suis très intéressé par tes réponses.

Avatar
Francois
Ce n'est pas très rassurant cela, moi qui aimais bien l'avion jusqu'à
présent. :-)


Quand je dis programmer "proprement", je ne parle pas des bogues
potentiels, je parle de la programmation qui permet une meilleure
évolutivité, maintenabilité, interchangeabilité, lisibilité, etc. du code.


D'accord. Je pense que visiblement vous vous placez dans le cadre d'un
projet à grande échelle, avec un très haut niveau d'exigences. Dans ce
cadre, c'est certain que Python n'est pas adapté. En fait, nous sommes
tous d'accord là-dessus je pense. Mais pour le petit programmeur du
dimanche (comme moi et encore seulement l'après midi), Python est très
bien adapté, il me semble. Je le trouve très «user-friendly». Récemment,
Python (+ LaTeX) m'a bien rendu service pour générer des lettres
personnalisées avec relevé de notes à un bac blanc, ça m'a bien amusé de
le faire. Mais on est plus dans la même catégorie, bien sûr.

D'ailleurs, au passage, comment on fait pour gérer du code de plusieurs
millions de lignes. Ça peut quand même pas être l'affaire d'une seule
personne ? Qui pourrait avoir une vision globale d'un tel projet ? Il
doit forcément (même à plusieurs) des choses qui nous échappent, non ?

François


Avatar
candide
Je pensais que l'indentation chez Python était une force et je
découvre qu'en fait ce point est un vrai sujet de controverse.


Tout à fait, c'est la première chose que dit notre ami Thomas Pornin et
il s'étend longuement dessus. En fait, c'est la deuxième qu'il dit, la
première étant :

"Python, c'est une sorte de Perl en costume du dimanche",

poétique non ?

Avatar
espie
In article , wykaaa wrote:
Très intéressant mais comme le fait remarquer zeavan dans le forum, cela
reflète plus le monde académique.
Je remarque une forte poussée de Ruby, qui est un bien meilleur langage
que Python , dans le même genre de famille de langage


Bien meilleur ? en quoi ? pour l'instant, l'implementation se traine
un peu, etant purement interpretee et sans byte-code... ce qui la plombe un
peu par rapport aux voisins.

Avatar
Wykaaa
Ce n'est pas très rassurant cela, moi qui aimais bien l'avion jusqu'à
présent. :-)


Quand je dis programmer "proprement", je ne parle pas des bogues
potentiels, je parle de la programmation qui permet une meilleure
évolutivité, maintenabilité, interchangeabilité, lisibilité, etc. du
code.


D'accord. Je pense que visiblement vous vous placez dans le cadre d'un
projet à grande échelle, avec un très haut niveau d'exigences. Dans ce
cadre, c'est certain que Python n'est pas adapté. En fait, nous sommes
tous d'accord là-dessus je pense. Mais pour le petit programmeur du
dimanche (comme moi et encore seulement l'après midi), Python est très
bien adapté, il me semble. Je le trouve très «user-friendly». Récemment,
Python (+ LaTeX) m'a bien rendu service pour générer des lettres
personnalisées avec relevé de notes à un bac blanc, ça m'a bien amusé de
le faire. Mais on est plus dans la même catégorie, bien sûr.


Oui c'est exactement ça. Et si vous, programmeur du dimanche après-midi
:-), avez pris plaisir à utiliser Python et qu'en plus cela vous a rendu
des services alors... continuez.
Pardonnez-moi mais je suis certinement déformé par les projets et les
milieux que j'ai fréquentés qui requièrent effectivement un très haut
niveau d'exigence concernant la fiabilité et la sûreté de fonctionnement.

D'ailleurs, au passage, comment on fait pour gérer du code de plusieurs
millions de lignes. Ça peut quand même pas être l'affaire d'une seule
personne ? Qui pourrait avoir une vision globale d'un tel projet ? Il
doit forcément (même à plusieurs) des choses qui nous échappent, non ?


C'est un peu long à développer mais il faut faire référence aux normes
internationales de développement (faut comprendre l'anglais technique
écrit...) comme les "Software Practices" de l'IEEE (hélas c'est payant)
ou le NASA System Engineering Handbook (cf.
http://www.ap233.org/ap233-public-information/reference/HANDBOOK_NASA-SE-Handbook.pdf/view)
ou encore les normes OTAN.
L'ensemble des méthodes, techniques et outils à mettre en oeuvre pour de
tels projets relèvent de ce qu'on appelle le "génie logiciel" (Software
Engineering" en anglais)

Il est clair qu'un projet de plusieurs millions de lignes de code ne
peut être appréhendé par une seule personne.

Un cerveau moyen, en maintenance, dans un langage de haut niveau comme
ADA, ne peut guère appréhender plus de 50 mille lignes de code. Les
meilleurs atteignent 100 mille.

Pour te donner une idée, l'ensemble des logiciels (y compris les
programmes de tests, les simulations logicielles, etc.) pour l'ISS
représentent environ 80 millions de lignes de code.

Mais un simple compilateur COBOL fait déjà dans les 250 mille lignes de
code.

Wykaaa