Re[39]: Они сделали дерьмо опять
От: night beast СССР  
Дата: 02.07.20 18:28
Оценка:
Здравствуйте, boomer, Вы писали:

B>

B>Представим, что неймспейсов нет, и используются префиксы.


B>Какой-такой using std::swap?


я показал как будет с неймспейсами, ваш ход -- показать как будет с префиксами
Re[40]: Они сделали дерьмо опять
От: boomer  
Дата: 02.07.20 18:35
Оценка:
Здравствуйте, night beast, Вы писали:

B>>

B>>Представим, что неймспейсов нет, и используются префиксы.


B>>Какой-такой using std::swap?


NB>я показал как будет с неймспейсами, ваш ход -- показать как будет с префиксами


Если предположить, что swap — шаблонная функция, то вот так:

template<typename T>
void foo(T& x, T& y)
{
  swap(x, y);
}


Если же предположить, что должна вызываться функция, переопределенная для типа T — то точно так же. Просто эта функция будет переопределена вот так:

void swap(company_project_type& x, company_project_type& y)
{
  ...
}


Не то?
Re[41]: Они сделали дерьмо опять
От: night beast СССР  
Дата: 02.07.20 18:43
Оценка:
Здравствуйте, boomer, Вы писали:

B>Если предположить, что swap — шаблонная функция, то вот так:


B>
B>template<typename T>
B>void foo(T& x, T& y)
B>{
B>  swap(x, y);
B>}
B>


теперь предположите, что у меня в функции foo не стоит using std::swap;
полезете глобальное пространство зачищать?

B>Если же предположить, что должна вызываться функция, переопределенная для типа T — то точно так же. Просто эта функция будет переопределена вот так:


B>
B>void swap(company_project_type& x, company_project_type& y)
B>


то есть мы префиксы используем только для типов?
что так?

B>Не то?


а если у меня в "пространстве" company_project_type swap шаблонный?
Re[42]: Они сделали дерьмо опять
От: boomer  
Дата: 02.07.20 18:51
Оценка:
Здравствуйте, night beast, Вы писали:

B>>Если предположить, что swap — шаблонная функция, то вот так:


B>>
B>>template<typename T>
B>>void foo(T& x, T& y)
B>>{
B>>  swap(x, y);
B>>}
B>>


NB>теперь предположите, что у меня в функции foo не стоит using std::swap;

NB>полезете глобальное пространство зачищать?

Так оно и так только глобальное.

B>>Если же предположить, что должна вызываться функция, переопределенная для типа T — то точно так же. Просто эта функция будет переопределена вот так:


B>>
B>>void swap(company_project_type& x, company_project_type& y)
B>>


NB>то есть мы префиксы используем только для типов?

NB>что так?

Потому что это не "наша" функция, а переопределение глобальной.

B>>Не то?


NB>а если у меня в "пространстве" company_project_type swap шаблонный?


Тогда так:

[ccode]
void swap(company_project_type& x, company_project_type& y)
{
company_project_swap(x, y);
}
[/code]
Отредактировано 02.07.2020 18:52 boomer . Предыдущая версия .
Re[43]: Они сделали дерьмо опять
От: night beast СССР  
Дата: 02.07.20 18:58
Оценка:
Здравствуйте, boomer, Вы писали:

B>Так оно и так только глобальное.


есть две функции
namespace a { struct test {}; }

void foo(T x, T y)
{
   using namespace std::swap;
   swap(x, y);
}
foo(a::test{}, a::test{});

namespace b { struct test {}; void swap(T, T); }

void bar (T x, T y)
{
   swap(x, y);
}
bar(b::test{}, b::test{});


какие определения функции swap у тебя будут в глобальном пространстве имен, чтобы получить похожее поведение?

B>Потому что это не "наша" функция, а переопределение глобальной.


нету никаких "глобальных" есть функции из разных равноправных библиотек.

B>Тогда так:


B>[ccode]

B>void swap(company_project_type& x, company_project_type& y)
B>{
B> company_project_swap(x, y);
B>}
B>[/code]

"ты мне втираешь какую-то дичь" (с) ступин
Отредактировано 02.07.2020 19:43 night beast . Предыдущая версия . Еще …
Отредактировано 02.07.2020 19:01 night beast . Предыдущая версия .
Re[33]: Они сделали дерьмо опять
От: B0FEE664  
Дата: 02.07.20 20:27
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Именно так господа. В с++ пространства имен не более чем синтаксический сахар без которого прекрасно можно жить и многие так и делают.

Синтаксический сахар очень полезен для мозга: позволяет не заблудиться в дебрях.

K>For example, std::vector wasn't guaranteed to be contiguous, so passing an array to a C library like DirectX could potentially involve creating a temporary copy of it.

По хорошему, вектор не должен быть единым куском, но вот из-за сишников, которые только линейно думать умеют, таки решили сделать vector неотличимым от буфера. И как раз из-за этого приходилось писать свои велосипеды.

