RX0012

Domínio: Motor

Mensagem de erro

builtins.feml declara mais builtins do que um conjunto de contratos consegue comportar (limite %s, atingido no builtin %s)

Na mensagem, %s marca um valor que o motor preenche quando levanta o erro.

A história

O motor se recusou a nascer porque há builtins demais para o conjunto de contratos. Vamos entender a conta. A lei de execução é um conjunto de contratos do tungsten: cada builtin declarado vira um contrato, e todos eles são resumidos numa única interface. Esse conjunto tem um tamanho máximo. E cada builtin entra duas vezes, uma com o contrato dele e outra com o contrato de efeito. Então o teto de builtins é a metade do tamanho do conjunto, e o motor calcula isso pela mesma aritmética, para o limite declarado e o limite real nunca se afastarem. Desta vez, o builtins.feml passou do teto, e a mensagem diz qual é o limite e em qual builtin ele estourou. Por que não cortar o excesso em silêncio? Porque aí o motor responderia que um builtin não existe, justo um que a declaração diz que existe. Seria como uma lista de convidados que apaga os últimos nomes sem avisar: a pessoa chega e a porta não abre. A saída é aumentar o W_MAX_CONTRACTS do tungsten ou dividir a declaração em mais de um conjunto de contratos. Depois, reconstrua.

Texto do catálogo de erros do motor do Rush.