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
Tom

"Typage statique" ? Qu'est-ce que tu veux dire par là ?
Je voulais dire typage dynamique. Je me suis trompé. L'important c'est

l'idée : c'est Caml qui génère le type. Ce qui fait des types de Caml de
*vrais* types et pas juste des récorations pense-bête pour le
programmeur pour qu'il se souvienne de ce que contient son espace mémoire.

À un point que les casts sont bien souvent
indispensables (et un cast, c'est faire appel à une fonction qui
convertit un objet d'un certain type vers un autre objet d'un autre
type).
Changer de type c'est comme changer de sexe : ça n'a pas de sens.


Alors que OCaml, comme tout langage objet, a des types dynamiques
à cause de l'héritage de classe.
Les types de Caml n'ont rien à voir avec les classes. Les classes ne

font pas partie des spécifications de Caml : c'est une couche rajoutée
par l'implémentation Objective Caml. Le système de typage est en dessous.

Lol. T'en as beaucoup des comme ça ?
Allez lire des livres sur les lambda-calculs typés et on en reparlera.

Visiblement vous ne savez pas de quoi vous parlez.

Évidemment, avoir un typage
rigoureux est une des conditions pour faire une preuve de programme,
mais c'est loin de suffir. J'ai un collègue qui travaille là-dessus, qui
prouve des propriétés pour des fonction d'arithmétique d'intervalle (il
cherche à prouver la correction des différentes fonctions de la
bibliothèque d'arithmétique d'intervalle de Boost, qu'il maintient). Et
ben, rien que pour prouver que suivant le mode d'arrondi on aura pas de
couille, je peux t'affirmer que c'est pas de la tarte. Alors quand tu
racontes ce genre de choses, tu m'excuseras, mais tu me fais doucement
rigoler. Je pense que la seule chose que tu prouves c'est que tu ne sais
pas (mais alors vraiment pas) du tout de quoi tu parles.


Ca me ferait bien chier. Je n'ai pas dit que c'était toujours facile de
prouver les programmes, mais que c'est nécessaire. Je vous renvoie au
discours de Dijkstra a prononcé lorqu'il a recu le prix Turing en 1972.
Comme quoi l'idée ne date pas d'hier.

Tom

Avatar
Tom
Quand j'ai vu smalltalk et que je vois ce que je me tape au boulot, j'ai
tout de suite commencé à pleurer et je continue toujours à pleurer.
Maintenant, j'ai ma boite de kleenex à côté.
Pratique. Moi je sors d'une grippe. J'ai aussi fait honneur au mouchoir.



Tom

Avatar
Olivier Beyssac
Tom writes:

ils ont le C dans le sang et ils seraient prets à donner leur vi pour
le défendre !


J'ai la permission de me faire une signature avec cette phrase ?

--
Olivier Beyssac -

Avatar
talon
Tom wrote:
Quels informaticiens théoriciens?


cherchez model checking et prouveurs sur Google.



Merci je sais que ça existe.

--

Michel TALON


Avatar
Joe Cool
Changer de type c'est comme changer de sexe : ça n'a pas de sens.


Ça dérappe !

--
Joe Cool

Avatar
Tom
Tom writes:
ils ont le C dans le sang et ils seraient prets à donner leur vi pour
le défendre !
J'ai la permission de me faire une signature avec cette phrase ?



C'est une faute de frappe, j'ai oublié le e à la fin de vie. Mais ca
donne un lapsus assez cocasse. Tu peux en faire ta signature si ça te
chante, ça ne me dérange pas :-)

Tom


Avatar
Tom
Merci je sais que ça existe.


Alors je ne saisis pas votre question

Tom

Avatar
Tom
Changer de type c'est comme changer de sexe : ça n'a pas de sens.
Ça dérappe !



Problème de rugosité.

Tom


Avatar
Joe Cool
Ca me ferait bien chier. Je n'ai pas dit que c'était toujours facile de
prouver les programmes, mais que c'est nécessaire. Je vous renvoie au
discours de Dijkstra a prononcé lorqu'il a recu le prix Turing en 1972.
Comme quoi l'idée ne date pas d'hier.


Dijkstra, 1972 : en 33 ans rien n'a changé, sinon que le C a remplacé le
Fortran.

Morceaux choisis :

Le PC :

« Le plus affligeant peut-être est que, même après toutes ces années
d'expérience frustrantes, il y a toujours tant de gens qui croient
honnêtement que quelque loi de la nature nous dit que les machines
doivent être ainsi. Ils font taire leurs doutes en considérant la
quantité de ces machines qui s'est vendue, et en retirent la fausse
impression de sécurité qu'après tout, la conception n'a pu en être si
mauvaise. Mais en y regardant de plus près, cette ligne de défense à la
même force de conviction que l'argument selon lequel fumer des
cigarettes serait bon pour la santé puisque tant de gens le font. »

