최신 TeX 변형이 부동 소수점 연산을 지원하지 않는 이유는 무엇입니까?

최신 TeX 변형이 부동 소수점 연산을 지원하지 않는 이유는 무엇입니까?

나는 TeX이 고안되었을 당시 부동 소수점 계산을 위한 단일 표준이 없었다는 것을 알고 있습니다. 하지만 요즘에는 IEEE 754가 있습니다. 왜 TeX 변형은 이를 지원하지 않습니까?

물론 LuaTeX가 있지만 IEEE 754는 그보다 오래 전에 인기가 있었기 때문에 질문은 타당합니다.

답변1

'Why no'에 대한 기록은 일반적으로 'Why'에 대한 기록보다 구하기가 덜 쉽기 때문에 그러한 질문에 대답하는 것은 어렵습니다. 그러나 우리는 합리적인 일련의 사건을 재구성할 수 있습니다.

Knuth는 특정 문제를 해결하기 위해 TeX를 작성했습니다: 조판컴퓨터 프로그래밍의 예술. 그가 TeX Turing-complete를 만들었지만 문서 작성을 위한 그의 모델은 TeX 입력이 조판에 가깝다는 것입니다.TeXbook예를 들어, 정보가 '해결'되는 접근 방식이 있다는 것이 분명합니다. Knuth의 사용 사례는 FPU와 같은 것을 사용하는 사례도 아닙니다. 그러므로 그가 이 분야에서 TeX를 확장하지 않은 것은 놀라운 일이 아닙니다.

(이것은 이전 버전과의 호환성을 언급하는 것만큼 좋은 점입니다. 일부 사용자가 스스로 정의한 것처럼 새로운 기본 요소를 추가하면 항상 무언가가 손상될 가능성이 있습니다 \fpexpr. 그러나 TeX90과 같은 아카이브 안정성 제품에서 더 큰 위험은 다음과 같습니다. 어떤 변경이라도 다른 곳에서 새로운 버그를 가져올 수 있습니다. '고장나지 않았다면 고치지 마세요'가 지침이 됩니다.)

Knuth 이후의 엔진 개발자들은 모두 관심을 갖고 있는 특정 문제를 가지고 있었습니다. 결정적으로 이러한 문제는 우리가캔트조판 자체 외부에서 쉽게 해결할 수 있습니다. 부동 소수점 작업은 실제로 해당 범위에 속하지 않습니다. '심각한' 작업의 경우 어쨌든 전문 도구에서 사전 처리할 것으로 합리적으로 기대할 수 있습니다.

엔진 개발의 주요 노력을 살펴보면 특정 목표로 FPU를 추가하는 것이 불가능하다는 것을 알 수 있습니다. 아이디어를 대략적으로 연대순으로 정리하기

  • e-TeX는 TeX 프로그래밍 지원에 있어 매우 일반적인 아이디어를 추가합니다( \protected, 새로운 레지스터 범위,등.) TeX90의 기존 아이디어를 기반으로 구축되었습니다. 결정적으로 여기에 등이 추가되었지만 기존 프리미티브에 직접 매핑되지 않는 괄호만 포함된 \numexpr몇 가지 연산자( +, -, *, /, (, )를 제공합니다. )FPU는 더 많은 것을 포괄해야 합니다.
  • e-TeX는 또한 조판에 '가까운' 코드를 추가합니다. 예를 들어 과부/고아 제어를 여러 줄로 확장하고 \middle,등.: 모두 필요한 FPU 지원에서 매우 멀리 떨어져 있습니다.
  • pdfTeX는 직접 PDF 출력을 추가했으며 다양한 유틸리티 추가도 포함하고 있지만 대부분은 지원 라이브러리의 사소한 아이디어 노출입니다(예: 경과 시간).
  • XeTeX(및 이전 프로젝트)는 TeX를 확장하여 유니코드를 지원합니다. 문자 범위에 중점을 두고 다양한 스크립트를 처리하기 위한 아이디어가 포함되어 있습니다.
  • XeTeX는 또한 시스템 글꼴에 대한 지원을 추가합니다. 다시 말하지만 FPU 작업에 대한 링크는 없습니다.
  • LuaTeX는 위의 작업을 수행하고 Lua를 사용하여 TeX의 내부를 노출합니다. FPU를 추가하는 것은 후자를 통합한 결과이지만 이러한 노력의 주요 동인은 아닙니다.

따라서 전반적으로 실제로 엔진 작업을 수행하는 사람들에게는 LuaTeX 이전에 FPU를 추가할 확실한 장소가 없었다는 것을 알 수 있습니다. 더욱이 사용자 커뮤니티의 압박도 거의 없었습니다. 매크로에서 다양한 대략적인 작업을 수행할 수 있습니다. 예를 들어 trig일반 조판을 위한 부동 소수점 지원을 활성화하는 패키지를 참조하세요. 보다 복잡한 작업을 수행하는 것은 전문 도구의 작업으로 가장 잘 간주되는 경향이 있습니다. 보기 좋은 결과를 조판하는 것은 좋지만 더 많은 분석을 수행하려면 대화형 접근 방식이 필요할 수 있습니다. do 와 같은 패키지를 사용 pgfplots하면 이러한 유형의 작업에 TeX를 더 쉽게 사용할 수 있지만(내 작업 흐름), 지적할 수 있는 복잡한 조판 문제 범위를 제외하면 FPU 지원은 꽤 틈새 시장입니다.

(일부 라이브러리 지원 없이 전체 범위의 FP 기능을 구현하는 것은 사소한 일이 아니라는 점도 주목할 가치가 있다고 생각합니다. 저는 l3fp업무 경험을 바탕으로 말합니다. 엔진 개발 전문가에게는 이 작업의 매력이 낮을 가능성이 높습니다. 매크로 계층에서는 흥미로운 지적 도전입니다!)

답변2

이는 이전 버전과의 호환성이라는 신성한 암소를 죽이는 것으로 귀결되며, Donald Knuth 자신이 비디오에서 가장 잘 설명했습니다.TeX의 안정성의 중요성.

관련 정보