2015-04-30 2 views
4

Линус утверждает [12], что порядка условных байт хуже, чем глупый.Почему условный порядок байтов плохой?

Первое, что приходит мне на ум, - это ZFS, но наверняка должны быть и другие примеры.

Он писал:

Единственной вменяемая модели указать один фиксированный порядок байт. Шутки в сторону. Это в равной степени портативный, он генерирует лучший код - даже на архитектур, которые затем должны безоговорочно выполнять байтовый порядок подкачки - и это проще добавить статические проверки типа для т.д.. Это в буквальном смысле меньше коды и быстрее сделать «BSWAP» инструкцию, чем сделать условный тест некоторой переменной (даже если вы можете избежать BSWAP динамически)

Я думаю, что условный порядок байт может генерировать более длинный код, но он должен быть быстрее на машинах, которые используют один и тот же порядок байтов. Похоже, что большинство его взглядов посвящено эстетике кода. Я не эксперт, поэтому я хотел бы получить более подробное объяснение его пунктов.

+2

Конечно, дайте разработчикам процессоров сесть и согласиться, чей порядок байтов будет стандартным. Попробуйте то же самое с сообществом разработчиков. –

+0

У Линуса есть точка.Условные инструкции имеют умение вызывать конвейеры и такие вещи. –

+0

@EricJ., Аргумент Линуса состоит в том, что порядок байтов должен быть фиксированной характеристикой протокола или формата, в отличие от переменной характеристики, описываемой метаданными. * Который * заказ выбран гораздо менее важен, или так он утверждает, поэтому он отклоняет различия между порядками нативного байта до вторичного рассмотрения, если это так. –

ответ

3

Вы попросили объяснения требований Линуса. Вы ошибаетесь в том, что они относятся к эстетике.

Когда Линус говорит: «[фиксированный порядок байтов] генерирует лучший код», он говорит в основном о лучшем (то есть быстрее) машинный код.

Когда он говорит: «проще статические проверки типа и т. Д.». он, вероятно, говорит о исходном коде C, но это не вопрос эстетики. Упрощенный код легче понять, упростить для обслуживания и имеет меньшую площадь поверхности для ошибок. Часто (но не всегда) он также генерирует лучший машинный код.

Когда он говорит, что «быстрее сделать„BSWAP“инструкции, чем сделать условный тест некоторой переменной» он снова говорить о машинном коде, говоря в основном, что будучи в состоянии иметь данные в родной заказ делает вы не хорошо, с точки зрения производительности, если вы не можете полагаться на данные, чтобы быть в собственном заказе. Лучше, утверждает он, чтобы иметь возможность полагаться на данные в неправильном порядке, чем проверять, в каком порядке он находится, прежде чем вы его используете.

Linus утверждает, что все вышеизложенное применяется даже в том случае, когда выбранный порядок байтов протокола отличается от собственного байтового порядка. В другом месте этого разговора он и другие наблюдали, что, даже если данные не находятся в собственном порядке байтов, на нем может выполняться множество операций, которые не заботятся о порядке байтов. Более того, если вы заранее знаете, что такое порядок байтов, то для некоторых других операций этот порядок можно упорядочить во время компиляции таким образом, чтобы избежать замены байтов во время выполнения.

Аргумент Линуса неотразим.

Смежные вопросы