LINUX.ORG.RU

История изменений

Исправление snizovtsev, (текущая версия) :

STL неплох для «набросать рабочий прототип за день». Для остального обычно его не хватает или не оптимален. В итоге часто финальному оптимизированному коду хватает фич на уровне C.

Например, недавно решил вспомнить молодость и порешать олимпиадную задачку на графы. Но писать код максимально оптимально, как будто в продакшн.

В итоге лапша вроде std::vector<std::vector<u32>> adj; превращается в 2 вектора с объединёнными списками и оффсетами к ним. И всё, конец безопасности. А иначе жрёт память и страдает кеш промахами. Далее нужно было пометить 2 ребра для каждой вершины после обхода дерева. И тут оказалось, что дешевле swap-ать элементы в начало списка, а не хранить отдельно дополнительные индексы – полетел const метода. И тд, включая написание рекурсии руками, чтобы не зависеть от размера стека, не тратить место на frame pointers и иметь возможность заглянуть «на n уровней выше по стеку».

Короче, синтаксический сахар часто мешает писать хороший код, а не помогает.

Исправление snizovtsev, :

STL неплох для «набросать рабочий прототип за день». Для остального обычно его не хватает или не оптимален. В итоге часто финальному оптимизированному коду хватает фич на уровне C.

Например, недавно решил вспомнить молодость и порешать олимпиадную задачку на графы. Но писать код максимально оптимально, как будто в продакшн.

В итоге лапша вроде std::vector<std::vector<u32>> adj; превращается в 2 вектора с объединёнными списками и оффсетами к ним. И всё, конец безопасности. А иначе жрёт память и страдает кеш промахами. Далее нужно было пометить 2 ребра для каждой вершины после обхода дерева. И тут оказалось, что дешевле swap-ать элементы в начало списка, а не хранить отдельно дополнительные индексы – полетел const метода. И тд, включая написание рекурсии руками, чтобы не зависеть от размера стека и не тратить frame pointers.

Исправление snizovtsev, :

STL неплох для «набросать рабочий прототип за день». Для остального обычно его не хватает или не оптимален. В итоге часто финальному оптимизированному коду хватает фич на уровне C.

Например, недавно решил вспомнить молодость и порешать олимпиадную задачку на графы. Но писать код максимально оптимально, как будто в продакшн.

В итоге лапша вроде std::vector<std::vector<u32>> adj; превращается в 2 вектора с объединёнными списками и оффсетами к ним. И всё, конец безопасности. А иначе жрёт память и страдает кеш промахами. Далее нужно было пометить 2 ребра для каждой вершины после обхода дерева. И тут оказалось, что дешевле swap-ать элементы в начало списка, а не хранить отдельно дополнительные индексы – полетел const метода. И тд.

Исправление snizovtsev, :

STL неплох для «набросать рабочий прототип за день». Для остального обычно его не хватает или не оптимален. В итоге часто финальному оптимизированному коду хватает фич на уровне C.

Например, недавно решил вспомнить молодость и порешать олимпиадную задачку на графы. Но писать код решил максимально оптимально, как будто в продакшн.

В итоге лапша вроде std::vector<std::vector<u32>> adj; превращается в 2 вектора с объединёнными списками и оффсетами к ним. И всё, конец безопасности. А иначе жрёт память и страдает кеш промахами. Далее нужно было пометить 2 ребра для каждой вершины после обхода дерева. И тут оказалось, что дешевле swap-ать элементы в начало списка, а не хранить отдельно дополнительные индексы – полетел const метода. И тд.

Исходная версия snizovtsev, :

STL неплох для «набросать рабочий прототип за день». Для остального обычно его не хватает или не оптимален. В итоге часто финальному оптимизированному коду часто хватает фич на уровне C.

Например, недавно решил вспомнить молодость и порешать олимпиадную задачку на графы. Но писать код решил максимально оптимально, как будто в продакшн.

В итоге лапша вроде std::vector<std::vector<u32>> adj; превращается в 2 вектора с объединёнными списками и оффсетами к ним. И всё, конец безопасности. А иначе жрёт память и страдает кеш промахами. Далее нужно было пометить 2 ребра для каждой вершины после обхода дерева. И тут оказалось, что дешевле swap-ать элементы в начало списка, а не хранить отдельно дополнительные индексы – полетел const метода. И тд.