Se connecter
Se connecter

ou
Créer un compte

ou
Agrandir
Les Mains dans le Cambouis
Bidouille & Développement Informatique

Sujet Le pub des programmeurs

  • 1 925 réponses
  • 117 participants
  • 122 267 vues
  • 130 followers
Sujet de la discussion Le pub des programmeurs
Salut :coucou: y a des programeurs sur AF si oui vous bossez sous quoi ?
Afficher le sujet de la discussion
1701
Citation :
Par ailleurs, l'esprit humain est super mal équipé pour penser des flux d'information parallèles intriqués (préemption de threads, partage de ressources...).

Ça c’est clair que c’est un gros souci. :-D
Sur l’un des logiciels dont je m’occupe (2 millions de lignes de code ; d’ailleurs les chiffres de l’article me semblent exagérés de bien un facteur 10), on vient de corriger des gros bugs de ce genre, qui datent de la version 1 en 1980, et qui se produisent beaucoup plus fréquemment depuis un changement de plateforme (processeur monocœur à multicœurs). Ça n’a pas été simple.

Il semble que certains modèles de programmation récents aident bien pour ce genre de choses : Enterprise Java Beans, Corba Components...

Sinon le SDL Z100 est très efficace là-dessus. Mais c’est de l’artillerie beaucoup plus lourde ; même si on se contente de l’utiliser seulement pour les communications et accès concurrents aux ressources, entre threads.

[ Dernière édition du message le 26/11/2017 à 19:00:10 ]

1702
Citation de Dr :
on vient de corriger des gros bugs de ce genre, qui datent de la version 1 en 1980, et qui se produisent beaucoup plus fréquemment depuis un changement de plateforme (processeur monocœur à multicœurs). Ça n’a pas été simple.


