Killian Brendel estaba leyendo el código fuente de referencia de .NET cuando se topó con el bloque de comentarios del struct TimeSpan. Todo empieza de forma sensata: un TimeSpan es una duración, puede ser negativa o positiva, y se representa internamente como un número de milisegundos. El comentario explica después por qué el struct no ofrece métodos Years() ni Months(): los meses varían entre 28 y 31 días y no se traducen limpiamente a milisegundos.
Entonces el texto descarrila. Un año, afirma el comentario, puede contener 365 o 364 días, y una década puede tener entre 1 y 3 años bisiestos según cómo se proyecte sobre el calendario. Un año de 364 días implicaría un día bisiesto negativo, un concepto bastante más inquietante que la ya temida segunda intercalar negativa.
En la práctica no es más que una errata por 366, sin ningún efecto sobre el comportamiento de la clase. Probablemente por eso lleva ahí sin que nadie lo toque desde el commit inicial, hace doce años. La propia clase TimeSpan apenas ha cambiado en ese tiempo, ya que es básicamente un envoltorio alrededor de un conteo de milisegundos, mientras que la aritmética de fechas más compleja, como AddMonths y AddYears, reside en los tipos de fecha y hora construidos sobre ella.
El archivo merece además una exploración más a fondo: contiene constructores por defecto obsoletos y hooks de compilación para variantes antiguas de .NET, incluida Silverlight, una tecnología sin actualizaciones desde 2019, sin soporte en los principales navegadores desde 2015 y oficialmente fuera de soporte en 2021. Quizá no sea un verdadero WTF, pero sí un agradable recordatorio de que incluso el código de referencia de Microsoft acumula telarañas.
Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
Esperando tu clic …
·