S>>* что размеры и индексы могут быть представлены только знаковыми целыми и никак иначе;

K>Именно так! Потенциальные грабли нужно устранять, даже ценой двухкратного сокращения диапазона индексов. С++ же спроектирован в погоне за ветряными мельницами, чтобы каждая написанная строка кода давалась программисту кровью и потом. Чтобы вместо того чтобы просто писать работающий код, программист обдумывал бы каждый оператор, не будет ли там смешанной арифметики, переполнения и т.д и т.п.

Переполнение знаковых индексов — это ещё хуже.
И каждый день — без права на ошибку...
Re[34]: Они сделали дерьмо опять
От: T4r4sB Россия  
Дата: 02.07.20 20:35
Оценка:
Здравствуйте, B0FEE664, Вы писали:


BFE>По хорошему, вектор не должен быть единым куском,


Если он не будет куском, то граблей будет дохрена

BFE>Переполнение знаковых индексов — это ещё хуже.


Часто массивы на 2 лярда создаёшь?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[36]: Они сделали дерьмо опять
От: B0FEE664  
Дата: 02.07.20 20:35
Оценка:
Здравствуйте, Kluev, Вы писали:

K>С знаковыми индексами не нужно думать куда что перенести, не нужно думать при чтении кода, не нужно постоянного микроменеджмента при написание простейших вещей.

Это не так. Со знаковыми индексами только и думаешь, как не выйти за пределы, ибо то, что за пределами — вообще не известно (было).
И каждый день — без права на ошибку...
Отредактировано 15.07.2020 20:46 B0FEE664 . Предыдущая версия .
Re[35]: Они сделали дерьмо опять
От: B0FEE664  
Дата: 02.07.20 20:48
Оценка:
Здравствуйте, T4r4sB, Вы писали:

BFE>>По хорошему, вектор не должен быть единым куском,

TB>Если он не будет куском, то граблей будет дохрена

Это какие? А то ведь на одной из предыдущих работ был вектор написанный поверх листа кусков памяти — за счёт этого был самый быстрый продукт на рынке.

BFE>>Переполнение знаковых индексов — это ещё хуже.

TB>Часто массивы на 2 лярда создаёшь?

signed char — не signed?
И каждый день — без права на ошибку...
Re[36]: Они сделали дерьмо опять
От: T4r4sB Россия  
Дата: 02.07.20 21:55
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Это какие? А то ведь на одной из предыдущих работ был вектор написанный поверх листа кусков памяти — за счёт этого был самый быстрый продукт на рынке.


Часто реаллоцируешь?
Я вот два раза в день, не чаще.

BFE>>>Переполнение знаковых индексов — это ещё хуже.

TB>>Часто массивы на 2 лярда создаёшь?

BFE>signed char — не signed?


Чарами индексируешься?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[37]: Они сделали дерьмо опять
От: B0FEE664  
Дата: 02.07.20 22:04
Оценка:
Здравствуйте, T4r4sB, Вы писали:

BFE>>signed char — не signed?

TB>Чарами индексируешься?
Если нужно, то — да. А вы как индексы храните? Как 64-х битный указатель?
И каждый день — без права на ошибку...
Re[38]: Они сделали дерьмо опять
От: T4r4sB Россия  
Дата: 02.07.20 22:14
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Если нужно, то — да.


Зачем?

BFE>А вы как индексы храните?


i32
один раз только не хватило, обошёл
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[39]: Они сделали дерьмо опять
От: B0FEE664  
Дата: 03.07.20 12:51
Оценка:
Здравствуйте, T4r4sB, Вы писали:

BFE>>Если нужно, то — да.

TB>Зачем?
Память экономлю.

BFE>>А вы как индексы храните?

TB>i32
std::int32_t ?

TB>один раз только не хватило, обошёл

А приложения у вас 32-х битные?
И каждый день — без права на ошибку...
Re[44]: Они сделали дерьмо опять
От: Kluev  
Дата: 04.07.20 08:08
Оценка: :)
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, boomer, Вы писали:


B>>Так оно и так только глобальное.


NB>есть две функции

NB>
NB>namespace a { struct test {}; }

NB>void foo(T x, T y)
NB>{
NB>   using namespace std::swap;
NB>   swap(x, y);
NB>}
NB>foo(a::test{}, a::test{});

NB>namespace b { struct test {}; void swap(T, T); }

NB>void bar (T x, T y)
NB>{
NB>   swap(x, y);
NB>}
NB>bar(b::test{}, b::test{});
NB>


NB>какие определения функции swap у тебя будут в глобальном пространстве имен, чтобы получить похожее поведение?


Ну получили вы подобное поведение. И что у вас на выходе? Лабиринт из костылей. С введением семантики перемещения такие пируэты вокруг функции свап болше не нужны. Но видимо Ватсон без трубки уже не может.
Re[34]: Они сделали дерьмо опять
От: Kluev  
Дата: 04.07.20 08:19
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>По хорошему, вектор не должен быть единым куском, но вот из-за сишников, которые только линейно думать умеют, таки решили сделать vector неотличимым от буфера. И как раз из-за этого приходилось писать свои велосипеды.


