The modular syntax is almost the same. The main semantic difference is that tuples are structural types, and records are nominal. This implies, for example, that records can be recursive, while tuples cannot (at least without the -rectypes option):
type t = {a : int, b : unit -> t} (* fine *) type u = int * (unit -> u) (* error *)
In addition, records can have mutable fields, tuples cannot.
FWIW, in the SML OCaml language, tuples are records. That is, in SML (a, b, c) only syntactic sugar is used for {1 = a, 2 = b, 3 = c}, and records are also structural types.
source share