cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Введение типа "машинное слово". Со знаком и без знака. #335

Open apolukhin opened 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +1, -6 Автор идеи: Vyacheslav Meshkov

Ввод типов: машинное слово - mword_t (знаковое) и беззнаковое машинное слово umword_t, имеющее максимальную производительность и максимально возможной разрядности для данный архитектуры. Например пишем цикл, и впоследствии не задумываемся о производительности и корректности при переносе кода x32 -> x64 или вообще на другую архитектуру.

Давно были введены типы указывающие разрядность: int32_t и подобные. Под это возникла потребность. Потому что невозможно считывать бинарные данные из файла, не имея чётких гарантий на размер типа.

Также есть не менее важная задача. Переменные цикла и просто любая переменная, обеспечивающая максимальную производительность на конкретной архитектуре. Например mword=int16_t на 16 разрядной машине, mword=int32_t на 32 разрядной, и так далее.

К сожалению, в своё время word был занят под 16 бит, когда машинное слово было 16 бит. И именно для 16 битной архитектуры были разумны и понятны dword, qword. Но на современных машинах это технически некорректные типы. Корректнее говорить word=int32_t для x86 и word=int64_t для x64. SIMD это отдельный набор типов. Их разрядность нам не важна.

Очевидно, что int8_t или int16_t на современной x86 архитектуре будут медленными. Также я не хочу переписывать код при переносе с архитектуры на архитектуру, если я не меняю функциональности. Если мы пишем цикл с int64_t, то он будет быстрый на x64, но не на x86, а если int32_t, то наоборот. А так просто пишем mword_t, и мигрируем с платформы на платформу.

apolukhin commented 3 years ago

Саша Зайцев, 1 августа 2018, 13:03 https://en.cppreference.com/w/cpp/types/integer

Вас не устроят fast версии типов?