Le C :

« Le destin tragique du FORTRAN a été sa large diffusion, enchaînant
mentalement des milliers et des milliers de programmeurs à nos erreurs
passées. Je prie tous les jours qu'un plus grand nombre de mes collègues
programmeurs trouve des moyens de se libérer de la malédiction de la
compatibilité. »

L'ingénieur informaticien :

« Aujourd'hui, la technique habituelle est de réaliser un programme puis
de le tester. Mais si tester un programme peut être une technique très
efficace pour montrer la présence de bogues, elle est désespérément
incapable d'en montrer l'absence. La seule manière efficace de relever
significativement le niveau de confiance en un programme est de produire
une preuve convaincante de sa justesse. Mais on ne doit pas d'abord
réaliser le programme et ensuite prouver sa justesse, car l'exigence de
fourniture de preuve ne ferait qu'alourdir le fardeau du pauvre
programmeur. Au contraire, le programmeur doit faire croître la preuve
de justesse et le programme de concert. »

Le Caml :

« Je prédis un grand avenir aux langages de programmation très
systématiques et très modestes. Quand je dis « modeste », je veux dire
que, par exemple, non seulement l'instruction « for » d'ALGOL 60, mais
aussi la boucle « DO » de FORTRAN pourrait être rejetées comme trop
baroques. J'ai conduit une petite expérience de programmation avec des
volontaires très expérimentés, et elle a montré quelque chose de
vraiment imprévu et de plutôt surprenant. Aucun de mes volontaires n'a
trouvé la solution évidente et la plus élégante. Après analyse
approfondie cela s'avéra avoir une origine commune : leur notion de la
répétition était si étroitement liée à l'idée d'une variable associée à
incrémenter qu'ils étaient mentalement bloqués de la vision de la
solution. Leurs solutions étaient moins efficaces, inutilement difficile
à comprendre et leurs avaient pris très longtemps à trouver. »

Le blocage linuxien :

« Je vous laisse le choix de décider quelle importance vous allez donner
à mes réflexions, je ne sais que trop bien que je ne peux forcer
personne à partager mes convictions. Comme chaque révolution, celle-ci
provoquera une opposition violente, et l'on peut se demander où sont les
forces conservatrices qui essaieront de contrer de tels développements.
Je ne m'attends pas à les trouver principalement dans les grandes
entreprises, ni même dans l'industrie informatique ; je m'attends plutôt
à les trouver dans les institutions d'éducation qui fournissent les
formations actuelles et dans ces groupes conservateurs d'utilisateurs
d'ordinateurs qui pensent que leurs anciens programmes sont si
importants qu'il n'est pas utile de les récrire et de les améliorer. »

Tout est dit, depuis 33 ans.

--
Joe Cool

Avatar
Joe Cool
On Wed, 09 Mar 2005 14:08:13 +0100, Joe Cool wrote:


% cat foo.ml
let a = Array.create 10 0;;
a.(10) <- 1
% ocamlc foo.ml -o foo
%


Objective Caml version 3.08.2

# let t = Array.make 10 0;;
val t : int array = [|0; 0; 0; 0; 0; 0; 0; 0; 0; 0|]
# t.(10) <- 1;;
Exception: Invalid_argument "index out of bounds".
#

C'est quoi le problème ?



Le problème c'est que ça compile. Toi, là, tu vérifies à l'exécution
que ça marche (ou pas). Pas très efficace, Tom ne serait pas très
content de ta façon de programmer quelque peu hasardeuse.


Extrait du manuel Ocaml version 3.08 :

« Array.get a n returns the element number n of array a. The first
element has number 0. The last element has number Array.length a - 1.
You can also write a.(n) instead of Array.get a n.

Raise Invalid_argument "index out of bounds" if n is outside the range 0
to (Array.length a - 1). »

Aucun typage ne peut garantir dans le cas général d'un langage universel
qu'on adresse pas une cas inexistante d'un tableau. C'est pourquoi Caml
ne peut en aucun cas gérérer une erreur à la compilation. Il fait la
seule chose possible en l'absence d'algorithme exact : il envoie une
exception pour signaler l'erreur. Tout bon programmeur Caml, si il n'a
pas prouvé la validité de son algorithme, doit enrober son code d'un
try...with pour traiter ce cas.

--
Joe Cool