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
Tom , dans le message <422f2d0f$0$27244$, a
écrit :
Selon le langage la preuve est plus facile à faire ou pas.


Précisément. Une différence quantitative, pas qualitative.

Une image est une matrice (voire plusieures). Un son est un vecteur si
on considère qu'il est digitalisé. Un paquet réseau est un ensemble
d'entiers d'un nombre fixé, un type somme en fait. Voilà tout est
modélisé. Ca a été dûr.


Tu rigoles j'espère. Pars de la description humainement lisible d'un
protocole, disons TCP, et traduis en langage formel ce que ça veut dire.
C'est extrêment difficile.

Avatar
Nicolas George
Richard Delorme , dans le message
<422f3453$0$17033$, a écrit :
(c n'est pas une lvalue).


<tetratomie>

Si, d'ailleurs on peut légalement écrire &c.

</tetratomie>

Avatar
Nicolas George
Joe Cool , dans le message <422f3883$0$15677$, a
écrit :
Vous avez
beau critiquer la mienne (en fait vous la rejettez sans justification),
au moins elle veut dire quelque chose.


Elle veut dire quelque chose qui n'est pas une notion intéressante. Savoir
ce qui est intéressant ou pas comme notion n'est pas justifiable
rigoureusement, mais on peut le voir en pratique. Ta définition de
portabilité donne un thread ou deux gus se ridiculisent sur fcold. « Ma »
définition de portabilité donne un noyau Linux qui tourne sur vingt
architectures différentes en tirant partie de leurs performances. C'est vite
vu.

Avatar
Nicolas George
JustMe , dans le message , a
écrit :
Donc la "Preuve Mathématique" n'est pas forcément possible


Oui.

Ce qui doit etre prouvé c'est la proposition "Le programme correspond
exactement au but X"
Le fait que X existe ne rend pas la proposition en question décidable
pour autant.


Effectivement. Mais justement, si tu n'arrives pas à prouver que ton
programme marche, c'est _probablement_ parce qu'il ne marche pas. Quand tu
écris le programme, tu l'écris pour qu'il marche, ce qui signifie que tu as
une vue intuitive des grandes lignes de la preuve. C'est donc se placer _a
priori_ dans un cas qui est décidable.

D'autant que X n'est pas forcément correctement defini. Mais là c'est
un autre probleme... ;-)


Tout à fait.

Avatar
Joe Cool
Joe Cool , dans le message <422f2845$0$18054$, a

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.


Je voudrais bien savoir pourquoi ce programme qui est sensé planter me
renvoie une gentille exception Stack_overflow aussi bien en version
code-octet qu'en version native.

--
Joe Cool


Avatar
Joe Cool


Bien sûr, une preuve ça ne sert à rien.

Quand je doit démontrer un truc sur les entiers, je me dis à quoi bon me
fatiquer à faire une preuve qui ne sert à rien : je vais la tester sur
les 8 premiers entiers, c'est bien suffisant.

1 est premier



Ah bon ?


Oui, car il n'est divisible que par 1 et par lui même.

--
Joe Cool


Avatar
Eric Jacoboni
Nicolas George <nicolas$ writes:


(c n'est pas une lvalue).


<tetratomie>

Si, d'ailleurs on peut légalement écrire &c.

</tetratomie>


On va dire que ce n'est pas une lvalue modifiable, alors...

--
Éric Jacoboni, né il y a 1413832428 secondes


Avatar
Joe Cool
Joe Cool , dans le message <422f1ee4$0$31419$, a

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



Or comme cette preuve est indécidable, le langage Caml restreint
considérablement ce qu'il est autorisé d'écrire pour forcer le programmeur à
rester dans les cas que sait traiter le compilateur. Ça fait une limitation
d'expressivité extrêmement forte. À tel point, d'ailleurs, qu'il y a à
plusieurs endroits de la bibliothèque standard de Caml des usages de
Obj.magic pour contourner la limitation.


Ce n'est pas bien de contourner le système de type. Dans ce cas, autant
ne rien typer.

--
Joe Cool


Avatar
Richard Delorme


Un typage *est* une preuve.



Qui ne sert à rien. Lire p.ex. :
http://mindview.net/WebLog/log-0025
« In fact, what we need is

*Strong testing, not strong typing.*
»



Bien sûr, une preuve ça ne sert à rien.


En pratique, ça sert peu.


Quand je doit démontrer un truc sur les entiers, je me dis à quoi bon me
fatiquer à faire une preuve qui ne sert à rien : je vais la tester sur
les 8 premiers entiers, c'est bien suffisant.

1 est premier


Non, 1 n'est pas premier, et il manque 2 qui est premier.

3 est premier
5 est premier
7 est premier
donc tous les entiers impairs sont premiers


Bon exemple. Sur les 8 premiers entiers, 3 sont impairs et 1 autre est
pair, donc on n'en conclut rien du tout. Ici, le test suffit, pas besoin
de s'embêter avec un truc plus compliqué.

--
Richard



Avatar
Joe Cool
Joe Cool , dans le message <422f210e$0$31419$, a

La détection des fuites de mémoire l'est peut être, mais la prévention
des fuites est on ne peut plus décidable. On appelle ça des ramasse-miettes.


Oui, et ça a un coût très important en efficacité, surtout au moment où la
mémoire utilisée par le programme dépasse la mémoire physique de l'hôte. Dès
lors, permettre une gestion plus fine, mais non décidable par le
compilateur, est indispensable.


Le coût est amorti, ce qui occasionne un ralentissement négligeable. En
tout cas ça a l'air de bien marcher en pratique.

--
Joe Cool