Почему современные варианты TeX не поддерживают арифметику с плавающей точкой?

Почему современные варианты TeX не поддерживают арифметику с плавающей точкой?

Я понимаю, что на момент разработки TeX не было единого стандарта для вычислений с плавающей точкой. Но сейчас есть IEEE 754. Почему ни один вариант TeX его не поддерживает?

Конечно, есть LuaTeX, но IEEE 754 был популярен задолго до него, так что вопрос оправдан.

решение1

Ответить на такой вопрос сложно, поскольку записи для «Почему нет» обычно найти сложнее, чем для «Почему». Однако мы можем реконструировать разумную цепочку событий.

Кнут написал TeX для решения конкретной проблемы: набора текста.Искусство программирования. Хотя он и сделал TeX полным по Тьюрингу, его модель создания документов во многом заключается в том, что ввод TeX близок к набору текста: просмотр исходного текста дляTeXbookнапример, очевидно, что существует подход, в котором информация «разрешена». Варианты использования Кнута также в значительной степени не те, которые могут использовать такие вещи, как FPU. Поэтому неудивительно, что он не расширил TeX в этой области.

(Это такой же хороший момент, как и любое упоминание обратной совместимости. Добавление новых примитивов всегда может что-то сломать, как, несомненно, определили некоторые пользователи \fpexpr. Однако больший риск в архивно-стабильном продукте, таком как TeX90, заключается в том, что любое изменение может принести новые ошибки где-то еще: «если что-то не сломалось, не надо это чинить» — вот руководящая идея.)

У всех разработчиков двигателей после Кнута были определенные проблемы, которые их интересовали. Важно то, что это, как правило, проблемы, которые мыне мочьлегко решить вне самого набора текста. Работа с плавающей точкой на самом деле не попадает в эту область: для любых «серьезных» вещей можно было бы разумно ожидать предварительной обработки в специализированном инструменте в любом случае.

Если мы посмотрим на основные усилия в разработке двигателей, то увидим, что добавление FPU в качестве конкретной цели было маловероятным. Рассматривая идеи в приблизительно хронологическом порядке

  • e-TeX добавляет идеи, которые являются весьма общими для поддержки программирования TeX ( \protectedновые диапазоны регистров,и т. д.), которые строятся на существующих идеях TeX90. Здесь важно, что хотя и \numexprбыли добавлены и т. д., они предоставляют несколько операторов ( +, -, *, /, (, )), только скобки не отображаются напрямую на существующие примитивы. FPU должен охватывать гораздо больше
  • e-TeX также добавляет код, который «близок» к набору текста, например, расширяя контроль вдов/сирот на несколько строк, добавляя \middle,и т. д.: все это очень далеко от необходимой поддержки FPU
  • pdfTeX добавил прямой вывод PDF, и хотя он также включает в себя различные служебные дополнения, большинство из них представляют собой тривиальные представления идей из вспомогательных библиотек (например, прошедшее время)
  • XeTeX (и предыдущие проекты) расширяет TeX для поддержки Unicode: фокусируется на диапазоне символов и включает идеи для работы с различными письменностями
  • XeTeX также добавляет поддержку системных шрифтов: снова нет связи с работой FPU
  • LuaTeX выполняет вышеописанное и раскрывает внутреннее устройство TeX с помощью Lua: добавление FPU является следствием интеграции последнего, но не является основным фактором этих усилий.

В целом, таким образом, мы видим, что для людей, которые фактически работали над движком, не было очевидного места для добавления FPU до LuaTeX. Более того, сообщество пользователей не проявляло особой активности. Можно выполнять ряд приблизительных операций в макросах, например, см. пакет trig, который включит поддержку float для общей верстки. Выполнение более сложной работы, как правило, лучше всего рассматривать как работу специализированного инструмента: верстка красивых результатов — это здорово, но если вы хотите провести больше анализа, вам, вероятно, понадобится интерактивный подход. Такие пакеты, как TeX, pgfplotsупрощают использование TeX для такого типа работы (это мой рабочий процесс), но из ряда сложных задач верстки, на которые можно было бы указать, поддержка FPU довольно нишевая.

(Я думаю, стоит также отметить, что реализация полного спектра функций ФП без некоторой библиотечной поддержки была бы нетривиальной задачей: я говорю об этом на основе опыта l3fpработы. Привлекательность этой работы, вероятно, будет невысокой для экспертов по разработке движков: реализация ее на макроуровне — интересная интеллектуальная задача!)

решение2

Это сводится к убийству святой коровы обратной совместимости, лучше всего объясненной самим Дональдом Кнутом в видео наВажность стабильности для TeX.

Связанный контент