AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Parlez de ce que vous voulez (Partie 731)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1 ... 13 ... 21, 22, 23
AuteurMessage
death_riser
Utilisateur confirmé: Rang ****
avatar

Messages : 887
Localisation : Devant mon pc, sur le CBNA, tien !
Projet Actuel : Elonia


MessageSujet: Re: Parlez de ce que vous voulez (Partie 731)   Dim 8 Oct 2017 - 13:05

Après plusieurs années, je suis de retour... Du coup y'a encore des gens sur GameMaker ici ? gnii
Je comptais m'y remettre histoire de tâtter un peu les nouveautées depuis le temps.

Content de voir que le forum est toujours actif, en tous cas. happy1

_________________
Aidez nous à faire vivre cette communauté épique qui vis sur ce jeu !!!
Spoiler:
 
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang *****
avatar

Messages : 2613
Localisation : Sur le forum du CBNA...ou pas
Projet Actuel : La Galaxie Scellée

MessageSujet: Re: Parlez de ce que vous voulez (Partie 731)   Dim 8 Oct 2017 - 18:57

Bon retour ! Smile

Moi, je tourne encore sur GameMaker (même GM7.0, mais je pense bientôt migrer vers... Studio 1, toujours un train de retard), après je pense que pas mal ont déserté GM depuis le temps.

L'activité du forum est pas folle folle ces derniers mois/années par contre :p

_________________
Cliquez pour accéder aux topics dédiés !
   
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1328
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: Parlez de ce que vous voulez (Partie 731)   Dim 8 Oct 2017 - 20:55

Moi, je n'utilise plus Game Maker, depuis que j'utilise Linux je pense (il y a 9-10 ans).
A voir https://www.yoyogames.com/gamemaker/features, j'ai l'impression que ça s'est beaucoup amélioré.

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8915
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Parlez de ce que vous voulez (Partie 731)   Dim 8 Oct 2017 - 22:06

Ouai y a pas mal de fonctionnalités supplémentaires. Mais le soucis est que la base est toujours aussi sale, pourtant on a déjà perdu beaucoup de retro compatibilité ils auraient pu bien modifier le GML. Au moins ça s'est bien amélioré niveau perfs.

Par contre un truc vraiment regrettable c'est les prix et toutes les saloperies commerciales autour, avant y avait une grosse userbase d'exemples cool, maintenant faut payer sur le store. Sans compter le prix de chaque extension, et le plus drôle, les licences dev pour export du de la vita ou autre console (genre 1000 balles par ans je crois ou un truc du genre, mais c'est même pas une licence définitive...).

Ce serait bien de voir un clone open source bien fait pointer le bout de son nez un jour. La base de GM est cool mais leur délire a essayer de transformer ça en un truc pro est vraiment dégueulasse.


PS: Si y a des pros de machines virtuelles qui passent je m'amusais justement a essayer de cloner la leur pour lire du bytecode GMS, mais je suis bloqué sur certains trucs.
Genre leur système de function call:


Tous les arguments passés sont convertis en "variables", sauf qu'y a aucune information sur la variable.
Alors que les variables "normales" sont identifiées par un id (qui permet même de récupérer leur nom) et l'instance a laquelle elle appartient.

Enfin y a plein de trucs bizarres que j'ai pas trop compris. Si y en a qui sont intéressés je ferais un topic :p

Et aussi ce lien pour ceux qui veulent aller un peu plus loin: https://github.com/donkeybonks/acolyte/wiki/Bytecode

_________________
                 
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1328
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: Parlez de ce que vous voulez (Partie 731)   Lun 9 Oct 2017 - 20:43

Une variable, ça doit désigner un type qui peut être l'un des types de base (int, float, ...)
J'ai l'impression que tu convertis tout tes types de bases en variable avant d'appeler la fonction. Sans doute que les fonctions font la conversion inverse (variable -> int) à l'intérieur.

ça à l'air de servir à rien, mais j'imagine qu'il doit y avoir un mode debug où l'information de type est stocké sur la pile et qu'il peuvent ainsi faire des vérification lors d'une conversion (conv.v.i).

Pour résumé ce que je pense, conv.i.v fait:
1) en mode debug, vérifie que le type du dernier élément empilé est "entier", puis le change en "variable".
2) en mode release, ne fait rien.

Que donne l'ASM du pseudo-code:
```
fonction(var i) {
return i + 1
}

```

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8915
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Parlez de ce que vous voulez (Partie 731)   Lun 9 Oct 2017 - 21:34

Y a pas de différence entre le mode debug et release sous GMS.

