Ça te bouffe toute ta mémoire, et ça commence à avoir des comportements non prévus.
Ça te bouffe toute ta mémoire, et ça commence à avoir des comportements non prévus.
Je comprends un peu mieux dit comme ça, ça se défend.
J'ai toujours l'impression que dans les faits (très personellement), je m'en sers plus justement comme saut d'abstraction, généralement pour expliquer le fonctionnement d'un truc que j'ai fait a posteriori à quelqu'un d'autre, voire pour construire un vocabulaire commun qui n'a rien à voir avec des "observers" ou "factories", plus que "oh tiens j'ai le problème 89 je vais utiliser le design pattern 55" ou comme une question de discipline. Donc j'aurais difficilement cet avis. Mais ceux qui parlent le plus de design pattern en développement doivent pas avoir le même point de vue que moi là-dessus.
Sur ton fondamentalement automatisable, j'étais plus d'accord quand tu disais que leur existence dénotait des faiblesses du(es) langages.
Imaginons qu'un jour on ait un langage qui soit que des briques de design patterns abstraits que tu connectes entre elles (genre la programmation graphique, lul) le boulot du dev ça sera toujours de bosser au niveau d'abstraction N+1 alors que le langage est au niveau N non? Voire N-5. Ou dit autrement, de casser des problèmes complexes à N+1 (comment gérer ces 73 use cases?) en sous-sous-sous-problèmes connus qu'il a reconnu pour y appliquer des solutions connues, genre des appels à des librairies y compris standard et des opérations mathématiques pour l'instant, des design patterns si tu veux demain. Et au final, cette "meta-solution" est comme tu le dis originale, et la valeur ajoutée de l'humain ne change pas beaucoup peu importe la valeur de N.
Le N+1 c'est aussi ton papier quadrillé pour dépasser ce dont est capable le langage (pour l'instant).
C'est aussi compatible avec les réseaux de neurones qui un jour écriront leur code pendant que des gens s'embêteront à choisir les meilleurs, les orchestrer entre eux, leur donner je sais pas quelles instructions qui seront à N+12.
Pendant ce temps-là ce topic parlera d'assembleur.
Pour me répondre à moi-même et vérifier si j'ai bien compris. Ce qu'on appelle "fuite de mémoire" en Java, ce n'est pas avoir de la mémoire allouée à laquelle on n'a plus accès, mais avoir un programme idiot qui garde des références vers des tonnes d'objets inutiles. J'ai vu aussi des cas de fuites de connexions/fichiers ouverts si on compte sur le ramasse-miette pour les fermer, alors que celui-ci peut s'exécuter très tardivement (voire jamais). C'est ça ?
« And now for something completely different », parlons un peu de python. J'ai entamé un projet un peu conséquent en Python/Qt (il faut bien gagner sa croûte, pas de jugement de valeur, merci) et je dois dire que je suis assez circonspect. Passons sur le modèle objet du langage un brin foutraque - et qui exige beaucoup de self-control de la part du développeur -, je viens de tomber récemment sur une autre excentricité. Ingénument, j'ai écrit un truc de ce genre :
...et le compilateur s'est alors mis à insulter ma mère. J'ai cherché des explications, et l'horrible vérité s'est révélée : Python n'autorise pas les assignations dans les expressions. La justification en est donnée par Guido Van Rossum lui-même qui dit, en substance : « nan mais c'est parce que des fois les développeurs y oublient un égal et alors ça marche plus et c'est super grave ». Guido, si tu nous lis : Merde. J'ai 48 balais et presque 25 ans de métier, je n'ai pas besoin des petites roues à l'arrière pour développer. Si j'ai envie d'avoir des effets de bord dans mes conditions, je suis assez grand - et les IDE assez malins pour m'avertir du danger - pour en décider moi-même.Code:if (a = my_function()) == "truc": # Fait quelque chose avec a
'Tain, si les bindings Qt pour Ruby supportaient Qt5, comment qu'il aurait déjà dégagé le reptile !
Wiki : Fuite de mémoire [...] est l'absence de désallocation (de libération) de l'espace utilisé lorsque ces objets ne sont plus référencés.
Je fais plus de java mais en python, c'est super simple a faire : A référence B et B référence A, tu déréférences les deux = fuite mémoire. Tu peux le faire super facilement.
Les dépendances cycliques sont censées être détectée par le GC. En python, je crois que c'est optionnel et on peut se contenter du comptage de référence (qui ne voit pas les cycles). Mais en Java, il est toujours là.
une balle, un imp (Newstuff #491, Edge, Duke it out in Doom, John Romero, DoomeD again)
Canard zizique : q 4, c, d, c, g, n , t-s, l, d, s, r, t, d, s, c, jv, c, g, b, p, b, m, c, 8 b, a, a-g, b, BOF, BOJV, c, c, c, c, e, e 80, e b, é, e, f, f, f, h r, i, J, j, m-u, m, m s, n, o, p, p-r, p, r, r r, r, r p, s, s d, t, t
Canard lecture
Sinon des explications sur certaines fuites : https://www.dynatrace.com/resources/.../memory-leaks/
Le comportement est toujours le même (excepté bug dans le code de la JVM): ralentissement, puis OutOfMemoryError quand tu as atteint la limite fixée au lancement de la JVM
Exactement. Un exemple (qui date de mes vertes années) : j'avais créé un programme qui executer des operations (la nature même de ces operations n'est pas importantes) et je stockais pour affichage le log de ces operations dans un StringBuffer. Ca marchait bien quand tu lançais une 10aine d'operations avant de fermer le programme. Mais les utilisateurs ont commencé à lancer 60,90,240 operations d'affilée. Et je me retrouvais donc avec un objet (le StringBuffer) gros de plusieurs 100aine de Mo... Poum, OutOfMemoryError
Par contre, je crois qu'il y'a une limite, non ? genre A <-> B pas de soucis, mais A -> B -> .... -> Z -> A ça commence à poser problèmes ?
Ce qu'il faut savoir, c'est qu'on ment beaucoup aux minmatars, surtout lorsqu'ils posent des questions du style: "t'es sûr que ça vole, ce truc ?" Cooking Momo, le 30/08/09
Exactement. En informatique, on monte continuellement en abstraction, ce qui permet de gagner en productivité et de résoudre des problèmes de plus en plus difficiles. Par exemple, on n'aurait jamais pu marcher sur la Lune si… euh non rien.
Non, si tu n'as de référence en vie sur aucun de ces objets, le GC ne va même pas regarder les relations qu'ils ont entre eux.Par contre, je crois qu'il y'a une limite, non ? genre A <-> B pas de soucis, mais A -> B -> .... -> Z -> A ça commence à poser problèmes ?
Les cas de fuites mémoire en pratique sont à l'interface entre la JVM et le reste du monde : avec les objets système comme les fichiers et processus, avec les wrappers sur des bibliothèques écrites dans d'autres langages, etc. En particulier, il peut y avoir des contraintes sur l'ordre dans lequel ces trucs doivent être désalloués, et ça le GC n'en a rien à battre, et fait de la merde (mais seulement en prod et jamais en debug, because Murphy).
À l'époque de .Net, Microsoft expliquait que le comportement non-déterministe du GC de Java allait provoquer incessamment l'apocalypse sur terre. Contrairement aux finaliseurs de .Net qui eux allaient amener la paix dans le monde.
Mais ça c'était il y a 15 ans et je suppose que c'est de l'histoire ancienne aujourd'hui. Si de telles failles dans les langages n'étaient pas corrigées rapidement, ça se saurait.
Je dois écrire un peu de code Java après avoir batifolé avec Kotlin.
Et pourtant j'aimais bien Java avant et c'est du Java8...
Toute cette belle fluidité de Kotlin qui était rentrée naturellement dans le bout de mes doigts en quelques heures
Et ces saloperie de NullPointerException qui disparaissent élègament avec Kotlin... re
Dernière modification par William Vaurien ; 03/10/2017 à 18h11.
Les gens d'Intel en parlent continuellement. Pour promouvoir leurs procs et solutions de développement sans doute, mais peut-être pas que. Et c'est pas forcément les pires programmeurs sur le marché.
Tout le monde ne peut pas se permettre de considérer les parties basses comme des abstractions ou des choses vaguement casse-pied, et ces gens n'ont aucune idée de ce qu'ils ratent de toute manière.
En tous cas, quand j'ai commencé à m'intéresser aux intrinsics assembleur, j'en ai retrouvé littéralement partout, et notamment dans des programmes et applis que vous utilisez tous les jours
Ce qu'il faut savoir, c'est qu'on ment beaucoup aux minmatars, surtout lorsqu'ils posent des questions du style: "t'es sûr que ça vole, ce truc ?" Cooking Momo, le 30/08/09
Même en ciblant Skylake-X-avec-2-FMA explicitement ?
Peut-être qu'il choisit de rester en AVX2 exprès parce qu'il sait déjà que le code AVX-512 irait moins vite.
Oui, parce quand tu vois la claque que prennent les fréquences à la première instruction AVX-512 utilisée, tu comprends vite que comme toutes les bonnes choses, il faut pas trop en abuser.
C'était quand la dernière fois qu'on avait vu un CPU à 8700$ qui tourne à 1,3 GHz déjà ?
Putain, combo de merde. Bon courage.
Ce qu'il faut savoir, c'est qu'on ment beaucoup aux minmatars, surtout lorsqu'ils posent des questions du style: "t'es sûr que ça vole, ce truc ?" Cooking Momo, le 30/08/09
Yep, depuis des années. Juste que la classe générées est généralement bien merdique... Et quand as des namespaces pourris à foisons, ça arrange pas les choses...
Ce qu'il faut savoir, c'est qu'on ment beaucoup aux minmatars, surtout lorsqu'ils posent des questions du style: "t'es sûr que ça vole, ce truc ?" Cooking Momo, le 30/08/09
Voilà, en gros il y a plusieurs XSD qui sont entremêlés avec des namespaces pour chacun. En plus le xml cible redéfini les namespaces au milieu du document...
Et du coup il faut configurer JAXB (le truc qui bind XML et le objets), parce que naturellement il ne sait pas gérer les namespaces (enfin si il les gère, mais pas les alias)Code PHP:
<?xml version="1.0" encoding="UTF-8"?>
<MaBalise xmlns:xy="http://blabla" xmlns="http://toto">
<xy:UneAutre />
<xy:PourLeFun xmlns="http://blabla">
<TaVuPlusDeNameSpace />
<UneAutre />
<xy:PourLeFun>
</MaBalise>
ni d'autres subtilités.
Et là c'est le drame, la doc est quasi inexistante, il faut utiliser des extensions mal documentées et maintenu par un gars sur github, éplucher des douzaines de blogs, de questions StackOverflow, de forum pour trouver des réponses.
En plus les configurations changent suivant la version du bordel et du coup pas mal de réponse ne sont plus valides : tiens ce blog propose un solution facile à mettre en oeuvre, zut il date de 2011, c'est plus valide pour la version 2
Par exemple j'ai trouvé une réponse qui me donnaient pas mal de clefs de compréhension dans un vieux forum Google code qui hébergeait un des plugins nécessaires avant sa migration github...
Bref on franchi les portes de l'enfer à ce moment là...
Et le XML va et vient vers un service externe, donc je DOIS lire et écrire du XML comme convenu, pas arrangé à ma sauce...
(je suis coincé avec JAXB pour le moment car c'est le standard et c'est ce qu'utilise mes collègues, qui eux ont la chance d'avoir des XSD sans namespace Je verrais bien si je bloque pour passer sur un autre framework !)
Ça ne serait pas de l'EDIFACT que tu traites ?
Salut les canards,
Je voudrais me lancer dans un "side project" side project pour faire une site web qui stream une video et qui mine de la crypto-monnaie( coinhive).
Le but c'est d'avoir un site entre potes et essayer de financer le serveur avec la crypto-monnaie, je suis pas sur du tout que c'est viable vu qu'il y aura très peu d'utilisateurs mais bon c'est aussi pour le fun.
Je viens vers vous car je suis dev C/C# mais j'y connais pas grand chose sur le dev Web et comme tout est constante évolution je ne sais pas vers quelle techno me tourner.
Le but de l'itération 1 : une page web blanche avec une video streamée et la crypto en minée.
Tout les conseils sont la bienvenue
Utiliser coinhive c'est une bête balise html à intégrer à ton site (t'apprendra rien en fait).
Si t'est dev C#, je te conseille de regarder du coté de ASP.NET MVC ou ASP.NET Core (mieux ce dernier : c'est nouveau et ça tourne autant sur linux que windows) vu que le backend sera en C# .NET.
Pour le streaming, ça dépend ce que tu veux faire.
ASP.NET je connais un peu car je bosse dans une boite qui fait un logiciel de gestion qui est un site web mais je ne travail pas de se coté je m’occupe plutôt de la gestion des périphériques lecteurs etc... et des machins embarqués.
Pour le streaming je sais pas du tout quoi utiliser pour l'instant comme technos/framework etc... le but c'est de faire un truc un peu comme youtube pour la lecture de video.
Edit: Je préfère prendre les meilleures technos pour le projet même si je ne les connais pas et les apprendre.
Dernière modification par Ifit ; 05/10/2017 à 18h35.