OVH Cloud OVH Cloud

a-t-on le choix ?

444 réponses
Avatar
Tom
Bonjour,

On voit souvent des "quel linux choisir ?", des "pourquoi linux ?" etc.
Mais finalement à devoir choisir entre la peste (du côté de chez MS) et
la grippe (notre bon vieux nunux), celà ne vous arrive pas le matin en
vous réveillant de vous dire que les programmes qui font fonctionner
votre machines ne sont que des bidouillages plus ou moins réussis ?

Regardez les codes sources d'un programme en C. Même le code d'un bon
programmeur n'est rempli que d'horreurs. Ce fameux "void" : c'est quoi
cette abomination de la programmation ? Il n'y a aucune sémantique
valable là derrière. D'ailleurs les types en C n'ont de type que le nom.
Comment se fait il qu'on puisse écrire dans la 11e case d'un tableau de
10 éléments. Ce langage surestime beaucoup les capacités des personnes
qui vont l'utiliser. Une telle chose ne doit pas être possible. Comment
imaginer que ce genre de choses peut être voulu par le programmeur ?
Je pense que vous avez déjà vu du JAVA. Mais c'est à gerber cet
emboîtement de new, cette masse colossale de classes à faire pour faire
trois fois rien ! J'ose même pas imaginer la quantité de calculs
inutiles faits par la machine pour gérer ces merdes. D'accord il y a de
l'optimisation, mais c'est loin d'être suffisant.
Dans le temps les programmes étaient bidouillés parce qu'il n'y avait
pas assez de mémoire : par exemple on utilisait une variable pour
stocker deux informations. Maintenant l'horreur est à l'autre extrême :
on a tellement de mémoire de disponible que l'on utilise trop. En C :
tant pis c'est perdu. Un trou de mémoire ? Tant que le pc doit pas
redémarrer toutes les heures à cause de ça on s'en fout. En JAVA : il y
a le ramasse miettes alors on peut bouffer de la mémoire : c'est pô grave.
Dès que les programmes ont commencé à ne plus rentrer sur une disquette
ils sont devenus beaucoup trop compliqués pour fonctionner correctement.
On en vient à une époque où on trouve acceptable un programme quand il a
moins de cent bugs alors que rien que le fait de consommer trop de
ressources fait que le programme n'est pas bon. Aujourd'hui on nous
parle de .NET et de merdouilles dans le genre. A quoi ça sert de se
lancer dans la création de langages qui se copient les uns les autres.
C, C++, JAVA, Pascal : c'est la même chose, la même façon de penser. Et
c'est une manière de penser qui pousse à faire des fautes.
Bref l'informatique ne va pas fort.

Tom

10 réponses

Avatar
Nicolas George
Joe Cool , dans le message <422f2845$0$18054$, a
écrit :
Je suis désolé mais cette erreur vient de votre système.


Non, cette erreur est tout à fait normale, c'est juste toi qui dis des
conneries sur Caml comme sur le C.

Avatar
JustMe
Nicolas George avait énoncé :
JustMe , dans le message , a
"possible" ou "facile" ?


« évidemment possible », c'est à dire possible d'une manière assez simple
pour que le compilateur la voie.


donc peu utile.


Avatar
JKB
Le 09-03-2005, à propos de
Re: a-t-on le choix ?,
Tom écrivait dans fr.comp.os.linux.debats :
C'est comme l'ISO 9001 qui permet de faire de la m*rde lorsqu'on l'a
spécifié ;-)

JKB


Le C c'est la liberté... de faire des non programmes, des trucs qui
n'ont aucune signification. Mais c'est dans les normes du C alors c'est
bon ça compile. On serre les fesses à l'exécution et si c'est bien
rustiné (un néologisme ? très utile en tout cas) ça passe plus ou moins
bien.


Ce n'est pas tout à fait mon propos. Le C est un langage batard,
mais à partir du moment où on arrive à contourner tous les
"implementation defined" et "undefined result", on arrive à faire
des trucs intéressants. Le problèmes, c'est que pour faire la même
chose, avec la même fiabilité qu'un bout de code ADA ou Fortran, il
faut trois fois plus de lignes (et je suis gentil). Même le
mécanisme de gestion des erreurs et des exceptions est une rustine
(tm) ! Renvoyer une valeur pour savoir si la fonction s'est bien
passée (et se contre foutre de la non lecture de cette valeur...),
c'est vraiment le mécanisme le plus foireux existant... Et je ne
parle pas des errno...

JKB


Avatar
Blaise Potard
Joe Cool wrote:

La machine vérifie le type et le devine en observant la manière dont le
programme utilise ses données. On évite les erreurs de typage dues au
programmeur et on certifie que le programme ne peut en aucun cas générer
d'erreur d'exécution : un programme typé statiquement ne peut pas planter.


On ne certifie certainement pas cela. Une récursion mal écrite et ton
programme plante. Et ne me dit pas que c'est du à la limitation des
ressources de la machine, de toute façon un tel programme va être faux,
donc qu'il plante ce n'est pas plus mal. D'autre part, là tu parles des
avantage de l'inférence de type et du typage fort, pas du typage
statique. Un bon programme en C est typé statiquement (avec un typage
faible, certes). Tu vois, je suis tout à fait d'accord que pour beaucoup
de choses le langage caml est très largement supérieur au C, mais pas à
cause du fait que le typage soit statique. Le typage statique des objets
est un avantage par rapport à d'autres langages OO par contre ; mais
c'est un autre débat (d'ailleurs, maintenant que j'y pense, ce débat n'a
pas grand chose à voir avec linux, mais bon).

