CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Astuce d'optimisation + questions basiques

Shiba_the_Inu
Shiba_the_Inu
Niveau 85
03 décembre 2019 à 17:37:20

Bonjour :)
Bon, je vais un peu raconter ma vie, désolé ^^' mais :
J'ai commencé y'a 4-5 semaines à apprendre le javascript et c++, notamment en utilisant RPG maker mv pour me faire la main en pratique (j'avais tenté quand j'étais petit le c et c++ mais je comprenais pas grand chose en fait ^^' rien que le principe des fonction j'étais passé à côté, mais je trouvais ça super prenant, merci à Neverwinter Nights pour ça :o)) )).

Je commence à peu près à me débrouiller et à faire +/- des trucs que je veux (simple certes). Par contre, je suis un peu naze en math/réflexion et concentration, du coup me faut des exemples souvent simples et assez concret, car j'aime bien comprendre le pourquoi du comment, sauf que très souvent les exemples ont tellement de nom de variables qui s'enchainent que j'en perd facilement mon latin.
Je détail ça parce que j'aimerais savoir si vous avez des sites / références qui expliquent simplement via des petits exemples, des principes d'optimisations, pour le javascript et c++. J'aime beaucoup les tuto de https://www.w3schools.com c'est ultra simple, très léger, concis et concret. https://www.pierre-giraud.com/ aussi en français.
J'ai vu qu'il y a des petites astuces, genre sur w3school ils conseillaient de plutôt déclarer les variables de boucle 'for''''' à l'extérieur, plutôt que dans la parenthèse genre :
for(let i = 0; i <10 ; i++)
J'ai appris aussi comment utiliser les opérateur & | >> << etc, même si je pense pas à avoir à m'en servir pour un moment, mais au moins ça m'a permis d'apprendre à compter en binaire et hexadécimal ^^ (c'était pas si dur et en plus ça m'a permis de voir notre système décimal d'un autre œil, mes anciens profs de maths me reconnaitraient pas [[sticker:p/1kki]] )

Bref, désolé, je papote. Mais en gros si vous avez des sites simples qui donnent des astuces pour éviter quelques pièges. Je sais que je débute, mais autant prendre de bonnes habitudes dès le départ.
Par exemple j'avais aussi vu en c++ le poids des variables sur la mémoire, ou qu'en javascript on déconseille d'utiliser des fonction comme new array car c'est "plus lourd" que faire un var x = [] ; ou var x = array(y), mais ils expliquent jamais vraiment pourquoi, et comment je peux le savoir ? C'est un peu ça ce que je cherche. Des petits trucs sympa à savoir, voir même si vous avez des chaines youtubes de vulgarisation sur les bases (le binaire, gestion de la mémoire etc). Utiliser plutôt while, switch ou for etc... par exemple j'avais du mal à comprendre aussi l'intérêt des set et get dans des prototypes "private" puisque du coup ça tuait un peu le principe de private justement... mais je suis tombé sur une explication totalement par hasard sur un forum.
Encore une fois je cherche des trucs simples, car autant je suis super passionné et intrigué par la programmation, autant je suis pas super fut-fut, encore moins dans les domaines scientifiques, même si ça peut paraitre paradoxal, et peut être aussi contraignant pour la suite :rire: J'imagine que chacun à sa façon de faire, mais si certaines "bases" sont préférables que d'autres je préfère le savoir. Par exemple qu'elle est l'impact sur les performances d'une class avec 36 000 "this.xxx" ou le fait de multiplier les function plutôt qu'en faire des grosses... Je sais pas si je suis clair ^^'. Des petites astuces comme les rubriques mitake et performance du site w3school en gros :)

Je rajoute aussi 3 petites questions :
- En c++, à quoi sert exactement le terme unsigned short ?
je pensais que ce serait cool, ce serait une petite variable int qui se bloque à 0, mais en fait non, en l'essayant je me suis juste rendu compte que de 0 ça repart à sa valeur maximale si on va dans le négatif. Du coup quel intérêt par rapport à un short tout court ? car ça me semble limite un peu plus dangereux à l'utilisation.

- En javascript, y'a t-il un équivalent aux pointeurs et références du C++ (donc *variable et &variable ?) Maintenant que j'ai compris le truc j'aurais aimé retrouver ce système sur javascript :o))

En javascript aussi. Mais, UNE FOIS POUR TOUTE :o))
Je vois tout et son contraire, mais le système de classe est-il utile ou non ? La moitié des postes disent que c'est juste du sucre syntaxique car ça n'a pas de valeur "classe" à part entière, l'autre moitié dit que ça existe vraiment... Et à l'utilisation, j'y vois pas trop de différence, je confonds un peu les deux dans la pratique, je préfère utiliser les classes car ça me permet d'y voir un peu plus clair (c'est vraiment le truc qui me manque en javascript par rapport au C++, la rigidité un peu plus clair des type de variables qui fait que je m'y retrouve mieux, plutôt que poser des var qui valent tout et rien à la fois ), mais est-ce que ça a une utilité, est-ce qu'au contraire ça peut poser un problème de performance ?

Bref², désolé pour le pavé, et en vous remerciant d'avance pour vos réponses :) )

Message édité le 03 décembre 2019 à 17:39:04 par Shiba_the_Inu
Raidden36
Raidden36
Niveau 6
03 décembre 2019 à 18:25:50

Concernant la partie JS, pour comprendre le pourquoi du comment faut aller voir le code de chaque fonctions/mot-clef en C. C'est chiant on va pas se le cacher, enfin perso c'est pas trop mon délire.

Par contre pour la partie CPP c'est très simple de trouver la réponse à toutes tes questions (et, je trouve, assez intéressant) : apprends l'assembleur.

Toutes tes questions sont plus ou moins des questions de mémoire, et apprendre l'ASM est pas mal pour comprendre la mémoire.
Tu comprendras comment un compilateur agence les éléments dans les différents segments mémoires, pourquoi, comment un int est représenter en bytes, et accessoirement (même si ça tu l'apprendre en C) à quoi sert malloc et ses équivalents.

Tu apprendras que certains segments ont moins de place que d'autres, qu'on y accède pas de la même façon, et donc que certain segments sont à éviter dans les limites du possible comme la BSS etc...

Bref, à la limite commence le C, puis l'assembleur, et tu comprendras le pourquoi du comment d'un binaire.

Une fois ça fait si tu veux aller encore plus loin, fais du reverse engineerign/binary exploitation. Je trouve ça très formateur aussi.

Message édité le 03 décembre 2019 à 18:27:11 par Raidden36
mov_eax_1
mov_eax_1
Niveau 10
03 décembre 2019 à 19:30:19

tiens juste pour les datatypes C++ j'ai cette page qui résume bien:
https://www.geeksforgeeks.org/c-data-types/

quand a l'utilsation des unsigned int, c'est pour réprésenter un nombre qui ne peut pas être négatif mais attention il faut bien l'utiliser parce ça peut également introduire des bugs si tu fais pas attention genre faire une soustraction de 2 unsigned int qui donneraient un négatif

ouimaisquoi
ouimaisquoi
Niveau 8
03 décembre 2019 à 19:41:14

Pour ne pas te perdre dans les noms de variables il faut que tu commente le code au fur et à mesure que tu le déchiffre. et si le code est volumineux il faut t'aider du papier-crayon-gomme.

Shiba_the_Inu
Shiba_the_Inu
Niveau 85
03 décembre 2019 à 20:53:00

Ok merci, je vais un peu checker ça.

Concernant la partie JS, pour comprendre le pourquoi du comment faut aller voir le code de chaque fonctions/mot-clef en C. C'est chiant on va pas se le cacher, enfin perso c'est pas trop mon délire.

J'ai commencé un peu à bidouiller les code justement en regardant comment ça marche, et comment ça réagit justement sur rpg maker en injectant directement du code dedans. Mais c'est pas toujours évident. En tout cas ça a l'air compliqué, car par exemple pour initialiser des tableaux 2d par exemple je voyais souvent des gens faire en JS des boucle for classique, alors qu'un mec avait juste trouvé ça en une ligne en combinant les function hérité, c'ets assez trippant parfois :o))
genre :
var x = Array(5).fill(0).map(() => Array(4).fill(0));
Et je trouve ça super intéressant comme enchainement, j'essaye du coup de le décortiquer pour voir comment ça réagit exactement, mais c’est typiquement le style de codes pour lesquels je me demande s'il vaut mieux utiliser cette simple ligne, ou si les deux boucle for sont plus simple pour la machine pour initialiser un tableau (rempli de 0 dans cette exemple). J'ai testé pour un petit programme de se déplacer comme sur une map via le tableau en textuel pour commencer, mais je sais pas comment je peux jauger justement si c'est lourd comme code ou non (même si ça reste un truc super simple pour le coup).
J'avais un peu touché au c, j'ai d'ailleurs encore un super bouquin dessus, je vais m'y replonger dedans alors, je me souviens de ce terme malloc d'ailleurs :peur:
Mais le C est encore beaucoup utilisé de nos jours, où c'est passé au C++ ? (simple question, ça m'intéresse quand même de voir de nouvelle chose ^^).

mov_eax_1 :d) Ah j'ai effectivement déjà vu quelques unes de leurs pages, encore de longues heures d'apprentissage à ce que je vois :peur: Le langage C de Tony Zhang. mais certaines choses étaient pas évidentes à l'époque, j'espère que ça passera mieux. En tout cas le Javascript m'a beaucoup aidé à apprendre certaines notions pour le C++, et vice versa.
J'ai cru comprendre que le Perle est utilisé pour les regexp, est-ce qu'il y a d'autres langage que le C qui pourraient être utiles pour apprendre certaines notions ?

Pour ne pas te perdre dans les noms de variables il faut que tu commente le code au fur et à mesure que tu le déchiffre. et si le code est volumineux il faut t'aider du papier-crayon-gomme.

J'avoue que j'ai une tendance à me dire "poua c'est compliqué" :rire: comme dit j'ai beaucoup de mal à me concentrer et parfois j'ai tendance à complexifier les choses. Bon, après faut avouer que comme les langues vivantes avec un peu de vocabulaires ça passe un peu mieux (le traumatisme quand des mecs utilisaient des this et .prototypes de partout couplés à des int* &var :rire: Je vais appliquer ton conseil et essayer de pas me mettre la pression inutilement.

En tout cas je vous remercie déjà pour ces réponses, encore une fois si vous avez des liens précis ou des vulgarisateurs façon fred & jamy, lâchez vous ^^ (par contre plutôt en fr pour des vidéos, je comprends très bien l'anglais mais j'ai du mal à l'oral avec mes soucis d'auditions).

Bon, je vais déjà checker les data types du lien au dessus, c'est le genre de choses que je voulais (par contre ça s'applique pour le javascript aussi ? ou ça peut être différent ?) ainsi que sur les assembleurs.
Encore une longue nuit à prévoir (je suis passé du " je vais jouer un tour de plus" à "je vais écrire une fonction de plus" :rire: )

Message édité le 03 décembre 2019 à 20:55:02 par Shiba_the_Inu
godrik
godrik
Niveau 30
03 décembre 2019 à 23:36:28

Shiba_the_Inu, la seule facon de comprendre ces optimizations est de comprendre comment le systeme fonctionne en lui meme. Sinon, tu vas continue a lire des "formules magique" qui vont te dire "utilise zorglub au lieu de glubzor". Et franchement ca ne te dit pas grand chose.

Pour comprendre pourquoi ceci est mieux que cela. Il faut comprendre ce que fait le systeme a partir de ton code. En C++, comment il le compile, quelles optimizations il peut faire dessus, comment ca tape la memoire, quel instructions assembleur il va generer. En javascript, il y aura quelquechose de silmilaire: comment c'est interprete, comment le modele objet est dans le langage, quelles conversion sont necessaire, ...

Si tu ne comprend pas comment le systeme "execute" le code, tu fas daans la formule magique. Et c'est un puits sans fin de "truc et astuce"

Shiba_the_Inu
Shiba_the_Inu
Niveau 85
03 décembre 2019 à 23:51:39

Ça marche, ça semble pluslong et fastidieux que prévu mais y'a j'ai déjà découvert de chouettes choses.
Tout à l'heure j'ai regardé quelques vidéo sur les assembleur, c'était pas évident, mais certaines expliquaient assez bien avec des visuel, et je suis tombé sur un site pour apprendre le C qui semblent un peu reprendre certains de ces principes dans les explications.
J'ai déjà compris un peu mieux les interactions entre processeur/ram/dd et comment des commandes comme additions ou soustractions sont générées à partir de 0 et 1... mais je vais devoir revoir encore certaines choses car ça fait beaucoup à emmagasiner en une fois.
Par contre ça a l'air plutôt marrant d'utiliser des système ultra basiques, voir directement les premières machines qu'ils utilisaient et les bidouiller sois-même ^^, genre le logiciel cette vidéo rend les choses plus claires : https://youtu.be/bE-aFHiJ4Zk?t=211

godrik
godrik
Niveau 30
04 décembre 2019 à 01:08:34

la serie youtube crash course computer science est tres bien realise pour faire comprendre les bases de l'informatique.

Raidden36
Raidden36
Niveau 6
04 décembre 2019 à 10:21:08

Le 03 décembre 2019 à 19:30:19 mov_eax_1 a écrit :
tiens juste pour les datatypes C++ j'ai cette page qui résume bien:
https://www.geeksforgeeks.org/c-data-types/

quand a l'utilsation des unsigned int, c'est pour réprésenter un nombre qui ne peut pas être négatif mais attention il faut bien l'utiliser parce ça peut également introduire des bugs si tu fais pas attention genre faire une soustraction de 2 unsigned int qui donneraient un négatif

Un unsigned int permet juste de retirer le mode de lecture "inversé", et donc de doubler la taille max de ton int en perdant la possibilité qu'il a à être perçus comme négatif, ça a aussi l'avantage d'être donc plus rapide dans pas mal de cas, comme les divisions (ou lors d'un unsigned, il sufit d'un seul shift, pas besoin de round).

0xfffffffe, au lieu d'être perçus -1 en signed, sera donc bien perçus "normalement", comme valant 4294967294.

Le but est donc surtout d'améliorer très très légèrement les performances (question taille, ton compilateur se chargera de changer le type de ta déclaration dans certains cas, donc c'est pas vraiment un argument de bonne pratique, je trouve) sans que ça ne coûte quoi que ce soit. C'est pour ça que c'est considérer comme une bonne pratique.

Shiba_the_Inu
Shiba_the_Inu
Niveau 85
04 décembre 2019 à 19:10:10

Le 04 décembre 2019 à 01:08:34 godrik a écrit :
la serie youtube crash course computer science est tres bien realise pour faire comprendre les bases de l'informatique.

Je note, en plus y'a des sous titres fr sur la première vidéo :coeur:

Raidden36 :d) Ah, effectivement, je sais pas pourquoi, j'avais cru lire qu'ils avaient la même valeur en bytes et sur la valeur maximale positives, mais j'ai du lire de travers ça effectivement c'était pas le cas ^^'.
Merci pour l'explication ^^.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment