./50: j'ai compris de quoi tu parlais

pour la comparaison, si tu parles de =, <, etc.. ça n'est pas très compliqué, et effectivement c'est "dynamique" mais d'une façon pariculière,il ne vérifie pas le "type" dynamiquement:
il regarde si c'est un pointeur, si oui, il regarde la liste de données pointées et applique un < sur chaque champ, si ce n'est pas un pointeur, il regarde la zone mémoire (la taille est stockée) et compare le contenu à la bourrin (avec une particularité sioux pour les floats et ne pas prendre les NaN pour autre chose genre un pointeur, c'est assez space):
l'opé == est une comparaison directe de pointeurs.
genre (on pourrait trouver un bien plus sioux en générant une zone contenant la chaine "hello" avec des Obj.magic mais bon flemme

):
# type t = { i : int ; s : string } ;;
type t = { i : int; s : string; }
# type t2 = { c : char ; s2 : string } ;;
type t2 = { c : char; s2 : string; }
# { i = 97 ; s = "hello" } = (Obj.magic {c = 'a' ; s2 = "hello" });;
- : bool = true
oh et le Obj.magic, j'utilise pas trop ça pour ce genre de merdes, plutot pour faire du downcasting comme en java:
Object o = new String("plop");
String s = (String) o;
(interdit par le typeur car non vérifiable statiquement, bien sur)
bon j'arrete là le monologue