Marc Boyer écrivit :En physique non plus on a pas trop de moyen de prouver que les choses
marchent,
Euh... il a quand même fallu attendre attendre un certain IN pour avoir
une preuve permettant de savoir pourquoi les choses _tombaient_, ce qui
pourtant sensiblement plus simple que marcher. Avant IN, les choses
tombaient... de par leur « vertu tombante » (Aristote)et pourtant, il me paraît plus facile d'y faire des choses robustes.
Bin voilà, comme disait l'autre, « du haut de ces pyramides, ... »
Y'a pas à dire, 42 (ou 43) siècles, cela aide !
"au temps des cartes perforées, on réflechissait avant d'éxecuter
son code").
Pas sûr. Mais on réfléchissait surtout avant de pondre son code, parce
que le délai entre le moment où l'analyste écrivait le code sur sa
feuille, et le moment où on lui rendait le listage de compilation,
pouvait être de plusieurs... jours : eh oui, il fallait passer par le
programmeur, qui traduisait en lignes de code, puis par le, ou plus
souvent /la/, perforatrice pour faire la pile de cartes, puis trouver un
moment sur la bécane pour faire tourner le job de compilation, puis un
autre moment sur la bécane annexe pour faire tourner le job
d'impression, et ensuite passer la tête au service chargé de la
distribution des listages.
Mais remarquez bien qu'aujourd'hui, les nouveaux matériaux n'empêchent
pas les architectes de bien mieux savoir qu'avant pourquoi les immeubles
tiennent debout : les progrès ont lieu tant dans les techniques que dans
la partie théorique du génie civil. Cependant, cela n'a pas fait revenir
en arrière sur les règles de sûreté qu'ont imposées l'expérience, et en
particulier sur les coefficients (2 ou le plus souvent 3) que l'on
applique en génie civil : un peu comme la méthode qui consiste à
programmer le même sous-système plusieurs fois et à arbitrer ensuite les
résultats (c'est bien comme cela que fonctionne un avion, non ?)
Marc Boyer écrivit :
En physique non plus on a pas trop de moyen de prouver que les choses
marchent,
Euh... il a quand même fallu attendre attendre un certain IN pour avoir
une preuve permettant de savoir pourquoi les choses _tombaient_, ce qui
pourtant sensiblement plus simple que marcher. Avant IN, les choses
tombaient... de par leur « vertu tombante » (Aristote)
et pourtant, il me paraît plus facile d'y faire des choses robustes.
Bin voilà, comme disait l'autre, « du haut de ces pyramides, ... »
Y'a pas à dire, 42 (ou 43) siècles, cela aide !
"au temps des cartes perforées, on réflechissait avant d'éxecuter
son code").
Pas sûr. Mais on réfléchissait surtout avant de pondre son code, parce
que le délai entre le moment où l'analyste écrivait le code sur sa
feuille, et le moment où on lui rendait le listage de compilation,
pouvait être de plusieurs... jours : eh oui, il fallait passer par le
programmeur, qui traduisait en lignes de code, puis par le, ou plus
souvent /la/, perforatrice pour faire la pile de cartes, puis trouver un
moment sur la bécane pour faire tourner le job de compilation, puis un
autre moment sur la bécane annexe pour faire tourner le job
d'impression, et ensuite passer la tête au service chargé de la
distribution des listages.
Mais remarquez bien qu'aujourd'hui, les nouveaux matériaux n'empêchent
pas les architectes de bien mieux savoir qu'avant pourquoi les immeubles
tiennent debout : les progrès ont lieu tant dans les techniques que dans
la partie théorique du génie civil. Cependant, cela n'a pas fait revenir
en arrière sur les règles de sûreté qu'ont imposées l'expérience, et en
particulier sur les coefficients (2 ou le plus souvent 3) que l'on
applique en génie civil : un peu comme la méthode qui consiste à
programmer le même sous-système plusieurs fois et à arbitrer ensuite les
résultats (c'est bien comme cela que fonctionne un avion, non ?)
Marc Boyer écrivit :En physique non plus on a pas trop de moyen de prouver que les choses
marchent,
Euh... il a quand même fallu attendre attendre un certain IN pour avoir
une preuve permettant de savoir pourquoi les choses _tombaient_, ce qui
pourtant sensiblement plus simple que marcher. Avant IN, les choses
tombaient... de par leur « vertu tombante » (Aristote)et pourtant, il me paraît plus facile d'y faire des choses robustes.
Bin voilà, comme disait l'autre, « du haut de ces pyramides, ... »
Y'a pas à dire, 42 (ou 43) siècles, cela aide !
"au temps des cartes perforées, on réflechissait avant d'éxecuter
son code").
Pas sûr. Mais on réfléchissait surtout avant de pondre son code, parce
que le délai entre le moment où l'analyste écrivait le code sur sa
feuille, et le moment où on lui rendait le listage de compilation,
pouvait être de plusieurs... jours : eh oui, il fallait passer par le
programmeur, qui traduisait en lignes de code, puis par le, ou plus
souvent /la/, perforatrice pour faire la pile de cartes, puis trouver un
moment sur la bécane pour faire tourner le job de compilation, puis un
autre moment sur la bécane annexe pour faire tourner le job
d'impression, et ensuite passer la tête au service chargé de la
distribution des listages.
Mais remarquez bien qu'aujourd'hui, les nouveaux matériaux n'empêchent
pas les architectes de bien mieux savoir qu'avant pourquoi les immeubles
tiennent debout : les progrès ont lieu tant dans les techniques que dans
la partie théorique du génie civil. Cependant, cela n'a pas fait revenir
en arrière sur les règles de sûreté qu'ont imposées l'expérience, et en
particulier sur les coefficients (2 ou le plus souvent 3) que l'on
applique en génie civil : un peu comme la méthode qui consiste à
programmer le même sous-système plusieurs fois et à arbitrer ensuite les
résultats (c'est bien comme cela que fonctionne un avion, non ?)
C'est tres proche des resultats d'indecidabilite en informatique. Plus
precisement, tu noteras que des qu'on commence a raisonner sur une theorie/une
preuve (e.g., un algorithme, la semantique d'un programme), alors on ne
sait rien faire des qu'on travaille avec une theorie utile (contenant
l'arithmetique) -> en informatique, tout probleme "non trivial" en particulier
raisonnant sur de la correction de programme, est indecidable.
Tu peux en general t'en sortir en "bornant tout".
si ton programme est fini, il peut contenir des boucles infinies (non bornees
en temps), et ca suffit a foutre la merde.
Je m'insurgeais dans un message precedent sur le fait qu'on n'a pratiquement
pas d'outil industriel s'appuyant sur ce genre de choses. Idealement, il
faudrait pouvoir isoler dans un programme les bouts de code "dangereux"
(non bornes) sur lesquels on ne va pas pouvoir raisonner.
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
C'est tres proche des resultats d'indecidabilite en informatique. Plus
precisement, tu noteras que des qu'on commence a raisonner sur une theorie/une
preuve (e.g., un algorithme, la semantique d'un programme), alors on ne
sait rien faire des qu'on travaille avec une theorie utile (contenant
l'arithmetique) -> en informatique, tout probleme "non trivial" en particulier
raisonnant sur de la correction de programme, est indecidable.
Tu peux en general t'en sortir en "bornant tout".
si ton programme est fini, il peut contenir des boucles infinies (non bornees
en temps), et ca suffit a foutre la merde.
Je m'insurgeais dans un message precedent sur le fait qu'on n'a pratiquement
pas d'outil industriel s'appuyant sur ce genre de choses. Idealement, il
faudrait pouvoir isoler dans un programme les bouts de code "dangereux"
(non bornes) sur lesquels on ne va pas pouvoir raisonner.
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
C'est tres proche des resultats d'indecidabilite en informatique. Plus
precisement, tu noteras que des qu'on commence a raisonner sur une theorie/une
preuve (e.g., un algorithme, la semantique d'un programme), alors on ne
sait rien faire des qu'on travaille avec une theorie utile (contenant
l'arithmetique) -> en informatique, tout probleme "non trivial" en particulier
raisonnant sur de la correction de programme, est indecidable.
Tu peux en general t'en sortir en "bornant tout".
si ton programme est fini, il peut contenir des boucles infinies (non bornees
en temps), et ca suffit a foutre la merde.
Je m'insurgeais dans un message precedent sur le fait qu'on n'a pratiquement
pas d'outil industriel s'appuyant sur ce genre de choses. Idealement, il
faudrait pouvoir isoler dans un programme les bouts de code "dangereux"
(non bornes) sur lesquels on ne va pas pouvoir raisonner.
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
Marc Espie a écrit :C'est tres proche des resultats d'indecidabilite en informatique. Plus
precisement, tu noteras que des qu'on commence a raisonner sur une theorie/une
preuve (e.g., un algorithme, la semantique d'un programme), alors on ne
sait rien faire des qu'on travaille avec une theorie utile (contenant
l'arithmetique) -> en informatique, tout probleme "non trivial" en particulier
raisonnant sur de la correction de programme, est indecidable.
Juste un petit bémol souvent oublié: en pratique en informatique on
travaille sur une arithmétique finie (allez 32bits) et tous les
problèmes d'indécidabilités (théoriques) de l'arithmétique de Goedel
s'évanouissent.
Bon par contre pour prouver que le prog fini s'arrête ou boucle, on peut
parcourir un nombre faramineux de positions de l'espace des états, ce
qui est difficile. Mais une chose est sure: les théorèmes mathématiques
sur les ensembles infinis ne s'appliquent pas forcément à l'identique
sur les ensembles finis.
Les maths parlent parfois de chose qui n'existent /pas vraiment/ (cf
l'hôtel de Hilbert, dont on attends toujours l'adresse[*]), mais ca ne
les rends pas moins inintéressantes, mais il faut séparer la théorie (on
accepte "l'infini") et la pratique (tout est fini en se bas minde).
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
Tu peux utiliser des langages de plus haut niveau pour éviter cela.
L'erreur est peut-être de vouloir faire de la preuve sur des langages
bas-niveau alors qu'on peut faire des trucs puissant sur des langages
plus abstraits. La programmation devenant alors plutôt un truc
conceptuel proche des mathématiques façon "B".
Marc Espie a écrit :
C'est tres proche des resultats d'indecidabilite en informatique. Plus
precisement, tu noteras que des qu'on commence a raisonner sur une theorie/une
preuve (e.g., un algorithme, la semantique d'un programme), alors on ne
sait rien faire des qu'on travaille avec une theorie utile (contenant
l'arithmetique) -> en informatique, tout probleme "non trivial" en particulier
raisonnant sur de la correction de programme, est indecidable.
Juste un petit bémol souvent oublié: en pratique en informatique on
travaille sur une arithmétique finie (allez 32bits) et tous les
problèmes d'indécidabilités (théoriques) de l'arithmétique de Goedel
s'évanouissent.
Bon par contre pour prouver que le prog fini s'arrête ou boucle, on peut
parcourir un nombre faramineux de positions de l'espace des états, ce
qui est difficile. Mais une chose est sure: les théorèmes mathématiques
sur les ensembles infinis ne s'appliquent pas forcément à l'identique
sur les ensembles finis.
Les maths parlent parfois de chose qui n'existent /pas vraiment/ (cf
l'hôtel de Hilbert, dont on attends toujours l'adresse[*]), mais ca ne
les rends pas moins inintéressantes, mais il faut séparer la théorie (on
accepte "l'infini") et la pratique (tout est fini en se bas minde).
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
Tu peux utiliser des langages de plus haut niveau pour éviter cela.
L'erreur est peut-être de vouloir faire de la preuve sur des langages
bas-niveau alors qu'on peut faire des trucs puissant sur des langages
plus abstraits. La programmation devenant alors plutôt un truc
conceptuel proche des mathématiques façon "B".
Marc Espie a écrit :C'est tres proche des resultats d'indecidabilite en informatique. Plus
precisement, tu noteras que des qu'on commence a raisonner sur une theorie/une
preuve (e.g., un algorithme, la semantique d'un programme), alors on ne
sait rien faire des qu'on travaille avec une theorie utile (contenant
l'arithmetique) -> en informatique, tout probleme "non trivial" en particulier
raisonnant sur de la correction de programme, est indecidable.
Juste un petit bémol souvent oublié: en pratique en informatique on
travaille sur une arithmétique finie (allez 32bits) et tous les
problèmes d'indécidabilités (théoriques) de l'arithmétique de Goedel
s'évanouissent.
Bon par contre pour prouver que le prog fini s'arrête ou boucle, on peut
parcourir un nombre faramineux de positions de l'espace des états, ce
qui est difficile. Mais une chose est sure: les théorèmes mathématiques
sur les ensembles infinis ne s'appliquent pas forcément à l'identique
sur les ensembles finis.
Les maths parlent parfois de chose qui n'existent /pas vraiment/ (cf
l'hôtel de Hilbert, dont on attends toujours l'adresse[*]), mais ca ne
les rends pas moins inintéressantes, mais il faut séparer la théorie (on
accepte "l'infini") et la pratique (tout est fini en se bas minde).
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
Tu peux utiliser des langages de plus haut niveau pour éviter cela.
L'erreur est peut-être de vouloir faire de la preuve sur des langages
bas-niveau alors qu'on peut faire des trucs puissant sur des langages
plus abstraits. La programmation devenant alors plutôt un truc
conceptuel proche des mathématiques façon "B".
Sur le chemin de l'indecidabilite, la lecon la plus importante, c'est la
facon dont tu obtiens ces resultats. Ca te dit de facon tres claire qu'il
n'y a pas de facon de "simplifier" les choses. Applique a de l'informatique
finie, ca te dit juste qu'il va falloir se manger tout l'espace d'etats,
qu'il n'y a pas de facon d'en faire (beaucoup) moins...
c'est mort...
Pas du tout d'accord avec toi. Si tu es intuitionniste, tu peux eventuellement
considerer que les objets non constructibles n'existent pas, mais l'infini
mathematique est quelque chose de parfaitement concret et utilisable.
Tu connais le mythe de la caverne ? le monde que tu vois n'est qu'une
projection limitee de la realite (en particulier, l'esprit humain a un
peu de mal a apprehender l'infini).
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
Tu peux utiliser des langages de plus haut niveau pour éviter cela.
L'erreur est peut-être de vouloir faire de la preuve sur des langages
bas-niveau alors qu'on peut faire des trucs puissant sur des langages
plus abstraits. La programmation devenant alors plutôt un truc
conceptuel proche des mathématiques façon "B".
Le probleme, c'est surtout que tu pourrais avoir un langage de bas niveau,
avec des annotations relativement simples indiquant que telle zone est
"neuneu" et donc prouvable (et l'enseignement qui va avec pour avoir du
developpeur qui ne fait pas n'importe quoi).
Avec un peu de bol, si les multi-coeurs se generalisent, on va voir le
retour du fonctionnel (comment eviter les locks: facile, suffit de ne
pas avoir de valeur mutable). Mais ca c'est mon cote optimiste.
Mon cote pessimiste me dit qu'on va avoir de plus en plus d'applications
bugguees tellement tu peux faire confiance a l'informaticien moyen pour
faire du multi-threads alors qu'il n'a aucune chance de le faire marcher
correctement.
Sur le chemin de l'indecidabilite, la lecon la plus importante, c'est la
facon dont tu obtiens ces resultats. Ca te dit de facon tres claire qu'il
n'y a pas de facon de "simplifier" les choses. Applique a de l'informatique
finie, ca te dit juste qu'il va falloir se manger tout l'espace d'etats,
qu'il n'y a pas de facon d'en faire (beaucoup) moins...
c'est mort...
Pas du tout d'accord avec toi. Si tu es intuitionniste, tu peux eventuellement
considerer que les objets non constructibles n'existent pas, mais l'infini
mathematique est quelque chose de parfaitement concret et utilisable.
Tu connais le mythe de la caverne ? le monde que tu vois n'est qu'une
projection limitee de la realite (en particulier, l'esprit humain a un
peu de mal a apprehender l'infini).
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
Tu peux utiliser des langages de plus haut niveau pour éviter cela.
L'erreur est peut-être de vouloir faire de la preuve sur des langages
bas-niveau alors qu'on peut faire des trucs puissant sur des langages
plus abstraits. La programmation devenant alors plutôt un truc
conceptuel proche des mathématiques façon "B".
Le probleme, c'est surtout que tu pourrais avoir un langage de bas niveau,
avec des annotations relativement simples indiquant que telle zone est
"neuneu" et donc prouvable (et l'enseignement qui va avec pour avoir du
developpeur qui ne fait pas n'importe quoi).
Avec un peu de bol, si les multi-coeurs se generalisent, on va voir le
retour du fonctionnel (comment eviter les locks: facile, suffit de ne
pas avoir de valeur mutable). Mais ca c'est mon cote optimiste.
Mon cote pessimiste me dit qu'on va avoir de plus en plus d'applications
bugguees tellement tu peux faire confiance a l'informaticien moyen pour
faire du multi-threads alors qu'il n'a aucune chance de le faire marcher
correctement.
Sur le chemin de l'indecidabilite, la lecon la plus importante, c'est la
facon dont tu obtiens ces resultats. Ca te dit de facon tres claire qu'il
n'y a pas de facon de "simplifier" les choses. Applique a de l'informatique
finie, ca te dit juste qu'il va falloir se manger tout l'espace d'etats,
qu'il n'y a pas de facon d'en faire (beaucoup) moins...
c'est mort...
Pas du tout d'accord avec toi. Si tu es intuitionniste, tu peux eventuellement
considerer que les objets non constructibles n'existent pas, mais l'infini
mathematique est quelque chose de parfaitement concret et utilisable.
Tu connais le mythe de la caverne ? le monde que tu vois n'est qu'une
projection limitee de la realite (en particulier, l'esprit humain a un
peu de mal a apprehender l'infini).
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
Tu peux utiliser des langages de plus haut niveau pour éviter cela.
L'erreur est peut-être de vouloir faire de la preuve sur des langages
bas-niveau alors qu'on peut faire des trucs puissant sur des langages
plus abstraits. La programmation devenant alors plutôt un truc
conceptuel proche des mathématiques façon "B".
Le probleme, c'est surtout que tu pourrais avoir un langage de bas niveau,
avec des annotations relativement simples indiquant que telle zone est
"neuneu" et donc prouvable (et l'enseignement qui va avec pour avoir du
developpeur qui ne fait pas n'importe quoi).
Avec un peu de bol, si les multi-coeurs se generalisent, on va voir le
retour du fonctionnel (comment eviter les locks: facile, suffit de ne
pas avoir de valeur mutable). Mais ca c'est mon cote optimiste.
Mon cote pessimiste me dit qu'on va avoir de plus en plus d'applications
bugguees tellement tu peux faire confiance a l'informaticien moyen pour
faire du multi-threads alors qu'il n'a aucune chance de le faire marcher
correctement.
In article <hvt7ci$nbt$,
Marc Boyer wrote:Le 18-06-2010, Antoine Leca a écrit :Idem pour les algorithmes réseau : on utilise un modèle de faillites
possibles, qui définit des tolérances, et quand on sort on décide qu'il
s'agit d'une vraie défaillance.
Oui, mais ils sont bien plus compliqués que les algorithmes centralisés.
Il y a une robustesse à base de save/restore/retry relativement facile
à mettre en oeuvre, qui améliorerait l'état actuel déjà. C'est d'ailleurs
cette mise en oeuvre au niveau admin système qui, à mon sens, permet
de tolérer les bugs dans les systèmes sans interraction avec le monde
physique (on sait sauvegarder l'état d'un système informatique). Il s'agit
d'intégrer cela dans la programmation des systèmes/applications.
Ca a l'effet pervers d'encourager les bugs "legers" jusqu'a ce que ca
devienne des bugs graves.
En fait, tout bon mecanisme de monitoring se doit d'avoir un postmortem
le plus precis possible (et celui-ci doit etre utilise pour corriger les
bugs!). Redemarrer le systeme "sans comprendre", ce qui est helas monnaie
courante, c'est un peu comme apprendre la conduite a un singe...
In article <hvt7ci$nbt$1@news.cict.fr>,
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> wrote:
Le 18-06-2010, Antoine Leca <root@localhost.invalid> a écrit :
Idem pour les algorithmes réseau : on utilise un modèle de faillites
possibles, qui définit des tolérances, et quand on sort on décide qu'il
s'agit d'une vraie défaillance.
Oui, mais ils sont bien plus compliqués que les algorithmes centralisés.
Il y a une robustesse à base de save/restore/retry relativement facile
à mettre en oeuvre, qui améliorerait l'état actuel déjà. C'est d'ailleurs
cette mise en oeuvre au niveau admin système qui, à mon sens, permet
de tolérer les bugs dans les systèmes sans interraction avec le monde
physique (on sait sauvegarder l'état d'un système informatique). Il s'agit
d'intégrer cela dans la programmation des systèmes/applications.
Ca a l'effet pervers d'encourager les bugs "legers" jusqu'a ce que ca
devienne des bugs graves.
En fait, tout bon mecanisme de monitoring se doit d'avoir un postmortem
le plus precis possible (et celui-ci doit etre utilise pour corriger les
bugs!). Redemarrer le systeme "sans comprendre", ce qui est helas monnaie
courante, c'est un peu comme apprendre la conduite a un singe...
In article <hvt7ci$nbt$,
Marc Boyer wrote:Le 18-06-2010, Antoine Leca a écrit :Idem pour les algorithmes réseau : on utilise un modèle de faillites
possibles, qui définit des tolérances, et quand on sort on décide qu'il
s'agit d'une vraie défaillance.
Oui, mais ils sont bien plus compliqués que les algorithmes centralisés.
Il y a une robustesse à base de save/restore/retry relativement facile
à mettre en oeuvre, qui améliorerait l'état actuel déjà. C'est d'ailleurs
cette mise en oeuvre au niveau admin système qui, à mon sens, permet
de tolérer les bugs dans les systèmes sans interraction avec le monde
physique (on sait sauvegarder l'état d'un système informatique). Il s'agit
d'intégrer cela dans la programmation des systèmes/applications.
Ca a l'effet pervers d'encourager les bugs "legers" jusqu'a ce que ca
devienne des bugs graves.
En fait, tout bon mecanisme de monitoring se doit d'avoir un postmortem
le plus precis possible (et celui-ci doit etre utilise pour corriger les
bugs!). Redemarrer le systeme "sans comprendre", ce qui est helas monnaie
courante, c'est un peu comme apprendre la conduite a un singe...
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
Tu peux utiliser des langages de plus haut niveau pour éviter cela.
L'erreur est peut-être de vouloir faire de la preuve sur des langages
bas-niveau alors qu'on peut faire des trucs puissant sur des langages
plus abstraits. La programmation devenant alors plutôt un truc
conceptuel proche des mathématiques façon "B".
Le probleme, c'est surtout que tu pourrais avoir un langage de bas niveau,
avec des annotations relativement simples indiquant que telle zone est
"neuneu" et donc prouvable (et l'enseignement qui va avec pour avoir du
developpeur qui ne fait pas n'importe quoi).
Avec un peu de bol, si les multi-coeurs se generalisent, on va voir le
retour du fonctionnel (comment eviter les locks: facile, suffit de ne
pas avoir de valeur mutable). Mais ca c'est mon cote optimiste.
Mon cote pessimiste me dit qu'on va avoir de plus en plus d'applications
bugguees tellement tu peux faire confiance a l'informaticien moyen pour
faire du multi-threads alors qu'il n'a aucune chance de le faire marcher
correctement.
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
Tu peux utiliser des langages de plus haut niveau pour éviter cela.
L'erreur est peut-être de vouloir faire de la preuve sur des langages
bas-niveau alors qu'on peut faire des trucs puissant sur des langages
plus abstraits. La programmation devenant alors plutôt un truc
conceptuel proche des mathématiques façon "B".
Le probleme, c'est surtout que tu pourrais avoir un langage de bas niveau,
avec des annotations relativement simples indiquant que telle zone est
"neuneu" et donc prouvable (et l'enseignement qui va avec pour avoir du
developpeur qui ne fait pas n'importe quoi).
Avec un peu de bol, si les multi-coeurs se generalisent, on va voir le
retour du fonctionnel (comment eviter les locks: facile, suffit de ne
pas avoir de valeur mutable). Mais ca c'est mon cote optimiste.
Mon cote pessimiste me dit qu'on va avoir de plus en plus d'applications
bugguees tellement tu peux faire confiance a l'informaticien moyen pour
faire du multi-threads alors qu'il n'a aucune chance de le faire marcher
correctement.
Dans ce que j'ai vu, tu as d'une part la theorie: formalisme comme esterel
a portee tres limitee, ou langage qui n'est pas sorti du labo, et la
pratique: langage a la C/java, avec des "outils" de verification qui au final
te sortent des resultats pathetiques de faiblesse (style: il y a *peut-etre*
un buffer overflow a la ligne xxxx).
Tu peux utiliser des langages de plus haut niveau pour éviter cela.
L'erreur est peut-être de vouloir faire de la preuve sur des langages
bas-niveau alors qu'on peut faire des trucs puissant sur des langages
plus abstraits. La programmation devenant alors plutôt un truc
conceptuel proche des mathématiques façon "B".
Le probleme, c'est surtout que tu pourrais avoir un langage de bas niveau,
avec des annotations relativement simples indiquant que telle zone est
"neuneu" et donc prouvable (et l'enseignement qui va avec pour avoir du
developpeur qui ne fait pas n'importe quoi).
Avec un peu de bol, si les multi-coeurs se generalisent, on va voir le
retour du fonctionnel (comment eviter les locks: facile, suffit de ne
pas avoir de valeur mutable). Mais ca c'est mon cote optimiste.
Mon cote pessimiste me dit qu'on va avoir de plus en plus d'applications
bugguees tellement tu peux faire confiance a l'informaticien moyen pour
faire du multi-threads alors qu'il n'a aucune chance de le faire marcher
correctement.