vak: (Default)
[personal profile] vak
Помогает проверить софтверные проекты на предмет переносимости. Поясню на примере. Скажем, возьмём симулятор БЭСМ-6 dubna и попробуем собрать его на Олинуксино, то есть архитектура arm32.
$ make
[ 3%] Building CXX object CMakeFiles/simulator.dir/arithmetic.cpp.o
arithmetic.cpp: In member function ‘void Processor::arith_multiply(Word)’:
arithmetic.cpp:256:5: error: expected primary-expression before ‘__int128’
256 | __int128 result = (__int128)acc.mantissa * word.mantissa;
| ^~~~~~~~
Тут задействован нестандартный тип __int128. Он имеется и в GCC и в CLANG, но только для 64-битных процессоров.

Другое место в том же проекте:
[  3%] Building CXX object CMakeFiles/simulator.dir/disk.cpp.o
disk.cpp: In member function ‘void Disk::memory_to_simh(unsigned int, unsigned int, unsigned int, unsigned int)’:
disk.cpp:194:48: error: comparison of integer expressions of different signedness: ‘ssize_t’ {aka ‘int’} and ‘unsigned int’ [-Werror=sign-compare]
194 | if (write(file_descriptor, source, nbytes) != nbytes)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
Потому что тип ssize_t здесь имеет тот же размер, что и unsigned int, и они конфликтуют.

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

Date: 2024-12-05 22:07 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Отлично.

Date: 2024-12-05 23:24 (UTC)
dmarck: (Default)
From: [personal profile] dmarck
вот только совсем недавно у коллег возник вопрос про древнючий doscmd, и выяснилось, что там очень много где почти гвоздями прибито, шо размер указателя == размер целого, всё время их туда-сюда конвертят, и в результате под x64...

Date: 2024-12-05 23:40 (UTC)
dmarck: (Default)
From: [personal profile] dmarck
чего мне смияцо, мы на этом выросли

потом приходилось с болью (полезной, впрочем!) свои привычки ломать ;)

Date: 2024-12-05 23:42 (UTC)
dmarck: (Default)
From: [personal profile] dmarck
тут же вспоминается светлой памяти УЖАСНЫЙ ЗАНУДА bde@, Mr Standards, который не одному десятку девелоперов мозг проел "а вот так у вас работает, но это чудом, ибо: ..."