La lógica booleana se supone que es simple. Verdadero o falso. Pero cuando None entra en la ecuación, la lógica booleana desarrolla un tercer estado que puede producir resultados que parecen correctos en la superficie siendo fundamentalmente incorrectos por debajo.
El checkbox de alternancia de la aplicación de tareas tenía un defecto persistente: podía marcar una tarea como "hecha" pero nunca desmarcarla. !None se evalúa como true (porque None es falsy), así que cada alternancia producía true.
La causa raíz: el generador de código solo emitía bytecode para campos proporcionados explícitamente. Los campos faltantes con valores predeterminados se omitían silenciosamente. La corrección modificó emit_entity_construct() para aplicar valores predeterminados para cualquier campo de entidad no proporcionado explícitamente.
El principio: en un lenguaje con semántica de None, los valores predeterminados explícitos no son opcionales -- son estructurales. Un campo done que predetermina a false no es una sugerencia -- es un requisito.
Esta es la Parte 168 de la serie "Cómo construimos FLIN", que documenta cómo un CEO en Abidjan y un CTO de IA diseñaron y construyeron un lenguaje de programación desde cero.
Navegación de la serie: - [167] Errores de ordenamiento de entidades y formato de tiempo - [168] Corrección de valores predeterminados de entidades y alternador (estás aquí) - [169] La crisis de elección del modelo de embeddings