
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 \fpexpr
si 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\numexpr
e 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 trig
pacote, 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 pgfplots
facilitam 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.