1

Ce soir j'ai voulu programmer un "petit" moteur de jeu de plate-forme tout bête pour Game Boy, un truc aussi con que genre:
u16 x, y, vx, vy;
extern u8 map[32][32];
void perso_init() {
    x = y = vx = vy = 0;
}
void perso_handle() {
    vy += 10;    // gravité
    x += vx, y += vy;
}
void perso_draw() {
    OAM[0] = y >> 8;
    OAM[1] = x >> 8;
}
void perso_check_col() {
    if (map[y >> 11][x >> 11])    // Collision bidon
        vy = 0;
}

Tout est clair dans ma tête donc, alors je me mets à l'écrire en ASM. Et là c'est le drâme, jugez par vous même (le moteur fait l'équivalent de ce code C):
	; Constantes
	.GRAVITY = 10
	.OAM = 0xfe00

	; Variables
	.area	_BSS
.x:				; position 24-bit fixed point (16.8)
	.ds 3
.y:
	.ds 3
.vx:				; vitesse 16-bit fixed point (8.8)
	.ds 2
.vy:
	.ds 2

	.area	_CODE
	; Initialisation du personnage
_perso_init::
	xor a			; a = 0
	ld hl, #.x
	ld (hl+), a		; x = 0
	ld (hl+), a
	ld (hl+), a
	ld (hl+), a		; y = 0
	ld (hl+), a
	ld (hl+), a
	ld (hl+), a		; vx = 0
	ld (hl+), a
	ld (hl+), a		; vy = 0
	ld (hl+), a
	ret

	; Gestion de la physique du personnage
_perso_handle::
	ld hl, #.vy		; vy += GRAVITY
	ld b, #.GRAVITY
	call add16_val8

	call load16		; push vy
	push bc
	ld hl, #.vx		; bc = vx
	call load16
	pop de			; de = vy
	call _perso_move	; move(vx, vy)
	
	ret

	; Bouge le personnage
	; bc = delta X, de = delta Y (1.7.8 signed fixed point)
_perso_move::
	push de

	ld d, #2		; Pour x et y
	ld hl, #.x

move_boucle:
	bit 7, b		; bc.signe
	jr nz, move_bc_negatif

	ld a, (hl)		; partie basse
	add c
	ld (hl+), a
	ld a, (hl)		; partie moyenne
	adc b
	ld (hl+), a
	ld a, (hl)		; partie haute
	adc #0
	ld (hl+), a
	jr move_suite

move_bc_negatif:
	ld a, b			;
	cpl			; }
	ld b, a			; rend bc positif
	ld a, c			; }
	cpl			;
	ld c, a			;
	
	ld a, (hl)		; partie basse
	sub c
	ld (hl+), a
	ld a, (hl)		; partie moyenne
	sbc b
	ld (hl+), a
	ld a, (hl)		; partie haute
	sbc #0
	ld (hl+), a

move_suite:
	dec d
	ret z			; terminé? (y traité)
	
	pop bc			; de a été poussé avant
	jr move_boucle

	; Retourne l'adresse de la map pour un point donné
	; BC = point voulu (x, y) par rapport au perso
	; shared_asm[0].w = adresse de la map
get_map_addr:
	ld hl, #(.x + 1)		; de = (x, y)
	ld d, (hl)
	ld hl, #(.y + 1)
	ld e, (hl)

	; (x, y) += (b, c)
	ld a, d
	add b
	ld d, a
	push af
	ld a, e
	add c
	ld e, a
	push af

	; (x, y) /= 8
	srl d
	srl d
	srl d
	srl e
	srl e
	srl e
	
	; Retenue pour (x, y) += (b, c) avant
	pop af
	ld a, e
	adc #0
	ld e, a
	pop af
	ld a, d
	adc #0
	ld d, a
	
	; On peut encore ajouter à (d, e) les 3 bits du haut de la position
	ld hl, #(.x + 2)		; d += (x.hi & 7) << 5
	ld a, (hl+)
	and #7
	swap a
	sla a
	add d
	ld d, a
	ld hl, #(.y + 2)		; pareil pour e
	ld a, (hl)
	and #7
	swap a
	sla a
	add e
	ld e, a
	
	; FIXME
	ld hl, #_bglvl01_map
	
	ld a, d				; bc = d % 32
	and #31
	ld c, a
	ld b, #0
	add hl, bc			; colonne correspondante dans la map

	ld b, e				; bc = e * 32 (largeur d'une map)
	srl b				; 3 bits partent sur c
	srl b
	srl b
	ld a, e				; 3 bits du bas -> en haut de c
	and #7
	swap a
	sla a
	ld c, a
	add hl, bc			; ligne correspondante dans la map
	ret

_perso_check_col::
	ld b, #0
	ld c, #0
	call get_map_addr		; check en haut à gauche
	ld a, (hl)
	and a
	ret z				; rien là?
	
	; Collision -> stoppe net
	ld hl, #.vy
	ld a, #0
	ld (hl+), a
	ld (hl+), a
	ret

	; Dessin du personnage dans le sprite 0
_perso_draw::
	ld hl, #.OAM
	ld bc, #(.y + 1)		; y
	ld a, (bc)
	add #16
	ld (hl+), a

	ld bc, #(.x + 1)		; x
	ld a, (bc)
	add #8
	ld (hl), a
	ret

	; Retourne la position du perso
	; HL = tableau de 6 octets
_perso_get_pos::
	; source = .x, dest = hl, count = 6
	push hl
	ld hl, #.x
	pop de
	ld bc, #6
	call memcpy
	ret

Je me dis que soit 1) les programmeurs de l'époque avaient sacrément du skill pour faire des jeux complets 2) je suis une buse totale mais je pense qu'il y a beaucoup des deux happy
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

2

Brunni (./1) :
1) les programmeurs de l'époque avaient sacrément du skill pour faire des jeux complets
Ça, c'est certain hehe

Sinon, penses à utiliser des macros. C'est casse-pieds de devoir réinventer la roue, mais une fois que tu t'es fait une bibliothèque de macros bien complètes (émulation des calculs sur 16/32 bits, memcpy/memset, etc.), le boulot est pas mal simplifié.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3

Des macros ? Pas des fonctions ?

4

Ben non :

- premièrement parce qu'une macro est plus rapide qu'un appel de fonction : sur un CPU lent, tu sens la différence
- deuxièmement, une macro est plus souple qu'une fonction : tu peux par exemple utiliser le nom d'un registre comme argument (pas possible avec une fonction, à moins d'en créer une pour chaque cas, oud'utiliser la pile -> plus lent)

L'inconvénient, c'est bien sûr que ça fait augmente la taille du binaire à cause de la duplication du code.

EDIT : ce qui est rigolo aussi avec les macros, c'est que tu peux pousser l"'intelligence" assez loin : par exemple, tu peux faire une fonction de multiplication par un entier qui génère du code optimal avec des add/sub/shift pour chaque valeur du multiplicateur (dans des limites prédéfinies). Après t'as plus qu'à appeler ta macro avec le registre et le multiplicateur, sans devoir te casser la tête à optimiser à chaque fois : du coup ton code devient plus lisible tout en restant aussi performant qu'avant, et avec des risques d'erreurs en moins cheeky
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

5

Une petite question : dans le cas d'un programmeur expérimenté (comme brunni), il est préférable d'écrire ce qu'on veut faire en C avant de l'écrire en ASM? Le code en C serait une sorte de brouillon?
On April 8, 2014, all Windows XP support, including security updates and security-related hotfixes will be terminated.
Windows 7's product support page now says it will offer extended support until January 14, 2020.

6

./3> Des fonctions y a déjà tongue
./2 & ./4> Oué bien sûr j'aurais bien aimé mais l'assembleur que j'utilise ne supporte pas les macros grin J'ai trouvé un préprocesseur qui fera peut être l'affaire, et au pire j'essaierai d'intégrer celui de ma patrickboy.
./5 Je sais pas, mais c'est clair qu'il vaut mieux avoir une idée claire de ce que tu veux faire avant de commencer à coder wink
Par contre pour ceux qui se demandent ce vomi infâme d'hier soir fonctionne \o/ (tant mieux parce que déboguer ça = poubelle)
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

7

jul2149 (./5) :
Une petite question : dans le cas d'un programmeur expérimenté (comme brunni), il est préférable d'écrire ce qu'on veut faire en C avant de l'écrire en ASM? Le code en C serait une sorte de brouillon?

D'une certaine façon, oui. Parce que déclarer des fonctions en C te permet d'avoir une structuration pseudo-UML, chose qui n'est pas forcément faisable en ASM (pouvoir distribuer différentes fonctions dans différents fichiers suivant leur but). Après tu peux très bien utiliser la structure de base en C et remplir les fonctions avec des 'pragma asm' pour pouvoir tweaker au plus juste ton code.

Pense simplement qu'un code full ASM à tendance à être de moins en moins maintenable, déjà parce que de moins en moins de monde travaille en ASM, et ensuite quand tu veux faire évoluer ton code ASM ça devient rapidement le bordel si tu veux bouger/ajouter du code, attention à l'utilisation des registres utilisés pour les passages de paramètres. Le C est standardisé dans ce domaine, il suffit de faire gaffe à tes retours de valeurs à la fin de ton 'prgma' pour pouvoir modifier la structure de ton code C "container" facilement (appeler une autre fonction ou la remplacer par une autre) sans effet de bord.

Le must évidement reste de coder majoritairement en C, et de laisser le compilo faire le boulot d'optimisation. On est en 2009 et les compilos on très très largement évolués, surtout en embarqué. Grace à leur possibilités de configuration, tu peux, comme en ASM avec la directive ORG, définir toi même ton mapping mémoire en fonction de tes besoins. Lit bien la doc, trouve un exemple open-source de base pour t'en inspirer, tu verras qu'à long terme tu gagneras pas mal de temps !

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

8

Edited_3778

9

..mais l'autre truc c'est qu'aujourd'hui parmi ceux qui sont encore assez fous (ou plus exactement qui ont encore assez de temps disponible) pour coder en C des programmes conséquents (i.e pas un jeu de gameboy), il ne dois plus en rester beaucoup qui s'amusent ensuite à convertir ça en ASM ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

10

Pb de l'ASM, tu te trompes de registre ou taille d'opérande, surtout pas inadvertance, tu passes 2 jours à trouver pourquoi ça marche pas :/ Y'a interet à faire très très attention à ce qu'on fait !

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

11

L'ASM c'est pour les l33t cool
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

12

Zerosquare -> ok ^^
Kochise (./10) :
Pb de l'ASM, tu te trompes de registre ou taille d'opérande, surtout pas inadvertance, tu passes 2 jours à trouver pourquoi ça marche pas :/ Y'a interet à faire très très attention à ce qu'on fait !
Brunni (./11) :
L'ASM c'est pour les l33t

Mais non, faut arrêter. Je dis pas que ça arrive jamais, mais avec l'habitude et des fonctions bien spécifiées, ça se passe très bien. Et quand l'algo est bon, il ne peut plus rester qu'une faute d'étourderie (mauvais registre, problème de pile). Ca se trouve en général très vite. Genre quand j'écris 1ko de code, je vais avoir 3 à 10 bugs cons, et en trois trace de la fonction, ça va sauter aux yeux.

L'assembleur n'est qu'un langage comme un autre, sans aucune abstraction, on n'y fait que des additions et des déplacement. Faut pas s'en faire une montagne.

13

De toutes façons, le débogueur est ton ami. Si tu connais ton code tu trouveras ton erreur. Si l'erreur vient pas de toi t'es dans la merde. Et là tout est dit.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

14

Pour ce qui est du C sur Gameboy, faut oublier tout de suite je pense grin
(contrairement à ce que beaucoup prétendent, les compilateurs C sont loin d'optimiser mieux qu'un être humain, même en 2009 et surtout ce genre de plateformes)

Et comme le dit GoldenCrystal, un avantage secondaire de l'ASM c'est qu'il est extrêmement rare qu'un bug provienne de la chaîne d'outils, et qu'on ne peut pas faire mieux au niveau finesse de débug.

Brunni : si ton assembleur ne supporte pas les macros, changes-en (d'assembleur). C'est pas parce qu'on code en ASM qu'on n'a pas le droit d'utiliser des features un tant soit peu évoluées ^^
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

15

Zerosquare (./14) :
contrairement à ce que beaucoup prétendent, les compilateurs C sont loin d'optimiser mieux qu'un être humain, même en 2009 et surtout ce genre de plateformes

Content de te l'entendre dire, _pour les plateformes simples_ (pas de mmu, pas ou peu de prefetch, pas de cache proc etc... je pense bien sûr au 68k)

Cela reste-t-il vrai pour les processeur parallélisés de maintenant ? Avec un cache qui se compte en centaines de mégas ? Avec des pipelines aussi gros que la RAM d'une 89 ?
J'en doute un peu, non ? J'ai lu un bouquin d'assembleur pour x86 récent, certaines instructions hallucinantes, bonjour pour le maitriser grin

16

Faudrait tester. Je m'étais amusé à ça il y a quelques années, à l'époque où je codais la partie traitement vidéo du robot de notre école d'ingés pour le concours de robotique E=M6. De mémoire, mon code ASM était entre 1.5 et 2 fois plus rapide que la version C compilée par GCC en activant toutes les optimisations de vitesse. J'imagine que ça a dû évoluer depuis, mais je ne serais pas surpris que sur des routines critiques, tu arrives encore à faire mieux en codant en ASM à la main smile

(par contre, un inconvénient, c'est que la version optimale sur un processeur n'est pas forcément optimale sur un autre ; j'avais écrit plusieurs variantes de mes routines pour tester différentes approches, et la plus rapide sur un proco AMD n'était pas la même que la plus rapide sur un Intel)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

17

(gcc n'est pas du tout fait pour l'embarqué.)

Au boulot dans des cartes on a des 8 bits ST (3.57 MHz, 1-2k de RAM) , et on préfère coder dessus en asm inline parce que des fois le compilo, fourni par ST eux mêmes, merdoie assez puissamment, quand c'est pas le préprocesseur qui fait des siennes.

bon c'est pas tout fait en asm mais pour de gros morceaux critiques, on préfère ne pas faire confiance au compilo, genre quand mon collègue code au cycle près avec la spec cpu sur l'écran secondaire love

18

squalyl (./17) :
fourni par ST (...) merdoie assez puissamment
Pléonasme tongue
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

19

20

./14 En fait j'utilise le seul qui me permet d'interfacer avec le C. Le compilo C est super primitif et génère du code un peu équivalent au -O0 (donc pas jojo) mais il permet de simplifier *énormément* le code. Par contre il est pas mal bugué: dès que tu fais des trucs un *poil* fonky le code généré part complètement en live, du coup je le réserve pour les parties générales et j'implémente des fonctions de haut niveau en ASM.
Mais finalement j'ai installé le préprocesseur que j'ai trouvé, il est très primitif mais c'est mieux que rien effectivement top
squalyl (./17) :
(gcc n'est pas du tout fait pour l'embarqué.)

J'avais pourtant l'impression qu'il générait du bon code en général GCC confus
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

21

Kochise (./7) :
chose qui n'est pas forcément faisable en ASM (pouvoir distribuer différentes fonctions dans différents fichiers suivant leur but)

Euh si, de l'assembleur peut se compiler séparément et se linker comme du C. Mais bien sûr il existe toujours des assembleurs pourris ou obsolètes qui essaient de produire un exécutable directement sans linker. sick Il existe aussi des chaînes d'outils pourries ou obsolètes qui utilisent un simple convertisseur (un "linker" qui n'accepte qu'un seul fichier objet) pour créer des exécutables à partir des fichiers objets sortis par l'assembleur. sick (Les gens qui codent ce genre d'horreurs devraient se demander pourquoi ce que sort un assembleur est un fichier objet et pas un exécutable fini. roll)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

22

Kevin Kofler (./21) :

Euh si, de l'assembleur peut se compiler séparément et se linker comme du C. Mais bien sûr il existe toujours des assembleurs pourris ou obsolètes(c) & tm qui essaient de produire un exécutable directement sans linker. sick.gif Il existe aussi des chaînes d'outils pourries ou obsolètes(c) & tm qui utilisent un simple convertisseur (un "linker" qui n'accepte qu'un seul fichier objet) pour créer des exécutables à partir des fichiers objets sortis par l'assembleur. sick.gif (Les gens qui codent ce genre d'horreurs devraient se demander pourquoi ce que sort un assembleur est un fichier objet et pas un exécutable fini. roll.gif )


Corrections.

23

Kochise (./10) :
Pb de l'ASM, tu te trompes de registre ou taille d'opérande

… ou encore d'offset pour nettoyer la pile…
, surtout pas inadvertance, tu passes 2 jours à trouver pourquoi ça marche pas :/ Y'a interet à faire très très attention à ce qu'on fait !

Effectivement, ce genre d'erreurs ne peuvent pas se produire en C ou un autre langage de moyen ou haut niveau parce que c'est le compilateur qui s'occupe de ces détails automatiquement.
Folco (./12) :
Mais non, faut arrêter. Je dis pas que ça arrive jamais, mais avec l'habitude et des fonctions bien spécifiées, ça se passe très bien. Et quand l'algo est bon, il ne peut plus rester qu'une faute d'étourderie (mauvais registre, problème de pile). Ca se trouve en général très vite. Genre quand j'écris 1ko de code, je vais avoir 3 à 10 bugs cons, et en trois trace de la fonction, ça va sauter aux yeux.

N'importe quoi. J'ai déjà eu des erreurs de taille d'opérande qui n'ont pas été détectés pendant des mois voire des années! En général, c'est du code qui marche sous certaines conditions (par exemple si les octets testés en trop sont nuls dans un contexte où ils le sont dans 99% des cas, ou alors c'est du code censé détecter une erreur et personne n'a testé en commettant cette erreur), mais est totalement faux. Et comme déjà dit, c'est une classe d'erreurs qui n'existe pas dans un langage même un minimum type-safe (comme le C).
Brunni (./20) :
J'avais pourtant l'impression qu'il générait du bon code en général GCC confus

Il faut déjà qu'il gère ton CPU, ce qui n'est pas le cas ici…
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

24

PpHd (./22) :
Corrections.

Au lieu de te moquer du fait que j'utilise souvent le mot "obsolète", tu ferais mieux d'arrêter de livrer PreOs avec un outil "MakePrgm" qui date de l'époque de PlusShell et qui est toujours aussi inutile et pourri même après tes "mises à jour". Un linker qui ne linke pas sux.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

25

Kevin Kofler (./23) :
J'ai déjà eu des erreurs de taille d'opérande qui n'ont pas été détectés pendant des mois voire des années!
J'ai déjà vu aussi des erreurs en C passées inaperçues pendant des années, parce que l'implémentation du compilo faisait que ça marchait par coup de pot...
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

26

C'est vrai ! J'ai vu ça... Je suis bien d'accord pour la qualité de l'ASM (vitesse et tweaking) mais comme le dit bien ZeroSquare, une version optimisée AMD ne vaut pas la version Intel. Et encore là on se situe sur une seule et même architechture compatible (x86). Imaginez qu'il vous faille convertir ce code 8 bits sur un autre processeur, plus puissant ou simplement 16 bits, il faut tout reprendre à 0. Je n'ai jamais dit que les compilos c'était la panacée, juste qu'ils rendet un sérieux coup de main. Un code C adapté à une plateforme 8 bits ne demandera que peu de modification pour l'adapter au nouveau processeur 16 bits, il suffira d'écrire la couche HAL adéquate, tout en gardant les algorithmes en C. On pourrait faire de même avec les macros, sauf que l'ASM entre les macro n'est pas adapté à la nouvelle plateforme. Le C oui, grâce au compilateur. C'est un peu l'inconvénient du C, mais sa grande force aussi, ce qui lui a permis de passer en tête des lanages de programmation, dumoins devant l'ASM.

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

27

squalyl (./17) :
quand mon collègue code au cycle près avec la spec cpu sur l'écran secondaire love.gif

Rah pu****** yayayayaya c'est excitant ça trilove
Kevin Kofler (./23) :
N'importe quoi. J'ai déjà eu des erreurs de taille d'opérande qui n'ont pas été détectés pendant des mois voire des années!

Tu peux avoir des erreurs d'algorithmie plus difficiles à détecter que des fautes d'inatention.

Tu auras aussi plus de chances d'avoir des problèmes si tu codes un hack ou une feature bizaroïde pour un OS (genre autoclosebracket, t'as ni les sources ni toutes les specs de l'OS)

Mais je crois que la grosse différence entre nous vient du test des programmes. Laisser ce soin aux utilisateurs apporte souvent des surprises.

28

Euh, mes TSRs, je les ai testés très attentivement avant chaque release. La classe d'erreurs que j'ai citée, c'est-á-dire "code qui marche sous certaines conditions (par exemple si les octets testés en trop sont nuls dans un contexte où ils le sont dans 99% des cas, ou alors c'est du code censé détecter une erreur et personne n'a testé en commettant cette erreur)", bah justement tu ne les trouveras pas en testant. Tester ne permet pas de détecter toutes les erreurs. Tous les bogues ne sont pas reproduisibles à tous les coups, et même quand ils le sont, il faut déjà avoir rencontré la manière de les reproduire.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

29

Oui bon t'as aussi les tests unitaires hein, c'est automatisé tout ça, et ça permet de passer des scénarios aléatoires qui reproduisent assez fidèlement le comportement d'un utilisateur lambda qui clique partout, donc potentiellement buguogène...

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

30

Kevin -> je prenais tes TSR comme des exemples de code potentiellement fragiles à cause d'un OS que tu ne maitrises pas (au niveau de ton tsr hein grin)