Preuve de quoi ? De la cohérence des types ? De la correction du
programme (ce qui est en générale ce qu'on appelle preuve, et qui est
très difficile à faire automatiquement puisque la machine est
incapable de deviner ce qu'on veut faire, et à même beaucoup de mal à
comprendre quand on lui explique), certainement pas. En même temps, ça
m'arrangerait, comme tout mes programmes C sont correctement typés, ça
prouverait qu'ils sont corrects.



Non car le système de type du C est incohérent. Le système de typage de
caml génère pour chaque programme la preuve qu'il utilise ses données de
manière cohérente : il génère la preuve que le programme ne peut pas
planter. Du moins si il plante, ce n'est pas de sa faute mais celle du
système d'exploitation ou du matériel.


Ou surtout du programmeur qui programme comme un manche...
Le système de type du C n'est pas incohérent. Le typage est faible, il y
a des conversions implicites qui sont parfois gênantes, mais c'est tout.
Évidemment, la permissivité du C permet de faire un peu n'importe quoi
sans nécessairement le signaler, et du coup on ne peut effectivement pas
garantir la cohérence du typage des données (mais ça, dès que l'on
utilise des pointeurs, ce n'est de toute façon pas possible).

Honnêtement, pour quelqu'un qui programme depuis longtemps, les erreurs
de typage sont assez rares. Par contre, les dépassements
de mémoire ça arrive bien souvent, mais ça, aucun compilateur n'est
encore capable de le détecter, et ça n'a strictement rien à voir avec le
typage. La plupart des erreurs, c'est encore au niveau des calculs que
l'on effectue qu'elles se situent (oubli d'appeler une sous-fonction,
erreur d'indice,...). Évidemment, si tu n'as qu'une confiance relative
dans les capacités de ton programmeur, ne le laisse surtout pas
programmer en C, c'est la meilleur chance d'avoir un truc illisible et
non portable, en plus de buggué.


Avatar
Nicolas George
Tom , dans le message <422f23d0$0$31661$, a
écrit :
Par contre on ne
pourra pas contredire le fait qu'on puisse écrire dedans


On ne peut pas écrire dedans, puisqu'elle n'existe pas. Tu es du genre à
regarder les cavaliers sans têtes dans les yeux qu'ils n'ont pas, toi ?

Avatar
JKB
Le 09-03-2005, à propos de
Re: a-t-on le choix ?,
JustMe écrivait dans fr.comp.os.linux.debats :
Il se trouve que Tom a formulé :
Ah ? Un programme qui plante c'est la faute du systeme maintenant :-D


Le programme ne gère pas la mémoire.

Tom


Le programme demande de la mémoire au systeme qui lui repond "oui" ou
"non"


Ou peut-être.

Apres, le traitement du "non" est parfois baclé par des programmeurs
merdiques...


s/bâclé/négligé/

Et personne n'assure que si malloc() renvoie un pointeur non NULL,
la mémoire est utilisable. Tout ce que l'on sait, c'est que si le
pointeur retourné est NULL, il y aura un problème...

JKB



Avatar
Richard Delorme
Le 09-03-2005, à propos de
Re: a-t-on le choix ?,
Richard Delorme écrivait dans fr.comp.os.linux.debats :


Sous DOS (Borland C) :
short = 16 bits
int = 16 bits
long = 32 bits

Sous Linux i386 (gcc) :
short = 16 bits
int = 32 bits
long = 32 bits

Sous Linux alpha (gcc) :
short = 16 bits
int = 32 bits
long = 64 bits

Sous sparc64, idem.

Maintenant, portez moi un code utilisant int et long de DOS à
sparc64 pour rigoler ! Là, on commence à apprécier sérieusement les
integer*8 (un peu hors norme) du Fortran ! Ça fait vingt ans que je
code en C, et pour l'instant, je n'ai pas trouvé mieux et plus
portable que des grands coups de typedef conditionnés par un script
configure.


Ben, il faut arrêter les trucs d'il y a vingt ans.

#include <stdint.h>
ou sur les systèmes Unix un peu vieillot
#include <inttypes.h>

Dedans on trouve des types à taille garantie :
int8_t
int16_t
int32_t
int64_t
etc.


D'accord. Pas portable pour un sou. J'ai essayé. Au passage, ce truc
ne vous garantit jamais la structure même de l'entier.


C'est portable entre les compilateurs qui supportent la norme C99.

--
Richard



Avatar
Tom
Apres, le traitement du "non" est parfois baclé par des programmeurs
merdiques...
On revient au problème entre la chaise et le clavier. Problème qui est

traité trop à la légère dans le C.


Tom

Avatar
JustMe
JKB avait énoncé :
Le 09-03-2005, à propos de
Re: a-t-on le choix ?,
JustMe écrivait dans fr.comp.os.linux.debats :
Il se trouve que Tom a formulé :
Ah ? Un programme qui plante c'est la faute du systeme maintenant :-D


Le programme ne gère pas la mémoire.

Tom


Le programme demande de la mémoire au systeme qui lui repond "oui" ou
"non"


Ou peut-être.


"peut etre" ? Un systeme qui fait de la logique floue ? Ah ?

C'est windows ? ;-)


Apres, le traitement du "non" est parfois baclé par des programmeurs
merdiques...


s/bâclé/négligé/


non, baclé. Reserver de la mémoire sans se soucier de l'echer ou de la
reussite de la reservation c'est du travail baclé


Et personne n'assure que si malloc() renvoie un pointeur non NULL,
la mémoire est utilisable.


Ah ? Source ?

Tout ce que l'on sait, c'est que si le
pointeur retourné est NULL, il y aura un problème...





Avatar
JustMe
Apres, le traitement du "non" est parfois baclé par des programmeurs
merdiques...
On revient au problème entre la chaise et le clavier. Problème qui est traité

trop à la légère dans le C.


Tom


Et pas mieux en caml d'apres l'exemple :-D