Je bosse précisément sur ce sujet.
Dans un processeur multi-cœur, les cœurs se partagent des ressources matérielles : périphériques, bus d'interconnexion (ou de préférence network-on-chip), et même la mémoire (souvent dès le cache L2). Quant un cœur accède à une ressource partagée, elle n'est plus disponible pour les autres, qui doivent attendre qu'il ait fini. Donc le temps d'exécution d'une tâche sur un cœur de processeur dépend de ce qui se passe sur les autres cœurs.
Or les normes de certification pour systèmes critiques (tu dois être familier de la DO-178C dans l'avionique civile) imposent une isolation stricte entre les applications, un logiciel n'a pas le droit d'impacter le temps d'exécution d'un autre.
C'est notamment pour ca qu'il n'y a pas encore de processeurs multi-cœurs dans les avions.

Ajoute que les processeurs modernes ne sont absolument pas optimisés pour le déterminisme, mais au contraire pour maximiser la performance en moyenne, souvent au détriment du pire cas (avec plein de mécanismes spéculatifs comme l'exécution dans le désordre, la prédiction de branchement, le pré-fetch, etc.) et que beaucoup de mécanismes matériels ne sont pas documentés (pour des questions de propriété intellectuelle), et tu vois qu'on ne risque pas de manquer de boulot.

Citation de Dr :
Il semble que certains modèles de programmation récents aident bien pour ce genre de choses : Enterprise Java Beans, Corba Components...


Tu veux dire que ca aide à faire des bugs ? image.php
1703
Disons que ça aide des grosses pinc développeurs juniors à bosser sur des programmes multithreadés.


Citation :
Or les normes de certification pour systèmes critiques (tu dois être familier de la DO-178C dans l'avionique civile)

Ça c’est pour l’avionique (= l’électronique de bord ess avions de ligne) ; c’est plus critique que ce sur quoi je bosse.

Je travaille dans le contrôle aérien, donc des logiciels de contrôle, au sol. On a différents niveaux de criticité, le plus critique étant la radio, puis l’image radar ; mais le plus gros volume des logiciels porte sur des données « plan de vol », météo... et c’est de l’informatique industrielle ; SWAL 3 si ma mémoire est bonne. Par contre, depuis toujours on fait très attention aux redondances, aux basculements système actif / système de secours... Et aussi à l’anti-intrusion (nos systèmes sont très isolés).

Sinon pour les bugs dont je parlais, ils étaient dûs à du codage fait par des cochons. Dans des call-backs de signaux Unix, il y avait beaucoup trop de code : manipulations de variables partagées et appels de fonctions pas conçues pour être ré-entrantes... Par contre des évolutions récentes de Linux nous aidés à résoudre ces problèmes en permettant de traiter ces interruptions par des signaux, comme des activations de File Descriptor dans une boucle principale à base de select() ou poll(). Ça a beaucoup simplifié ces corrections. Et on peut penser que cet enrichissement du select/poll vient du fait que ce mauvais codage est malheureusement courant... :-D

[ Dernière édition du message le 26/11/2017 à 21:59:36 ]

1704
Citation de Dr :
Après si on ne connaît pas ces sujets, cet article reste une introduction assez intéressante.
Je pense qu’il a aussi raison de souligner qu’en automobile la criticité semble un peu sous-évaluée.


C'est effectivement mon point de vue, ne côtoyant de l'informatique "professionnelle" que celle de gestion, applis web ou - las - bureautique.
Il me semble que l'article original en provenance de The Atlantic est plus fouillé.

Et j'expérimente très modestement la même impression que lorsqu'on a une idée très claire d'un traitement à effectuer ou d'un petit logiciel métier à créer, autant dire pour des choses triviales dans mon domaine, les outils pour parvenir rapidement à un résultat concret demeurent encore bien trop lourds, complexes, sans parler des adhérences avec le système d'exploitation ou l'environnement d'exécution cible.
L'exemple du copier/coller de code vbs/js qui fonctionne depuis StackOverflow sent très fort le vécu. :oops2:

Du temps de ma splendeur passée, j'ai participé à l'introduction de quelques bugs sur des applications comptables transactionnelles (COBOL inside) qui ne sont apparus qu'en production, d'où des coups de fils paniqués de mes collègues le lendemain matin alors que je roupillais du sommeil du juste.
Une fois la situation apaisée, la réplique habituelle devant la tasse de café matinale était : "heureusement qu'on ne fabrique pas des avions !" :-D

En tout cas vos échanges sont super intéressants. :aime:

« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)

1705
Je ne pense pas que ce genre de choses soit utilisable dans toutes les industries.
Combien de packages sont écrits par des gens qui n'ont aucune idée de ce qu'ils font ? Combien sont des matheux qui n'ont jamais su ce qu'était un processeur ?
Autre chose, on parle de perf et Corba/Java ? Non, mais faut arrêter :D
1706
1707
1708
:bave:

(Je pense qu'il faut avoir pratiqué le wrapping d'une carte à microprocesseur --un Z80 en ce qui me concerne-- pour apprécier la "beauté" de la chose.)

[ Dernière édition du message le 28/11/2017 à 11:15:00 ]

1709
Question de newbie:

J'aurais besoin d'appeler cette fonction dans un script python: https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms686223(v=vs.85).aspx

Citation :
Minimum supported client: Windows XP
Library: Kernel32.lib
DLL: Kernel32.dll


Si j'ai bien compris c'est une fonction déjà implémenté dans une librairie sur tous les OS Crosoft à parti d'XP? C'est bien ça?

'Fin j'ai pas besoin de créer une lib c++ perso, d'y coller la fonction et de compiler tout le bordel pour pouvoir ensuite l'importer dans mon script?

Je devrais juste avoir à importer la fonction qui est dans le fichier kernel32.dll avec ctypes?


Edit: Bon je crois avoir résolu mon problème comme un grand.


import ctypes

lib = ctypes.WinDLL('kernel32')

lib.SetProcessAffinityMask()

[ Dernière édition du message le 06/02/2018 à 21:41:00 ]

1710
Citation :
Si j'ai bien compris c'est une fonction déjà implémenté dans une librairie sur tous les OS Crosoft à parti d'XP? C'est bien ça?

Oui.

Citation :
'Fin j'ai pas besoin de créer une lib c++ perso, d'y coller la fonction et de compiler tout le bordel pour pouvoir ensuite l'importer dans mon script?

En C/C++, tu aurais juste besoin de mettre un
#include WinBase.h
dans ton code, de linker Kernel32.lib pour compiler, et d'avoir Kernel32.dll dans le PATH pour exécuter.
Mais comme c'est une lib Windows, le .lib est linké automatiquement si tu utilises Visual et le .dll est déjà dans le path, donc dans la pratique t'aurais plus qu'à mettre le #include.

En Python, je ne sais pas.