Для этого комитету с++ нужно было действовать более конкренто, а не занимать позицию вот вам спецификация, а один там кусок или нет — это детали реализации. Программисту для работы нужен недвусмысленный стандарт без всяких может нет, а может да.

S>>>* что размеры и индексы могут быть представлены только знаковыми целыми и никак иначе;

K>>Именно так! Потенциальные грабли нужно устранять, даже ценой двухкратного сокращения диапазона индексов. С++ же спроектирован в погоне за ветряными мельницами, чтобы каждая написанная строка кода давалась программисту кровью и потом. Чтобы вместо того чтобы просто писать работающий код, программист обдумывал бы каждый оператор, не будет ли там смешанной арифметики, переполнения и т.д и т.п.

BFE>Переполнение знаковых индексов — это ещё хуже.


Что значит хуже? В обоих случаях переполнение приведет к ошибочному ходу выполнения программы. Не будете же вы утверждать что при беззнаковом переполнении ошибочное выполнение будет "менее ошибочным".
Но случаев когда переполнение возможно в беззнаковой арифметике однозначно больше.
Re[45]: Они сделали дерьмо опять
От: night beast СССР  
Дата: 04.07.20 14:45
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Ну получили вы подобное поведение. И что у вас на выходе? Лабиринт из костылей. С введением семантики перемещения такие пируэты вокруг функции свап болше не нужны. Но видимо Ватсон без трубки уже не может.


если кое-кто не в состоянии понять, что это была демонстрация возможностей, то я ничем помочь не могу
Re[46]: Они сделали дерьмо опять
От: Kluev  
Дата: 06.07.20 09:09
Оценка: :)
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, Kluev, Вы писали:


K>>Ну получили вы подобное поведение. И что у вас на выходе? Лабиринт из костылей. С введением семантики перемещения такие пируэты вокруг функции свап болше не нужны. Но видимо Ватсон без трубки уже не может.


NB>если кое-кто не в состоянии понять, что это была демонстрация возможностей, то я ничем помочь не могу


Демонстрация возможностей чего? Костыле-ориентированного программирования? Спасибо не нужно.
Re[47]: Они сделали дерьмо опять
От: night beast СССР  
Дата: 06.07.20 09:38
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Демонстрация возможностей чего?


одного из механизмов языка.

K>Костыле-ориентированного программирования? Спасибо не нужно.


Вам, никто и не предлагает
Re[34]: Они сделали дерьмо опять
От: Patalog Россия  
Дата: 06.07.20 19:07
Оценка:
Здравствуйте, Kluev, Вы писали:

[]

K>Если вам не понятен этот код позвольте я первый кину в вас камень


Практически любой код рано или поздно становиться понятен, вопрос лишь в том, сколько времени над ним медитировать.

И да, основное здесь

В алгоритме, в котором нужно "перебрать все элементы кроме первого и последнего" всегда будет отдельная ветка логики для пустого массива (скорее даже size() < 3), иначе он будет ломаться пусть не на этом конкретном цикле, а где-то еще. А это "всегда будет корректно работать" — тупое заметание мусора под коврик.

Почетный кавалер ордена Совка.
Re[35]: Они сделали дерьмо опять
От: Kluev  
Дата: 09.07.20 18:09
Оценка:
Здравствуйте, Patalog, Вы писали:++

P>Здравствуйте, Kluev, Вы писали:


P>[]


K>>Если вам не понятен этот код позвольте я первый кину в вас камень


P>Практически любой код рано или поздно становиться понятен, вопрос лишь в том, сколько времени над ним медитировать.


P>И да, основное здесь

P>

P>В алгоритме, в котором нужно "перебрать все элементы кроме первого и последнего" всегда будет отдельная ветка логики для пустого массива (скорее даже size() < 3), иначе он будет ломаться пусть не на этом конкретном цикле, а где-то еще. А это "всегда будет корректно работать" — тупое заметание мусора под коврик.


"Всегда будет" — это громкие, но пустые заявления. Вот к примеру простой жизненный пример: итерация пар соседних элементов в массиве для вычисления длинны полилинии

    double len = 0;
    for (int i = 0; i < points.size() - 1; i++)
        len += distance(point[i], point[i + 1]);
    return len;


Один универсальный цикл на все случаи жизни. Никакие дополнительные ветки не нужны. В std::С++ такое естественно работать не будет, std-программист либо наступит на грабли, либо будет вынужден погрузиться в микро-менеджмент и "перебрасывать слагаемые"

for (int i = 1; i < points.size(); i++)


На все это тратятся ненужные временные и умственные ресурсы. Особенно смешно выглядят упражнения некоторых товарищей, которые найдя в языке костыль предназначенный для затыкания дыры, устраивают вокруг него пируэты считая это высшим пилотажем программирования.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.