Хардкорные программисты на Си и два кода
Олег Андреев комментирует мою недавнюю заметку об оптимизации:
Хардкорные программисты на Си, пишущие сложные алгоритмы, делают так: пишут кусок кода в лоб, понятно и просто. Когда в нем баги исправлены, рядом (отдельно, не вперемешку) пишется версия того же кода, только более эффективная. Пользы у такого подхода много:
- Весь код по теме находится рядом и в одном контексте — не нужно искать его в разных местах и (главное!) не нужно создавать дополнительных функций/интерфейсов для передачи необходимых данных туда, где происходит дальнейшая оптимизация.
- Если что-то нужно изменить в логике, то сразу понятно где и как это можно сделать в «медленной» версии. Внеся и протестировав изменения, можно затем переписать оптимизированную версию.
- Если что-то накосячено в оптимизированной версии, а сейчас нет человека или времени разбираться, можно переключиться обратно на медленную.
#if SLOW for (int i = 0; i <= 100; i++) { // медленный, но читаемый код, который полностью передает смысл } #elsif FASTER vDSP_ctoz ( (COMPLEX *) originalReal, 2, // stride 2, as each complex # is 2 floats &A, 1, // stride 1 in A.realP & .compP nOver2 // n/2 elts ); #endif