powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / сбалансировать потоки
6 сообщений из 31, страница 2 из 2
сбалансировать потоки
    #40102735
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonДа. Джордж Санд.

Сразу видно писательницу. Технари формулируют проще: Keep It Simple, Stupid.
Эх, верно говорят, что нет пророков в своём отечестве... :)
"Сделать простое иногда во много раз сложнее, чем сложное" /Михаил Калашников/
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102755
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один финский парень в борьбе с простотой рефакторил алгоритм удаления списковых элементов.
Оригинал не могу найти но вот кто-то копи-пастил себе в репу https://github.com/mkirchner/linked-list-good-taste

before
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void remove_cs101(IntList *l, IntListItem *target)
{
    IntListItem *cur = l->head, *prev = NULL;
    while (cur != target) {
        prev = cur;
        cur = cur->next;
    }
    if (prev) {
        prev->next = cur->next;
    } else {
        l->head = cur->next;
    }
}


after
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
static inline IntListItem **find_indirect(IntList *l, IntListItem *target)
{
    IntListItem **p = &l->head;
    while ((*p) && (*p) != target) {
        p = &(*p)->next;
    }
    return p;
}

void remove_elegant(IntList *l, IntListItem *target)
{
    IntListItem **p = find_indirect(l, target);
    *p = target->next;
}



Мне кажется тут главное - оставаться в пределах возможностей человеческого восприятия. Тоесть код
должен быть элегантным но оставаться supportable.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102765
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,
Калашников хороший пример))
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40107169
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

довольно неочевидный пример для сишника или плюсовика, так как требует внимания
а всё из-за нелюбви к заданиям типов у оных
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40107262
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется дело не в типах.

Код: plaintext
1.
2.
3.
4.
5.
    IntListItem **p = &l->head;
    while ((*p) && (*p) != target) {
        p = &(*p)->next;
    }
    return p;



Не знаю как в сях. Но в С++ подобный код обязательно вызывает во первых споры разработчиков.
Во вторых возможны варнинги статик-анализаторов. PVS, Sonar, e.t.c. Я не тестил но думаю что там будут
просто смысловые и синтаксические предупреждения класса "code-smell", "tricky-code" и возможно
что-то с человеческими метриками. Типа там... неясность. Использование одной переменной в двух ролях.

Я-бы оставил 1-й вариант кода. Я всегда беру две ссылки previous/next для обработки списков.
Это дает возможность смотреть "назад". И может быть в дву-направленных я-бы брал три штуки.

Возможно Торвальдс гордится некими ассемблерными оптимизациями в его варианте - но мне всегда
ближе и ценнее способность прочитать. Восхитится удобством внесения изменений. И просто быть
спокойным что это закоммичен код. А не ребус. А если впадать в крайности... ну писал-бы ассемблерные
вставки. Кто-ж запретит-то. Особенно когда ты - главный коммитер.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40107300
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

роль тут одна - "место, где хранится указатель", и для понимания этого, желательно обозначить это новым типом, что не сделано
"Задание лишних сущностей плохо, а незадание нужных сущностей - ещё хуже" (С)

например, использование этого способа в красно-чёрном дереве позволяет срезать половину кода, что явно облегчает читаемость
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / сбалансировать потоки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]