SCADE est un outil top pour n'importe quel code embarqué. Peu de bug, facile à modifier. Et le code généré est rapide (code C "propre").
Mais comme le compilateur est certifié comme peut l'être un code aéronautique, il coute une blinde. Les clients ont du mal à justifier son cout par rapport à un GCC gratuit. Mais on a une boite brésilienne qui a préféré acheter du SCADE, car il ne trouvait de codeur en techno classique pour faire des petits drones. Et en équipe réduite, il refait son code beaucoup plus rapidement.
Dans l'automobile, c'est sans doute le cas. Dans l'aéronautique, les contrôleurs ont fait jeter des codes complets pour mauvaises traçabilités (par exemple, le 1er fadec de l'A400M, de mémoire).
"Je ne connaissais pas le principe, l'idée est intéressante ça mérite réflexion. L'idée est de déterminer « statiquement » les besoins en mémoire, non à la compilation, mais le plus tôt possible à l'exécution et ne plus faire d'allocations par la suite ?"
Oui, c'est l'idée. Cela peut s'appliquer souvent. Je crois que haproxy fonctionne ainsi. Tu as un modèle de mémoire qui ne se croit pas infini. Il faut donc en demander au début une certaine quantité, et ne plus en bouger. En plus, cela évite les problèmes de fragmentation.
"Ce que tu décris sur la gestion des objets, n'est-ce pas justement le principe du RAII ?"
Cela y ressemble un peu. Mais tu peux imaginer des cas supplémentaires qui détruisent une arborescence d'objet en dehors du RAII. Et il faut gérer en plus les pointeurs qui ciblent un objet détruit.
Dans le domaine, dans l'embarqué, c'est quand même du C ou du C++, et la bite et le couteau avec des tests unitaire à taux de couverture MCDC. SCADE est vu souvent comme un canon pour écraser une mouche(sauf DO178 niveau A, évidement).
Ariane 5, c'est surtout un handler d'exception sur dépassement de capacité d'une variable qui ne servait à rien, qui lance un code d'autotest, le problème. J'imagine que c'est pour cela qu'il y a une chasse au code "mort" depuis.
L'outil génère un "metafichier" par fichier dans le répertoire ./list/ ce fichier contient la taille et un path vers le fichier réel. Si un fichier meta n'est pas dans ./list/ le binaire va tenter de le replacer par son fichier d'origine et va ajouter son path dans le fichier meta de ./list/.
Il faut voir. Les listes sont ridicules dans 99% des cas. Il y a 1 ou 2 éléments. Pour des tailles inférieurs à 100, c'est très rares d'avoir un container qui bas une liste. Les surcouts statiques sont souvent très couteux (la constante derrière, le O(1))
Il existe un paradigme que je n'ai quasiment jamais vu utiliser. SCADE s'interdit toute allocation et utilise de gros buffer statique, et cela marche très bien pour 99% du code embarqué.
Le problème d'absence d'allocation se pose si la taille des entrées n'est pas connu. C'est le cas dans la norme ARINC 661 qui est un serveur graphique dont les widgets sont connu à l'init déclaré dans un fichier de définition.
Je pense que l'allocation à l'init permet de gérer pas mal de cas, ou au moins, à un temps précis, ce qui permet de gérer l'erreur le plus tôt possible. Un système à gestion automatique de mémoire, pourrait calculer les besoins mémoire au démarrage (selon la taille d'un fichier par exemple) et ensuite ne plus faire d'allocation du tout.
Une autre vois serait de mieux gérer l'appartenance des objets. Dans un système classique, un objet est créé en vrac et on fait des références dessus. Dans l'ingénierie des modèles, si on définit un diagramme de classe, on a clairement une notion d'appartenance à un arbre, et "des" références. Mais cela veut clairement dire que la destruction de la racine de l'arbre entraine toutes les feuilles. Je ne connais pas non plus de gestion de mémoire automatique qui utilise cette propriété.
"Les domaines pour lesquels un GC est inenvisageable à l'heure actuelle ne risque pas de diminuer parce que, pour la plupart, ce sont des domaines où les performances et/ou la latence sont primordiales et donc, on en revient à ce qu'on disait au début."
Typiquement tout ce qui est "safety critical" ne supporte pas l'allocation mémoire, alors un GC… (le SC, c'est pour les avions, les trains, l'industriel, le ferroviaire, la voiture…)
Et ce genre de code a tendance à vouloir enfler à très grande vitesse. Il y a une énorme différence entre la taille de code embarqué d'il y a 10 ans, et le code de maintenant.
C'est gentil, j'aurais été curieux de voir le résultat. Le logiciel est en version stable, mais n'a pas d'utilisateur :) Le code est plutôt très rapide (optimisation des appels noyaux), il scanne en profondeur les répertoires de façon très efficace.
J'ai voulu faire un système d'échange simple de la main à la main avec un système de fichier qui en représente de plus gros. L'interface a une seul action, mais peu de monde comprend le fonctionnement (cf la doc). J'avais posté ici, sans grand succès.
Si un jour, je suis motivé, je couperais le programme en 2, avec un binaire pour générer les petits fichiers, et un binaire pour lancer la copie. Cela pourra être utile si on veut réorganiser une arborescence complète, sans attendre la fin de chaque copie (on fait l'arborescence à la main avec les petits fichiers, puis une seul commande les remplacerait avec les vrais).
Si je me rappelles bien, j'ai un répertoire demo avec un script qui lance le binaire.
GNU avait une licence spécifique de documentation, qui empêche la modification de morceau de document, l'idée est que l'on doit pouvoir faire modifier la documentation elle-même, mais pas l'explication sur les motivation de la FSF.
Les licences CC qui arrivent ensuite, démontre que ce genre de précaution n'est pas forcément nécessaire. Très peu de licence CC sont réellement libres, c'est moins gênant pour l'utilisateur que pour un logiciel. C'est sans doute pour cela que c'est moins répandu que le logiciel libre.
L'idée est de dire qu'un logiciel est un outil qui n'est jamais fini par définition. Une œuvre d'art est terminé, même si elle pourrait servir pour en créer d'autre.
Cela voudrait dire que l'option "BY" permet de retrouver l'auteur original, mais les créateurs de la GPL ont toujours vu cette clause comment étant très difficile à mettre en œuvre en pratique.
(raison pour laquelle le logiciel libre qu'est un Firefox modifié ne s'appellait pas Firefox dans Debian)
C'est surtout parce que "Firefox" est une marque déposée.
Disons qu'un système comme celui de Nice mais en open data, cela permet à google map, waze et autre GPS d'inclure l'information dans leur système. Avoir encore une application pour ça, c'est très peu efficace.
Cela me rappelle un pattern tout con, que je n'arrivais pas à faire en ocaml. Je lisais une grande série de petit fichiers. En C, le réflexe est d'utiliser et réutiliser toujours le même buffer de taille "suffisante". Or c'est impossible en Ocaml car les string ne sont pas mutable. Les buffers le sont, mais il n'existe pas vraiment de fonction de parsing utilisant des buffers, à la place des string. Donc, il fallait paramétrer le gc pour ne pas qu'il se lance, résultat : 30% de perf en plus, mais explosion de l'usage de la mémoire.
Souvent les mainteneurs de logiciel disposent de leur propre boite. Et tu peux faire un don sous forme de maintenance. L'état Allemand paye le mainteneur de gpg de cette façon, il me semble.
Un autre point : les classements. La derniers fois que j'ai joué, le premier avait annoncer un code de 50 000 lignes ! C'est totalement impossible à faire sans bosser dessus plusieurs heures par jour.
Pourquoi ne pas faire un autre classement sur la taille du code par exemple ? En genre d'ELO par ligne de code. Cela permet de se casser la tête mais sur une taille limitée.
On peut imaginer aussi des catégories, comme pour les démos. Le meilleurs en moins de 1000 lignes (calculé par l'outil SLOCCount, par exemple, ou une taille de fichier max une fois compressé par gzip)
Est-ce que vous avez amélioré le debug ? Lors du dernier tournoi, j'aurais aimé pouvoir ajouter des étiquettes sur les cases de la carte. C'était assez difficile de rassembler autant d'informations de debug uniquement en mode texte.
Cela dépend vraiment de l'école. Mais la mienne allait vraiment de l'analogique, la conception numérique, le traitement du signal, les couches ISO, le réseau, le dev embarqué, du c++, jusqu'au système d'info, bd. J'ai fais une option microelec, donc, je suis moins à l'aise dans le dev d'applicatif "lourd", mais c'est mon boulot actuel.
En France, un ingénieur est généraliste. Dans mon école d'ingé, tu faisais de l'électronique numérique, analogique, du codage C bas niveau, de la base de donné, de l'os, de la conception d'ordinateur, etc…
J'imagine qu'un BTS n'ayant fait que du dev web, devait être meilleur en dev web, c'est sûr, mais il ne pourra pas sortir de cette formation de base.
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 3.
SCADE est un outil top pour n'importe quel code embarqué. Peu de bug, facile à modifier. Et le code généré est rapide (code C "propre").
Mais comme le compilateur est certifié comme peut l'être un code aéronautique, il coute une blinde. Les clients ont du mal à justifier son cout par rapport à un GCC gratuit. Mais on a une boite brésilienne qui a préféré acheter du SCADE, car il ne trouvait de codeur en techno classique pour faire des petits drones. Et en équipe réduite, il refait son code beaucoup plus rapidement.
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 2.
On peut aussi parler de Rust, le langage de Mozilla, qui offre le choix concernant la gestion de mémoire (GC ou pas GC, utilisation de pile, etc…).
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 2.
Dans l'automobile, c'est sans doute le cas. Dans l'aéronautique, les contrôleurs ont fait jeter des codes complets pour mauvaises traçabilités (par exemple, le 1er fadec de l'A400M, de mémoire).
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 2.
Oui, c'est l'idée. Cela peut s'appliquer souvent. Je crois que haproxy fonctionne ainsi. Tu as un modèle de mémoire qui ne se croit pas infini. Il faut donc en demander au début une certaine quantité, et ne plus en bouger. En plus, cela évite les problèmes de fragmentation.
Cela y ressemble un peu. Mais tu peux imaginer des cas supplémentaires qui détruisent une arborescence d'objet en dehors du RAII. Et il faut gérer en plus les pointeurs qui ciblent un objet détruit.
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 3.
Dans le domaine, dans l'embarqué, c'est quand même du C ou du C++, et la bite et le couteau avec des tests unitaire à taux de couverture MCDC. SCADE est vu souvent comme un canon pour écraser une mouche(sauf DO178 niveau A, évidement).
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 1.
Ariane 5, c'est surtout un handler d'exception sur dépassement de capacité d'une variable qui ne servait à rien, qui lance un code d'autotest, le problème. J'imagine que c'est pour cela qu'il y a une chasse au code "mort" depuis.
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 2.
L'outil génère un "metafichier" par fichier dans le répertoire ./list/ ce fichier contient la taille et un path vers le fichier réel. Si un fichier meta n'est pas dans ./list/ le binaire va tenter de le replacer par son fichier d'origine et va ajouter son path dans le fichier meta de ./list/.
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 3.
Il faut voir. Les listes sont ridicules dans 99% des cas. Il y a 1 ou 2 éléments. Pour des tailles inférieurs à 100, c'est très rares d'avoir un container qui bas une liste. Les surcouts statiques sont souvent très couteux (la constante derrière, le O(1))
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 5.
Je ne suis pas sûr.
Il existe un paradigme que je n'ai quasiment jamais vu utiliser. SCADE s'interdit toute allocation et utilise de gros buffer statique, et cela marche très bien pour 99% du code embarqué.
Le problème d'absence d'allocation se pose si la taille des entrées n'est pas connu. C'est le cas dans la norme ARINC 661 qui est un serveur graphique dont les widgets sont connu à l'init déclaré dans un fichier de définition.
Je pense que l'allocation à l'init permet de gérer pas mal de cas, ou au moins, à un temps précis, ce qui permet de gérer l'erreur le plus tôt possible. Un système à gestion automatique de mémoire, pourrait calculer les besoins mémoire au démarrage (selon la taille d'un fichier par exemple) et ensuite ne plus faire d'allocation du tout.
Une autre vois serait de mieux gérer l'appartenance des objets. Dans un système classique, un objet est créé en vrac et on fait des références dessus. Dans l'ingénierie des modèles, si on définit un diagramme de classe, on a clairement une notion d'appartenance à un arbre, et "des" références. Mais cela veut clairement dire que la destruction de la racine de l'arbre entraine toutes les feuilles. Je ne connais pas non plus de gestion de mémoire automatique qui utilise cette propriété.
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 6.
Typiquement tout ce qui est "safety critical" ne supporte pas l'allocation mémoire, alors un GC… (le SC, c'est pour les avions, les trains, l'industriel, le ferroviaire, la voiture…)
Et ce genre de code a tendance à vouloir enfler à très grande vitesse. Il y a une énorme différence entre la taille de code embarqué d'il y a 10 ans, et le code de maintenant.
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 2.
C'est gentil, j'aurais été curieux de voir le résultat. Le logiciel est en version stable, mais n'a pas d'utilisateur :) Le code est plutôt très rapide (optimisation des appels noyaux), il scanne en profondeur les répertoires de façon très efficace.
J'ai voulu faire un système d'échange simple de la main à la main avec un système de fichier qui en représente de plus gros. L'interface a une seul action, mais peu de monde comprend le fonctionnement (cf la doc). J'avais posté ici, sans grand succès.
Si un jour, je suis motivé, je couperais le programme en 2, avec un binaire pour générer les petits fichiers, et un binaire pour lancer la copie. Cela pourra être utile si on veut réorganiser une arborescence complète, sans attendre la fin de chaque copie (on fait l'arborescence à la main avec les petits fichiers, puis une seul commande les remplacerait avec les vrais).
Si je me rappelles bien, j'ai un répertoire demo avec un script qui lance le binaire.
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 2.
Je ne retrouve plus le problème précisément. Le code est là :
https://github.com/nicolasboulay/index2share/blob/master/src/meta.ml
La fonction read peut être appelé des dizaines de milliers de fois. Je lis le fichier et je le convertis dans une petite structure de donné.
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 2.
Je vais retrouver le pattern, si tu veux. C'est un code un peu ancien.
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 2.
Le problème est là, tu alloues plein de mémoire à ce moment-là. Ce ne sont pas des "slices".
"La première sécurité est la liberté"
[^] # Re: Pas d’accord, mais on s’en fout un peu
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Pourquoi l'art libre est aussi important que le logiciel libre. Évalué à 3.
GNU avait une licence spécifique de documentation, qui empêche la modification de morceau de document, l'idée est que l'on doit pouvoir faire modifier la documentation elle-même, mais pas l'explication sur les motivation de la FSF.
Les licences CC qui arrivent ensuite, démontre que ce genre de précaution n'est pas forcément nécessaire. Très peu de licence CC sont réellement libres, c'est moins gênant pour l'utilisateur que pour un logiciel. C'est sans doute pour cela que c'est moins répandu que le logiciel libre.
L'idée est de dire qu'un logiciel est un outil qui n'est jamais fini par définition. Une œuvre d'art est terminé, même si elle pourrait servir pour en créer d'autre.
Cela voudrait dire que l'option "BY" permet de retrouver l'auteur original, mais les créateurs de la GPL ont toujours vu cette clause comment étant très difficile à mettre en œuvre en pratique.
C'est surtout parce que "Firefox" est une marque déposée.
"La première sécurité est la liberté"
[^] # Re: "Alors, la smart city est-elle vouée à l'échec ?"
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Les chroniques du progrès : à bégayer ou à dégager ?. Évalué à 3.
Disons qu'un système comme celui de Nice mais en open data, cela permet à google map, waze et autre GPS d'inclure l'information dans leur système. Avoir encore une application pour ça, c'est très peu efficace.
"La première sécurité est la liberté"
[^] # Re: Destructeurs
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 7.
Cela me rappelle un pattern tout con, que je n'arrivais pas à faire en ocaml. Je lisais une grande série de petit fichiers. En C, le réflexe est d'utiliser et réutiliser toujours le même buffer de taille "suffisante". Or c'est impossible en Ocaml car les string ne sont pas mutable. Les buffers le sont, mais il n'existe pas vraiment de fonction de parsing utilisant des buffers, à la place des string. Donc, il fallait paramétrer le gc pour ne pas qu'il se lance, résultat : 30% de perf en plus, mais explosion de l'usage de la mémoire.
"La première sécurité est la liberté"
[^] # Re: Classement différent : limiter la taille du code, pour limiter le temps à y consacrer
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Smash The Code, concours d'intelligence artificielle, démarre le 30 avril 2016. Évalué à 3.
Bon, le gars a du pipoter.
N’empêche que cela ne change rien à la proposition de faire des catégories de logiciel par leur taille.
Le plus simple est de jouer sur le même plan que le benchmark suivant : https://benchmarksgame.alioth.debian.org/how-programs-are-measured.html un gzip du code sans les commentaires.
"La première sécurité est la liberté"
[^] # Re: en entreprise
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Libre ne veut pas dire gratuit : une présentation. Évalué à 4.
Souvent les mainteneurs de logiciel disposent de leur propre boite. Et tu peux faire un don sous forme de maintenance. L'état Allemand paye le mainteneur de gpg de cette façon, il me semble.
"La première sécurité est la liberté"
[^] # Re: Classement différent : limiter la taille du code, pour limiter le temps à y consacrer
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Smash The Code, concours d'intelligence artificielle, démarre le 30 avril 2016. Évalué à 2.
Vu le niveau de l'AI, cela m'étonnerait que cela soit issue d'un simple automate.
"La première sécurité est la liberté"
[^] # Re: Classement différent : limiter la taille du code, pour limiter le temps à y consacrer
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Smash The Code, concours d'intelligence artificielle, démarre le 30 avril 2016. Évalué à 3.
Je ne comprends pas la question :)
"La première sécurité est la liberté"
# Classement différent : limiter la taille du code, pour limiter le temps à y consacrer
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Smash The Code, concours d'intelligence artificielle, démarre le 30 avril 2016. Évalué à 4.
Un autre point : les classements. La derniers fois que j'ai joué, le premier avait annoncer un code de 50 000 lignes ! C'est totalement impossible à faire sans bosser dessus plusieurs heures par jour.
Pourquoi ne pas faire un autre classement sur la taille du code par exemple ? En genre d'ELO par ligne de code. Cela permet de se casser la tête mais sur une taille limitée.
On peut imaginer aussi des catégories, comme pour les démos. Le meilleurs en moins de 1000 lignes (calculé par l'outil SLOCCount, par exemple, ou une taille de fichier max une fois compressé par gzip)
"La première sécurité est la liberté"
# cool...
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Smash The Code, concours d'intelligence artificielle, démarre le 30 avril 2016. Évalué à 3.
Je sens que cela va prendre du temps :)
Est-ce que vous avez amélioré le debug ? Lors du dernier tournoi, j'aurais aimé pouvoir ajouter des étiquettes sur les cases de la carte. C'était assez difficile de rassembler autant d'informations de debug uniquement en mode texte.
"La première sécurité est la liberté"
[^] # Re: au final
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Ce logiciel qui choisit ta fac. Évalué à 3.
Cela dépend vraiment de l'école. Mais la mienne allait vraiment de l'analogique, la conception numérique, le traitement du signal, les couches ISO, le réseau, le dev embarqué, du c++, jusqu'au système d'info, bd. J'ai fais une option microelec, donc, je suis moins à l'aise dans le dev d'applicatif "lourd", mais c'est mon boulot actuel.
"La première sécurité est la liberté"
[^] # Re: au final
Posté par Nicolas Boulay (site web personnel) . En réponse au journal Ce logiciel qui choisit ta fac. Évalué à 3.
En France, un ingénieur est généraliste. Dans mon école d'ingé, tu faisais de l'électronique numérique, analogique, du codage C bas niveau, de la base de donné, de l'os, de la conception d'ordinateur, etc…
J'imagine qu'un BTS n'ayant fait que du dev web, devait être meilleur en dev web, c'est sûr, mais il ne pourra pas sortir de cette formation de base.
"La première sécurité est la liberté"