S'ils font ça, je pense que c'est avant tout pour une simplification des fonctions car elles ne sont pas typées et leurs paramètres non plus.
Du coup tu peux réutiliser une fonction pour tous les types sans avoir a "dupliquer" la fonction a la compilation (et en effet quand tu regardes le bytecode d'un jeu compilé, t'auras que le bytecode original de chaque fonction).

Ex: addition
Code:
return argument0 + argument1
Qui marche pour des entiers, des float et même des string, avec exactement le même bytecode.

Hors une variable est une structure a part entière qui contiens (normalement), une "tagged enumeration", qui permet a la fois d'obtenir le type et la valeur sans consommer plus de mémoire que ça.
La ou je galère un peu a comprendre c'est comment depuis la fonction, on récupère ces valeurs, étant donné qu'un a aucune information dessus.

Je sais que dans une VM standard, on a une pile pour les variables locales, couplée a une stack frame, qui permet de gérer les scopes (donc "duppliquer" ces variables pour chaque scope, donc ici une fonction, et dépiler la frame quand on en sort, l'empiler quand on entre). Ainsi chaque locale est "adressée" par sa position relative a la frame courante.

Sauf que dans GMS, déjà j'ai pas trouvé de concept similaire (alors que je sais qu'ils ont une stack frame, car une erreur de stack frame peut survenir si on modifie le bytecode un peu au pif), et en plus les variables sont a la fois adressées par l'instance qui la contiens, et leur id (toute variable appartiens a une instance, même quand on call un script depuis le creation code d'une room).

Autre chose super bizarre dans GMS, tellement bizarre que je croyais que c'était une sorte d'obfuscation, c'est que les variables ne sont pas directement "stockées" dans le bytecode sous forme du couple {instance, id}, mais sous forme {instance, next_occurrence_offset}.
Donc en gros, on a une espèce de liste chainée, qui quand on la parcours, nous mène tout a la fin a l'id de la variable.
Mais ça je comprend absolument pas l’intérêt, et une chose encore plus étonnante, c'est qu'on le retrouve dans le bytecode affiché par le debugger, donc en principe, la VM exécute le bytecode tel quel sans le preprocess (alors que moi je remplace justement ce next_occurrence_offset par le bon id de la variable).

Bref, ça fait pas mal de mystères pour quelque chose sensé être simple a la base :p
(je me suis amusé a faire une VM fortement typée ce w-e, j'ai absolument pas eu a faire des choses bizarres comme eux, du coup je comprend doublement pas).


Je crois que la dernière solution viable qu'il me reste c'est de regarder directement dans la mémoire de GMS, déjà le bytecode qui va être exécute au runtime pour voir s'il est le même que celui affiché par le debugger (donc voir si y a toujours ces étranges next_occurrence_offset), puis de chercher cette fameuse stackframe et pile de variables locales.
Mais bon, ça commence a devenir compliqué la.

_________________
                 
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1328
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: Parlez de ce que vous voulez (Partie 731)   Lun 9 Oct 2017 - 21:49

Je tente de te répondre un peu au pif, mais tu connais plus que moi ce don't tu parles. Je pourrais pas t'aider, mais je suis intéressé de connaitre le fin mot de l'histoire.

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8915
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Parlez de ce que vous voulez (Partie 731)   Lun 9 Oct 2017 - 21:59

Ahah, si je trouve un truc intéressant je posterais.

En tout cas leur VM est vraiment sympa pour s'amuser, et surtout y a une très grosse userbase de jeux compilés qui n'attendent que d'être analysés awesome
Je vais pouvoir tester plein de choses avec tout ça, ça me sera utile pour la suite (je compte me faire un petit langage fortement typé avec compilation bytecode, optimisation, reverse du bytecode, bref faire un petit terrain de jeu pour ceux qui aiment la théorie de la compilation).


_________________
                 
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Parlez de ce que vous voulez (Partie 731)   

Revenir en haut Aller en bas
 
Parlez de ce que vous voulez (Partie 731)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 23 sur 23Aller à la page : Précédent  1 ... 13 ... 21, 22, 23
 Sujets similaires
-
» Vous voulez lire une petite (longue) histoire de ma vie?
» La maîtresse demande a chacun de ses élèves : " Que vous voulez faire plus tard ?... Et si ça marche pas .... ?"
» Vous voulez écouter ce qui se dit à l 'Assemblée nationale?
» Vous voulez créer un site mais vous n'y connaissez rien?
» samedi 29 octobre

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Débats et partage :: Zut-
Sauter vers: