Por que as variantes modernas do TeX não suportam aritmética de ponto flutuante?

Por que as variantes modernas do TeX não suportam aritmética de ponto flutuante?

Entendo que, na época em que o TeX foi criado, não havia um padrão único para cálculos de ponto flutuante disponível. Mas hoje em dia existe o IEEE 754. Por que nenhuma variante do TeX o suporta?

É verdade que existe o LuaTeX, mas o IEEE 754 já era popular muito antes disso, então a pergunta é justificada.

Responder1

Responder a esta questão é difícil, uma vez que os registos para “Porque não” são geralmente menos fáceis de obter do que para “Porquê”. No entanto, podemos reconstruir uma cadeia razoável de eventos.

Knuth escreveu o TeX para resolver um problema específico: composição tipográficaA arte da programação de computadores. Embora ele tenha tornado o TeX Turing completo, seu modelo para a criação de documentos é muito parecido com o da composição tipográfica: olhar para a fonte em busca deO TeXbookpor exemplo, é claro que existe uma abordagem para “resolver” a informação. Os casos de uso de Knuth também não são em grande parte aqueles que poderiam usar coisas como uma FPU. Não é surpreendente, portanto, que ele não tenha estendido o TeX nesta área.

(Este é um ponto tão bom quanto qualquer outro para mencionar a retrocompatibilidade. Adicionar novos primitivos sempre tem o potencial de quebrar alguma coisa, como algum usuário sem dúvida terá definido a \fpexprsi mesmo. No entanto, o maior risco em um produto estável em arquivos como o TeX90 é que qualquer mudança pode trazer novos bugs em outros lugares: 'se não está quebrado, não conserte' é uma ideia orientadora.)

Todos os desenvolvedores de motores pós-Knuth tiveram problemas específicos nos quais estavam interessados. Crucialmente, esses tendem a ser problemas que nósnão poderesolver facilmente fora da própria composição tipográfica. O trabalho de ponto flutuante realmente não se enquadra nesse escopo: para qualquer coisa "séria", seria razoável esperar um pré-processamento em uma ferramenta especializada de qualquer maneira.

Se olharmos para os grandes esforços no desenvolvimento de motores, podemos ver que a adição de uma FPU como objetivo específico tem sido improvável. Tomando as ideias em ordem aproximadamente cronológica

  • e-TeX adiciona ideias que são muito gerais no suporte à programação TeX ( \protected, novos intervalos de registro,etc.) que se baseiam em ideias existentes no TeX90. Crucialmente aqui, enquanto \numexpre assim por diante foram adicionados, eles fornecem alguns operadores ( +, -, *, /, (, )), com apenas parênteses não mapeando diretamente para primitivos existentes. Uma FPU tem que cobrir muito mais
  • O e-TeX também adiciona código que é 'próximo' da composição tipográfica, por exemplo, estendendo o controle viúva/órfão para múltiplas linhas, adicionando \middle,etc.: tudo muito distante do suporte FPU necessário
  • O pdfTeX adicionou saída direta em PDF e, embora também inclua vários acréscimos de utilitários, a maioria deles são exposições triviais de ideias de bibliotecas de suporte (por exemplo, tempo decorrido)
  • XeTeX (e projetos anteriores) estende TeX para suportar Unicode: focado no intervalo de caracteres e inclui ideias para lidar com uma variedade de scripts
  • XeTeX também adiciona suporte para fontes do sistema: novamente, nenhum link para o trabalho da FPU
  • LuaTeX faz o que foi dito acima e expõe os aspectos internos do TeX usando Lua: adicionar uma FPU é uma consequência da integração desta última, mas não é o principal impulsionador desses esforços

No geral, portanto, podemos ver que para as pessoas que realmente fazem o trabalho do motor, não houve nenhum lugar óbvio para adicionar uma FPU antes do LuaTeX. Além disso, houve pouco impulso da comunidade de usuários. Pode-se fazer uma série de operações aproximadas em macros, por exemplo, consulte o trigpacote, que permitirá suporte a floats para composição tipográfica geral. Fazer um trabalho mais complexo tende a ser melhor visto como o trabalho de uma ferramenta especializada: compor resultados bonitos é ótimo, mas se você quiser fazer mais análises, provavelmente precisará de uma abordagem interativa. Pacotes como pgfplotsfacilitam o uso do TeX para esse tipo de trabalho (é o meu fluxo de trabalho), mas fora da gama de desafios complexos de composição tipográfica que alguém pode apontar, o suporte a FPU é um nicho bastante específico.

(Acho que também vale a pena notar que implementar uma gama completa de funções FP sem algum suporte de biblioteca não seria trivial: falo por experiência própria l3fp. A atração deste trabalho provavelmente será baixa para especialistas em desenvolvimento de motores: fazê-lo na camada macro é um desafio intelectual interessante!)

Responder2

Tudo se resume a matar a vaca sagrada da compatibilidade com versões anteriores, melhor explicada pelo próprio Donald Knuth no vídeo emA importância da estabilidade para o TeX.

informação relacionada