¿Por qué las variantes modernas de TeX no admiten la aritmética de punto flotante?

¿Por qué las variantes modernas de TeX no admiten la aritmética de punto flotante?

Entiendo que, en el momento en que se ideó TeX, no estaba disponible ningún estándar único para los cálculos de punto flotante. Pero hoy en día existe IEEE 754. ¿Por qué ninguna variante de TeX lo admite?

Por supuesto, existe LuaTeX, pero IEEE 754 era popular mucho antes, por lo que la pregunta está justificada.

Respuesta1

Responder a esta pregunta es difícil, ya que los registros de "Por qué no" suelen ser más difíciles de conseguir que los de "Por qué". Sin embargo, podemos reconstruir una cadena razonable de acontecimientos.

Knuth escribió TeX para resolver un problema específico: la composición tipográficaEl arte de la programación informática. Si bien hizo TeX Turing completo, su modelo para crear documentos es en gran medida que la entrada TeX se acerca a la composición tipográfica: mirar la fuente paraEl libro de textopor ejemplo, está claro que existe un enfoque en el que la información está "resuelta". Los casos de uso de Knuth tampoco son en gran medida aquellos que podrían usar cosas como una FPU. No sorprende, por tanto, que no haya ampliado TeX en este ámbito.

(Este es un punto tan bueno como cualquier otro para mencionar la compatibilidad con versiones anteriores. Agregar nuevas primitivas siempre tiene el potencial de romper algo, como sin duda algún usuario habrá definido por \fpexprsí mismo. Sin embargo, el mayor riesgo en un producto estable en archivos como TeX90 es que cualquier cambio podría generar nuevos errores en otros lugares: "si no está roto, no lo arregles" es una idea guía).

Todos los desarrolladores de motores posteriores a Knuth han tenido problemas particulares que les han interesado. Fundamentalmente, estos tienden a ser problemas queno poderresolver fácilmente fuera de la propia composición tipográfica. El trabajo de punto flotante realmente no entra dentro de ese alcance: para cualquier cosa "seria", uno podría esperar razonablemente realizar un preprocesamiento en una herramienta especializada de todos modos.

Si observamos los principales esfuerzos en el desarrollo de motores, podemos ver que agregar una FPU como objetivo específico ha sido poco probable. Tomando las ideas en orden aproximadamente cronológico.

  • e-TeX agrega ideas que son muy generales para respaldar la programación TeX ( \protected, nuevos rangos de registros,etc.) que se basan en ideas existentes en TeX90. Lo más importante aquí es que \numexprse agregaron while y demás, que proporcionan algunos operadores ( +, -, *, /, (, )), con solo paréntesis que no se asignan directamente a las primitivas existentes. Una FPU tiene que cubrir mucho más
  • e-TeX también agrega código que está "cercano" a la composición tipográfica, por ejemplo extendiendo el control de viudas/huérfanos a múltiples líneas, agregando \middle,etc.: todo muy alejado del soporte FPU necesario
  • pdfTeX agregó salida PDF directa y, aunque también incluye varias adiciones de utilidad, la mayoría de ellas son exposiciones triviales de ideas de bibliotecas de soporte (por ejemplo, tiempo transcurrido).
  • XeTeX (y proyectos anteriores) amplía TeX para admitir Unicode: se centra en el rango de caracteres e incluye ideas para manejar una variedad de scripts.
  • XeTeX también agrega soporte para fuentes del sistema: nuevamente, no hay enlace al trabajo de FPU
  • LuaTeX hace lo anterior y expone las partes internas de TeX usando Lua: agregar una FPU es una consecuencia de la integración de este último, pero no es un impulsor importante de estos esfuerzos.

Por lo tanto, en general, podemos ver que para las personas que realmente hacen el trabajo del motor no había un lugar obvio para agregar una FPU antes de LuaTeX. Además, ha habido poco impulso por parte de la comunidad de usuarios. Se pueden realizar una serie de operaciones aproximadas en macros, por ejemplo, ver el trigpaquete, que permitirá la compatibilidad con flotantes para la composición tipográfica general. Hacer un trabajo más complejo tiende a verse mejor como el trabajo de una herramienta especializada: componer resultados atractivos es excelente, pero si desea hacer más análisis probablemente necesite un enfoque interactivo. Paquetes como pgfplotseste hacen que sea más fácil usar TeX para este tipo de trabajo (es mi flujo de trabajo), pero fuera del rango de desafíos de composición tipográfica complejos que uno podría señalar, el soporte FPU es bastante específico.

(Creo que también vale la pena señalar que implementar una gama completa de funciones de FP sin algún soporte de biblioteca no sería trivial: hablo por experiencia en el l3fptrabajo. Es probable que el atractivo de este trabajo sea bajo para los expertos en desarrollo de motores: hacerlo en la capa macro es un desafío intelectual interesante!)

Respuesta2

Todo se reduce a matar a la vaca sagrada de la compatibilidad con versiones anteriores, lo que el propio Donald Knuth explica mejor en el vídeo deLa importancia de la estabilidad para TeX.

información relacionada