" c'est aussi ridicule car on a réussi à bosser depuis des années avec du matos moins rapide."
C'est parfaitement faux pas rapport au besoin et à la taille des codes. En 2000, on ne trouvait des écrans 20" et des stations de travail que dans les entreprises. Aujourd'hui, un pc de gamer est plus puissant qu'un pc utilisé pour le développement.
"Et bien que ça coute que 700€ pour une personne, combien ça coute à l'échelle de la société ? "
Cela ne coute rien du tout, c'est une semaine de salaire. Sur 3 ans, tu perds largement plus d'une semaine de boulot à cause d'une machine trop faible.
"Et c'est pas des exemples que j'ai inventé. C'est des exemples que j'ai vécu."
Tu as raison pour la prod, mais ici il est question de PC de dev.
"Ou est ce que j'ai dit que ca va mieux? Je dit que c'est la meme chose, une gaussienne: majorite mediocre, et a peu pres autant de debiles que de tres doues. C'etait vrai en 95, 75 1875 et l'an 40."
Sauf qu'en 75, il y a avait 3x moins d'ingénieur formé qu'aujourd'hui et que leur salaire n'avait rien avoir non plus. Les meilleurs n’essayaient pas forcément d'aller dans d'autre métiers à la première occasion (chef, vente, marketing, finance…).
Il faut voir le boulot, j'ai déjà fait du dev confortable en Ocaml sur un atom. Mais pour du dev C++, cela commence à être chiant. Et du dev java sous eclipse, c'est juste une raison de suicide.
Je n'ai jamais vu de boite ou il ne fallait pas se battre pour voir un pc correct pour développer. Cela coute maximum 1 semaines de salaire, cela peut faire perdre des jours de boulot, mais c'est toujours à justifier. C'est hallucinant qu'un dev doivent justifier d'avoir un outil correct qu'il va utiliser 100% de son temps.
"En clair, les bornes des variables n'étaient pas vérifiés suite à l'introduction dans le code d'une levée des vérifications."
Oui, mais il y a avait un comportement associé qui ne correspondait à rien de voulu. Le langage peut aider quand le comportement doit être explicite, cela permet de voir un défaut de couverture par les tests par exemple. Au minimum, cela permet de mettre un mode dégradé en place.
"Effectivement, comme en plus en Ada, le case doit voir toutes les possibilités couvertes, j'aurais rien compris."
Le principe des variants est justement que tu ne les définit pas tous, à l'inverse des types sommes…
"C'est quoi une mémoire dans une boucle ?"
une variable modifiable. Une boucle-for explicite est facile à lire et facile de voir le problème, c'est beaucoup moins le cas d'intégrateur temporel (genre correcteur pid).
"La méthode la plus sûre reste l'emploi de méthodes formelles."
Les prouveurs n'étant pas reconnu par la DO, je ne vois pas comment tu peux dire ça. Il faudrait pour cela que quelqu'un en qualifie un, ce n'est pas gagné.
"Que proposes-tu ? Exemple simple : a += 1 provoque un overflow. Que comment souhaites-tu que cela soit traité ?"
Qu'à la compilation, il faut faire en sorte que le cas "overflow" soit traité. Ainsi cela pourra rentré dans les cas de couverture code pour les tests.
"Non. La méthode la plus sur, c'est de prouver formellement du code (méthode B par exemple). "
Pour être dans le milieu, ce n'est pas le cas. La méthode B est surtout utilisé dans le ferroviaire. Le "milieu" croit surtout au norme (do178,iso26262,en50128, IEC61508…).
" Exemple ? Les try/catch foireux en java à cause de l'obligation de gérer les exceptions (i.e., le catch est vide, mais c'est nécessaire pour que cela compile)."
C'est pas faux, les normes imposent bien plus de chose.
"Sans oublier l'impact que cela peut avoir sur la taille du binaire et les performances (dans des environnements comme l'embarqué, ces "détails" peuvent être importants)"
On n'utilise pas Java dans l'embarqué critique. La JVM est loin d'être qualifiable/certifiable. Et l'usage du GC rend cela encore plus complexe.
C'est comme ça que tu fais un AST en 200 lignes de code, contre plusieurs dizaine de classe en langage objet classique.
" Un bug sur de la reprise de code n'ont couvert par une vérification fait exploser UNE fusée et le langage est à jeter !!"
Le principe même de planter au runtime est totalement inacceptable. Au mieux, il log un truc, mais ne plante pas ! Même facebook avec hh, log les erreurs pour éviter justement de planter leur code. On ne rajoute pas de moyen de planter dans un logiciel qui ne doit pas s’arrêter.
"Ou presque… On est bien d'accord et tu montres clairement que tu ne sais pas de quoi tu parles."
Si j'allais te parler des "case" ouvert qui n'ont pas tous les variants de définit, je pense que je t'aurais perdu en route. C'est quand même un cas très particuliers, que l'on peut éviter.
"Alors effectivement, si tu castes dans tous les sens, le compilateur va avoir du mal à te dire si tu déborderas ou pas."
Pourquoi caster ? Si tu le fait, tu pètes toutes la sémantique du machin que tu manipules et le compilo ne peut rien pour toi. Si tu es obliger de le faire, ton checker ne sert plus à grand chose, et ne te garanti plus grand chose. Mais souvent, c'est juste un problème d'architecture matériel ou limitation de langage (collection d'Object…)
"Par contre, en conditions normales, il n'y a guère que les entrées externes au programme qui peuvent générer des valeurs hors plages"
non, il suffit d'un intégrateur. Une mémoire dans une boucle. Voir une mémoire inclus dans un calcul fait à chaque pas de temps.
"Alors, sauf si Ocaml a des pouvoirs de divination, je ne vois pas comment tu peux assurer que l'utilisateur ne rentrera pas n'importe quoi."
Il exige que tu traites tous les cas, et détecte bien tous les cas.
Un langage sans "type somme" ou ayant encore la référence "null" en 2015, c'est un peu dure.
Pour la création de type, c'est réellement utilisable ? j'avais vu que l'on pouvait définir des ranges mais un code en réel avec des ranges mais pas de précision ne sert pas à grand chose.
Les assert() et autre post/pre condition, c'est aussi joli que les tests unitaires. Mais quand un débordement d'entier char, te lance une exception, qui démarre un autotest dans la central inertiel de ta fusée, tu les haies tes "machins" runtime.
En gros, si tout ses types complexe que permet de définir Ada ne fonctionne qu'au runtime, ils ne servent à rien ou presque. Ocaml a un typage complexe, et tout ou presque est vérifié à la compilation.
Dans les domaines sensibles, la mode est aussi au générateur de code à partir de "modèle". Générateur de code écrit en Ocaml qui génère du C (Misra C en gros, sans allocation).
Niveau sécurité maximal, je te proposerais bien SCADE, mais c'est loin d'être libre et gratuit.
Non, cela n'a rien à voir. La Libc est la lib standard, le runtime est nécessaire au code objet compilé par le langage. Ada propose la gestion de "tâche" par exemple, qui nécessite de traduire ça en thread ou en processus.
la libgcc de gcc doit faire quelques lignes d'assembleur pour initialiser la pile et sauter à main().
Je pense que ne pas choisir un langage pour avoir plus de contributeur peut être un mauvais calcul. Si le dev principal passe du temps dans des problèmes à la con dû au langage (gestion de la mémoire, null pointer exception,…), il perd du temps.
Apprendre un nouveau langage, n'est pas si difficile.
[^] # Re: comprend pas
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Besoin d'arguments pour obtenir une station de travail sous GNU/Linux ?. Évalué à 2.
Tous les I5 ne sont pas quadruple coeur, et la fréquence n'est pas la même non plus.
Et en général, le reste va avec 4Go maximum, et pas de ssd.
"La première sécurité est la liberté"
[^] # Re: comprend pas
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Besoin d'arguments pour obtenir une station de travail sous GNU/Linux ?. Évalué à 4.
C'est parfaitement faux pas rapport au besoin et à la taille des codes. En 2000, on ne trouvait des écrans 20" et des stations de travail que dans les entreprises. Aujourd'hui, un pc de gamer est plus puissant qu'un pc utilisé pour le développement.
Cela ne coute rien du tout, c'est une semaine de salaire. Sur 3 ans, tu perds largement plus d'une semaine de boulot à cause d'une machine trop faible.
Tu as raison pour la prod, mais ici il est question de PC de dev.
"La première sécurité est la liberté"
[^] # Re: développement n'est pas de la bureautique
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Besoin d'arguments pour obtenir une station de travail sous GNU/Linux ?. Évalué à 5.
Sauf qu'en 75, il y a avait 3x moins d'ingénieur formé qu'aujourd'hui et que leur salaire n'avait rien avoir non plus. Les meilleurs n’essayaient pas forcément d'aller dans d'autre métiers à la première occasion (chef, vente, marketing, finance…).
"La première sécurité est la liberté"
[^] # Re: développement n'est pas de la bureautique
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Besoin d'arguments pour obtenir une station de travail sous GNU/Linux ?. Évalué à 3.
Il faut voir le boulot, j'ai déjà fait du dev confortable en Ocaml sur un atom. Mais pour du dev C++, cela commence à être chiant. Et du dev java sous eclipse, c'est juste une raison de suicide.
"La première sécurité est la liberté"
[^] # Re: Sérieux?
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Besoin d'arguments pour obtenir une station de travail sous GNU/Linux ?. Évalué à 6.
Je n'ai jamais vu de boite ou il ne fallait pas se battre pour voir un pc correct pour développer. Cela coute maximum 1 semaines de salaire, cela peut faire perdre des jours de boulot, mais c'est toujours à justifier. C'est hallucinant qu'un dev doivent justifier d'avoir un outil correct qu'il va utiliser 100% de son temps.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 0.
Rust est pensé par la fondation mozilla pour créer le futur de Firefox, donc bon.
C'est exactement ce que j'ai dit.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 1.
A moins d'avoir un typage des exceptions qui décore tes fonctions, tu es incapable de savoir si une fonction va être propre ou non.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 1.
Oui, mais il y a avait un comportement associé qui ne correspondait à rien de voulu. Le langage peut aider quand le comportement doit être explicite, cela permet de voir un défaut de couverture par les tests par exemple. Au minimum, cela permet de mettre un mode dégradé en place.
Le principe des variants est justement que tu ne les définit pas tous, à l'inverse des types sommes…
une variable modifiable. Une boucle-for explicite est facile à lire et facile de voir le problème, c'est beaucoup moins le cas d'intégrateur temporel (genre correcteur pid).
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 1.
Les prouveurs n'étant pas reconnu par la DO, je ne vois pas comment tu peux dire ça. Il faudrait pour cela que quelqu'un en qualifie un, ce n'est pas gagné.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 0.
tu as une source ?
Qu'à la compilation, il faut faire en sorte que le cas "overflow" soit traité. Ainsi cela pourra rentré dans les cas de couverture code pour les tests.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 2.
https://fr.wikipedia.org/wiki/Arbre_syntaxique_abstrait
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 2.
Il est fait pour faire un client lourd graphique. Java était aussi orienté serveur au début.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 2.
Pour être dans le milieu, ce n'est pas le cas. La méthode B est surtout utilisé dans le ferroviaire. Le "milieu" croit surtout au norme (do178,iso26262,en50128, IEC61508…).
" Exemple ? Les try/catch foireux en java à cause de l'obligation de gérer les exceptions (i.e., le catch est vide, mais c'est nécessaire pour que cela compile)."
C'est pas faux, les normes imposent bien plus de chose.
"Sans oublier l'impact que cela peut avoir sur la taille du binaire et les performances (dans des environnements comme l'embarqué, ces "détails" peuvent être importants)"
On n'utilise pas Java dans l'embarqué critique. La JVM est loin d'être qualifiable/certifiable. Et l'usage du GC rend cela encore plus complexe.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 1.
Cela y ressemble de loin. cf les liens au dessus.
Il faut se rattraper aux branches. Sortir avec une exception est juste inacceptable.
Oui, on peut, mais donc cela ne t'aide pas tant que ça.
a = 99; mais a = 40+40; ? et a +=1; ?
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 1.
https://en.wikipedia.org/wiki/Tagged_union
https://en.wikipedia.org/wiki/Algebraic_data_type
C'est comme ça que tu fais un AST en 200 lignes de code, contre plusieurs dizaine de classe en langage objet classique.
Le principe même de planter au runtime est totalement inacceptable. Au mieux, il log un truc, mais ne plante pas ! Même facebook avec hh, log les erreurs pour éviter justement de planter leur code. On ne rajoute pas de moyen de planter dans un logiciel qui ne doit pas s’arrêter.
Si j'allais te parler des "case" ouvert qui n'ont pas tous les variants de définit, je pense que je t'aurais perdu en route. C'est quand même un cas très particuliers, que l'on peut éviter.
Pourquoi caster ? Si tu le fait, tu pètes toutes la sémantique du machin que tu manipules et le compilo ne peut rien pour toi. Si tu es obliger de le faire, ton checker ne sert plus à grand chose, et ne te garanti plus grand chose. Mais souvent, c'est juste un problème d'architecture matériel ou limitation de langage (collection d'Object…)
non, il suffit d'un intégrateur. Une mémoire dans une boucle. Voir une mémoire inclus dans un calcul fait à chaque pas de temps.
Il exige que tu traites tous les cas, et détecte bien tous les cas.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 1.
go est orienté serveur, avec temps de compilation et déploiement facile. Pas Rust.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 0.
Un langage sans "type somme" ou ayant encore la référence "null" en 2015, c'est un peu dure.
Pour la création de type, c'est réellement utilisable ? j'avais vu que l'on pouvait définir des ranges mais un code en réel avec des ranges mais pas de précision ne sert pas à grand chose.
Les assert() et autre post/pre condition, c'est aussi joli que les tests unitaires. Mais quand un débordement d'entier char, te lance une exception, qui démarre un autotest dans la central inertiel de ta fusée, tu les haies tes "machins" runtime.
En gros, si tout ses types complexe que permet de définir Ada ne fonctionne qu'au runtime, ils ne servent à rien ou presque. Ocaml a un typage complexe, et tout ou presque est vérifié à la compilation.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 2.
C'était pas un Ada qui fonctionnait sur un petit os comme rtems ?
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 2.
C'est pas faux.
Dans les domaines sensibles, la mode est aussi au générateur de code à partir de "modèle". Générateur de code écrit en Ocaml qui génère du C (Misra C en gros, sans allocation).
Niveau sécurité maximal, je te proposerais bien SCADE, mais c'est loin d'être libre et gratuit.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 2.
Pour moi, Ada, c'est dépassé. Si le but est de passé à un langage plus sécurisé, il faut regardé du coté de Haskell/Ocaml, et même Rust ou Scala.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 1.
La gestion des taches par exemple serait à implémenter par l'OS, mais est fournis par le langage. Il faudrait 2 niveaux de compilation.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 3.
Non, cela n'a rien à voir. La Libc est la lib standard, le runtime est nécessaire au code objet compilé par le langage. Ada propose la gestion de "tâche" par exemple, qui nécessite de traduire ça en thread ou en processus.
la libgcc de gcc doit faire quelques lignes d'assembleur pour initialiser la pile et sauter à main().
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 2.
ada a un runtime pour fonctionner, j'ai du mal à le voir utilisé comme langage système.
"La première sécurité est la liberté"
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 2.
Je pense que ne pas choisir un langage pour avoir plus de contributeur peut être un mauvais calcul. Si le dev principal passe du temps dans des problèmes à la con dû au langage (gestion de la mémoire, null pointer exception,…), il perd du temps.
Apprendre un nouveau langage, n'est pas si difficile.
"La première sécurité est la liberté"
[^] # Re: les tests qui marchent pour de vrai
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 2.
https://pypi.python.org/pypi/fusil a été développé par un lecteur de linuxfr.
J'imagine qu'il doit être possible de faire un générateur générique de fichier XML à partir d'une DTD.
Sinon, oui, c'est du custom, surtout pour générer un ensemble d'entré valide.
"La première sécurité est la liberté"