Re[26]: Java vs C# vs C++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.10.15 20:43
Оценка: :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:


S>>Не это? https://msdn.microsoft.com/en-us/library/dn877695(v=vs.110).aspx


EP>При чём тут это "Transforms a two-dimensional vector by a specified 4x4 matrix."

Да смысл в том, что для типичных алгоритмов куча библиотек. Если нужна скорость то через интероп можно подключиться к нативным библиотекам.
Еще раз повторю, что сравнивать нужно реальные массовые приложения. Например Asp.Net как по скорости работы так и по скорости разработки.
Это будет правильно. Иногда дешевле купить железо, чем платить за разработку. Заметь сколько сайтов на PHP
и солнце б утром не вставало, когда бы не было меня
Re[19]: Java vs C# vs C++
От: Evgeny.Panasyuk Россия  
Дата: 02.10.15 20:54
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>>>Я уже приводил, ссылку что самые востребованные программисты это 1С овцы.

EP>>Водители ещё более востребованы, и что из этого?
S> А разве водители это программисты?

А причём востребованность?

S>>> Я к тому, что для каждого языка свои задачи.

EP>>А я разве говорил обратное?
S>>>А порядок скоростей давно известен.
EP>>Видимо не всем — иначе не было бы этого топика
S> Это было известно лет 10 назад после выхода Net 2.0 с дженериками.

Тему не я поднял.

S>>>И многие задачи решаются за счет оптимального подбора алгоритмов.

EP>>Я не предлагаю сравнивать решения с разными алгоритмами.
S> Так давай сравнивать реальную предметную область, а не сортировки

Сравнивать чтобы выяснить что?
Тема про производительность, обсуждение внезапно тоже.
Ты же зачем-то начинаешь переходить на сравнение востребованности языков, какие-то конкретные области типа ASP.NET, причём до конца не говоришь что конкретно хочешь этим выяснить.
Re[14]: Java vs C# vs C++
От: vdimas Россия  
Дата: 02.10.15 20:56
Оценка:
Здравствуйте, Klikujiskaaan, Вы писали:

K>Ах эта сверхманевренность. Так тупо съехать с пузырька на шейкер — верх мастерства.


Для описанного случая пофиг. Я напоминаю коллеге принципы работы пузырьковой сортировки.
К тому же, шейкерная сортировка официально является разновидностью пузырьковой.
Re[14]: Java vs C# vs C++
От: vdimas Россия  
Дата: 02.10.15 20:57
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Линейный поиск обычно идёт с конца, а не сначала.


Обычно он идёт двоичный.


EP>Даже с этими модификациями получается больше сравнений — дойдёт до 6, сделает swap, дойдёт до конца, а потом ещё сделает проход от 5 до 1.


И с этими и без этих модификацией НЕ будет лишнего прохода.
Напиши реализацию этого алгоритма и убедись.
Re[23]: Java vs C# vs C++
От: Evgeny.Panasyuk Россия  
Дата: 02.10.15 21:08
Оценка:
Здравствуйте, alexzz, Вы писали:

A>>>Но к этому времени никакого высокоуровнего кода уже не останется ― нечего сравнивать.

EP>>В каком смысле?
A>Смотри, допустим, есть метод на C#, который принимает ICollection<T>, как-то сложно её анализирует и даёт на выходе IDictionary<TKey, TValue>. И при этом тормозит. Допустим, кто-нибудь пишет аналог этого метода на C++ и указывает, что он работает в сто раз быстрее. Что это знание даёт практически?
A>Я ведь не смогу из C# передать в C++ ICollection<T> и получить IDictionary<TKey, TValue>.
A>- либо код на C++ должен будет понимать детали реализации типов в .Net, и получится уже не высокоуровневый код;
A>- либо передавать и возвращать придётся не абстрактные коллекции абстрактных типов, а какие-нибудь банальные массивы с числами или указатели на блоки памяти с числами, и снова получится не высокоуровневый код.

Это всего лишь механический слой interop'а, который прекрасно автоматизируется. Например каким-нибудь SWIG'ом, или Microsoft'авскими диалектами C++ которые работают в .NET.
При этом даже если вручную на низком уровне перебросить массив каких-то данных, это отнюдь не означает что вся реализация алгоритма на C++ должна быть на низком уровне — она без проблем может использовать весь арсенал высокоуровневых возможностей.

A>Логичный вариант ― не смотреть на другие языки, а сначала убрать лишние абстракции и чё-нибудь оптимизировать в коде на исходном языке. Стало достаточно быстро ― замечательно. Не стало ― смотрим в сторону С++, пробуем написать на нём аналог и сравниваем скорость. При этом сравниваем, естественно, с оптимизированной низкоуровневой версией. Ведь обогнать теперь нужно именно её.


Ещё раз, оптимизированные низкоуровневые версии на C# будут мало отличаться по скорости от C++ — какие-нибудь десятки процентов.
А вот цена создания такой низкоуровневой версии может быть неподъёмной, и намного превышать цену interop'а.
Re[20]: Java vs C# vs C++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.10.15 21:11
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


S>>>>Я уже приводил, ссылку что самые востребованные программисты это 1С овцы.

EP>>>Водители ещё более востребованы, и что из этого?
S>> А разве водители это программисты?

EP>А причём востребованность?

При том, что пишут на тех языках на которых удобнее и нужна меньшая квалификация, а не на тех, что быстрее, но менее удобный.

S>>>> Я к тому, что для каждого языка свои задачи.

EP>>>А я разве говорил обратное?
S>>>>А порядок скоростей давно известен.
EP>>>Видимо не всем — иначе не было бы этого топика
S>> Это было известно лет 10 назад после выхода Net 2.0 с дженериками.

EP>Тему не я поднял.


S>>>>И многие задачи решаются за счет оптимального подбора алгоритмов.

EP>>>Я не предлагаю сравнивать решения с разными алгоритмами.
S>> Так давай сравнивать реальную предметную область, а не сортировки

EP>Сравнивать чтобы выяснить что?

EP>Тема про производительность, обсуждение внезапно тоже.
EP>Ты же зачем-то начинаешь переходить на сравнение востребованности языков, какие-то конкретные области типа ASP.NET, причём до конца не говоришь что конкретно хочешь этим выяснить.

Еще раз повторю, что порядок скоростей был известен лет 10 назад. Я делал тесты на C#,Delphi http://rsdn.ru/forum/philosophy/555869.flat
Автор: VladD2
Дата: 02.03.04
. Просил сделать на С++ но народ не стал делать. Тогда уже порядок был известен и за счет чего.
Смысл даже был в том, что было предубеждение по поводу байт кода итд. Проигрыш в 2 раза был вполне удовлетворителен. Мало, того была куча библиотек где можно было на своих алгоритмах увеличивать скорость раза в 4 http://rsdn.ru/article/alg/tlsd.xml#EZD
Автор(ы): Сергей Смирнов (Serginio1)
Дата: 14.08.2004
Пример реализации двухуровневого массива с помощью нового средства С# — generics. Сравнение производительности различных реализаций сортированных списков.
внизу сравнения.
Так большинство будет использовать стандартную библиотеку, чем более быструю, но неизвестно от кого.

Еще раз экономическая целесообразность (стоимость разработки) + (стоимость железа) для достижения одинаковой вычислительной мощности. Вот, что нужно считать.
и солнце б утром не вставало, когда бы не было меня
Re[15]: Java vs C# vs C++
От: Evgeny.Panasyuk Россия  
Дата: 02.10.15 21:17
Оценка:
Здравствуйте, vdimas, Вы писали:

EP>>Линейный поиск обычно идёт с конца, а не сначала.

V>Обычно он идёт двоичный.

Обычно он линейный. Сортировка вставками чаще всего применяется для случаев где элементы находятся недалеко от своего места — например на нижних уровнях std::sort — в этих случаях делать обычный двоичный поиск невыгодно.

Или например вот визуализация insertion sort:
http://www.youtube.com/watch?v=8oJS1BMKE64

Вот визуализация реализации std::sort — там сортировка вставками на последнем этапе.
http://www.youtube.com/watch?v=67ta5WTjjUo

EP>>Даже с этими модификациями получается больше сравнений — дойдёт до 6, сделает swap, дойдёт до конца, а потом ещё сделает проход от 5 до 1.

V>И с этими и без этих модификацией НЕ будет лишнего прохода.

Каким образом?

V>Напиши реализацию этого алгоритма и убедись.


В тех реализациях что я представляю — лишний проход есть. Покажи реализацию без лишнего прохода, или хотя бы дай ссылку на код.
Re[21]: Java vs C# vs C++
От: Evgeny.Panasyuk Россия  
Дата: 02.10.15 21:46
Оценка:
Здравствуйте, Serginio1, Вы писали:

EP>>А причём востребованность?

S> При том, что пишут на тех языках на которых удобнее и нужна меньшая квалификация,

Пишут что? В каких случаях? Удобнее для чего?

S>а не на тех, что быстрее, но менее удобный.


Для быстрого кода C++ удобный

S>>>>>И многие задачи решаются за счет оптимального подбора алгоритмов.

EP>>>>Я не предлагаю сравнивать решения с разными алгоритмами.
S>>> Так давай сравнивать реальную предметную область, а не сортировки
EP>>Сравнивать чтобы выяснить что?
EP>>Тема про производительность, обсуждение внезапно тоже.
EP>>Ты же зачем-то начинаешь переходить на сравнение востребованности языков, какие-то конкретные области типа ASP.NET, причём до конца не говоришь что конкретно хочешь этим выяснить.
S> Еще раз повторю, что порядок скоростей был известен лет 10 назад.

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

S>Я делал тесты на C#,Delphi http://rsdn.ru/forum/philosophy/555869.flat
Автор: VladD2
Дата: 02.03.04
. Просил сделать на С++ но народ не стал делать.


Я уже и в этой теме много раз сказал, что если брать низкоуровневый код, типа как по твоей ссылке — где сортируется конкретный тип массива, с конкретным типом элементов, с конкретным типом предиката — то скорость на Java/C# будет очень близкой к C++.
Основное преимущество по скорости у C++ в другом — в том что можно подняться на более высокий уровень абстракции не теряя, либо практически не теряя скорости.

S>Еще раз экономическая целесообразность (стоимость разработки) + (стоимость железа) для достижения одинаковой вычислительной мощности. Вот, что нужно считать.


Во-первых, это всего лишь один вариант целесообразности. Например железо может быть уже на миллионах устройств клиентов — и вместо покупки нового девайса, они пойдут к конкурентам, софт которых работает на текущем железе, пусть и стоимость его разработки была выше.
Во-вторых, даже если брать твой сценарий — чтобы прикинуть вычислительную мощность на одном устройстве нужно внезапно проводить те же тесты, против которых ты выступаешь
Re[22]: Java vs C# vs C++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.10.15 22:06
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


EP>>>А причём востребованность?

S>> При том, что пишут на тех языках на которых удобнее и нужна меньшая квалификация,

EP>Пишут что? В каких случаях? Удобнее для чего?

Удобнее для написания сайтов, учетных систем массовых задач.

S>>а не на тех, что быстрее, но менее удобный.


EP>Для быстрого кода C++ удобный

Еще раз повторю формулу экономической целесообразности
(стоимость разработки) + (стоимость железа) для достижения одинаковой вычислительной мощности


S>>>> Так давай сравнивать реальную предметную область, а не сортировки

EP>>>Сравнивать чтобы выяснить что?
Выяснить экономическую целесообразность выбора инструмента.
EP>>>Тема про производительность, обсуждение внезапно тоже.
EP>>>Ты же зачем-то начинаешь переходить на сравнение востребованности языков, какие-то конкретные области типа ASP.NET, причём до конца не говоришь что конкретно хочешь этим выяснить.
S>> Еще раз повторю, что порядок скоростей был известен лет 10 назад.

EP>Каких конкретно скоростей? И зачем ты мне это повторяешь? Ещё раз, тему не я поднял — если тебя не устаревает что это тему опять подняли — то задавай вопросы на счёт этого не мне.


S>>Я делал тесты на C#,Delphi http://rsdn.ru/forum/philosophy/555869.flat
Автор: VladD2
Дата: 02.03.04
. Просил сделать на С++ но народ не стал делать.


EP>Я уже и в этой теме много раз сказал, что если брать низкоуровневый код, типа как по твоей ссылке — где сортируется конкретный тип массива, с конкретным типом элементов, с конкретным типом предиката — то скорость на Java/C# будет очень близкой к C++.

EP>Основное преимущество по скорости у C++ в другом — в том что можно подняться на более высокий уровень абстракции не теряя, либо практически не теряя скорости.
Ну в Net есть дженерики. Да они медленнее примерно в 2 раза за счет отсутствия инлайна. Но все зависит от структур и версии Jit а который совершенствуется.

S>>Еще раз экономическая целесообразность (стоимость разработки) + (стоимость железа) для достижения одинаковой вычислительной мощности. Вот, что нужно считать.


EP>Во-первых, это всего лишь один вариант целесообразности. Например железо может быть уже на миллионах устройств клиентов — и вместо покупки нового девайса, они пойдут к конкурентам, софт которых работает на текущем железе, пусть и стоимость его разработки была выше.

EP>Во-вторых, даже если брать твой сценарий — чтобы прикинуть вычислительную мощность на одном устройстве нужно внезапно проводить те же тесты, против которых ты выступаешь
Я не против тестов, я против синтетических тестов. В реальных приложениях занятость процессора очень далека до 100%. Большинство время уходит на ожидание запроса к SQL, HTTP запроса, итд. Заметь, что в браузерах победил JS. Опять же какая разница для пользователя в ожидании 0.1 или 0.2 секунды.
Берем какую то задачу и программируем. Зная ЗП среднестатистического программиста вычисляем стоимость. Затем берем тесты и вычисляем стоимость железа для достижения одинакового результата.
Нужно учитывать, что очень хороших программистов очень мало. Поэтому нужно брать средних программистов типа меня.
и солнце б утром не вставало, когда бы не было меня
Re[9]: Java vs C# vs C++
От: alex_public  
Дата: 02.10.15 22:16
Оценка:
Здравствуйте, Ikemefula, Вы писали:

PM>>В заголовок новости не поместилась информация о том, что они:

PM>> PM>>У меня есть сомнения, что первые 2 пункта легко реализуемы в управляемых средах (не знаю, добавили ли уже в Java value types)
I>То есть, язык ни при чём. Чтд.

Если подразумевается язык в смысле синтаксиса, то конечно ни при чём. Если же говорить про платформу (clr vs jvm vs native), то как раз очень даже причём. ))) Собственно в этом почти всё дело и есть.

Ну и ещё не забываем про то, что у главных компиляторов C++ в данным момент мощнейшие в мире оптимизаторы. Что впрочем обычно влияет на быстродействие не более чем в пару раз (если не считать таких нюансов как автовекторизация), а не в 10, как в новости. Так что главное естественно не в этом, а в рантайме платформы, но про этот нюанс тоже стоит помнить.
Re[23]: Java vs C# vs C++
От: Evgeny.Panasyuk Россия  
Дата: 02.10.15 22:48
Оценка:
Здравствуйте, Serginio1, Вы писали:

EP>>>>А причём востребованность?

S>>> При том, что пишут на тех языках на которых удобнее и нужна меньшая квалификация,
EP>>Пишут что? В каких случаях? Удобнее для чего?
S> Удобнее для написания сайтов, учетных систем массовых задач.

И? Это единственные существующие задачи?

S>>>а не на тех, что быстрее, но менее удобный.

EP>>Для быстрого кода C++ удобный
S> Еще раз повторю формулу экономической целесообразности
S>(стоимость разработки) + (стоимость железа) для достижения одинаковой вычислительной мощности

ОК, повторил, что ты этим хочешь сказать? (причем это одна из возможных формул, а не единственная)
Да, целесообразность тоже нужно учитывать, с этим не спорю — кроме этого ты что-то ещё подразумевал?

S>>>Я делал тесты на C#,Delphi http://rsdn.ru/forum/philosophy/555869.flat
Автор: VladD2
Дата: 02.03.04
. Просил сделать на С++ но народ не стал делать.

EP>>Я уже и в этой теме много раз сказал, что если брать низкоуровневый код, типа как по твоей ссылке — где сортируется конкретный тип массива, с конкретным типом элементов, с конкретным типом предиката — то скорость на Java/C# будет очень близкой к C++.
EP>>Основное преимущество по скорости у C++ в другом — в том что можно подняться на более высокий уровень абстракции не теряя, либо практически не теряя скорости.
S> Ну в Net есть дженерики. Да они медленнее примерно в 2 раза за счет отсутствия инлайна.

Это цифра с потолка.

Во-первых отсутствие инлайна это прежде всего не стоимость непосредственно вызова, а отсутствие возможности оптимизировать большой кусок кода целиком.

Во-вторых даже если брать только цену вызова ~T нужно понимать что цена каждого вызова суммируется, то есть N*T. А чтобы посчитать "во сколько раз" — нужно знать цену конечной полезной операции P. Получается формула (N*T + P)/P, и чем мельче сама операция P — тем в большее число раз разрыв. На C++ можно без проблем оборачивать в абстракции даже мелкие операции без потерь: конкретный пример
Автор: Evgeny.Panasyuk
Дата: 23.12.14
.

В-третьих помимо тормозов дженериков/лямбд есть тормоза лишних косвенностей по памяти. Потому что default это pointer semantics, а не value semantics как в C++. Да есть структуры, но они далеко не всегда применимы: например
Автор: Evgeny.Panasyuk
Дата: 11.10.14
. Нельзя произвольный класс превратить в структуру, например List и т.п.
Вот небольшой пример
Автор: Sinix
Дата: 05.06.15
для оценки эффекта: заменили struct на class в одном месте и получили ~80x просадку. Так это всего лишь один уровень и пример простой.

EP>>Во-первых, это всего лишь один вариант целесообразности. Например железо может быть уже на миллионах устройств клиентов — и вместо покупки нового девайса, они пойдут к конкурентам, софт которых работает на текущем железе, пусть и стоимость его разработки была выше.

EP>>Во-вторых, даже если брать твой сценарий — чтобы прикинуть вычислительную мощность на одном устройстве нужно внезапно проводить те же тесты, против которых ты выступаешь
S> Я не против тестов, я против синтетических тестов.

А я не против синтетических тестов — я только за, они позволяют проверить какой-нибудь конкретный аспект отметая всё лишнее. Тем не менее я против неверных выводов из результатов этих тестов.

S>В реальных приложениях занятость процессора очень далека до 100%. Большинство время уходит на ожидание запроса к SQL, HTTP запроса, итд.


Старая шарманка "всё в базу упираются"
У меня в продукте вообще нет никакой никакого SQL и никаких HTTP, не надо проецировать какие-то свои личные задачи на всех, и делать далеко идущие выводы

S>Заметь, что в браузерах победил JS. Опять же какая разница для пользователя в ожидании 0.1 или 0.2 секунды.


ASM.JS достаточно быстрый. Я даже выше приводил ссылку. C++ скомпилированный в ASM.JS обогнал C# в своей родной среде практически в два раза
JavaScript, в веб-браузере, Карл!

S> Берем какую то задачу и программируем. Зная ЗП среднестатистического программиста вычисляем стоимость. Затем берем тесты и вычисляем стоимость железа для достижения одинакового результата.


Дальше-то ты какой вывод делаешь?
Re[23]: Java vs C# vs C++
От: alex_public  
Дата: 02.10.15 22:54
Оценка:
Здравствуйте, Serginio1, Вы писали:

EP>>Пишут что? В каких случаях? Удобнее для чего?

S> Удобнее для написания сайтов, учетных систем массовых задач.

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

S> Еще раз повторю формулу экономической целесообразности

S>(стоимость разработки) + (стоимость железа) для достижения одинаковой вычислительной мощности

Да, всё верно. Именно из-за этого факта и существуют такие вещи как Java/C#. И как раз сейчас в связи со стагнацией в росте производительности процессоров, ростом мобильного рынка (где вообще печаль с производительностью) и начинающейся модой на "интернет вещей" (а туда вообще даже сами платформы jvm/clr не лезут по нормальному, не говоря уже о какой-то производительности) в этом вопрос возможны существенные корректировки.

S> Я не против тестов, я против синтетических тестов. В реальных приложениях занятость процессора очень далека до 100%. Большинство время уходит на ожидание запроса к SQL, HTTP запроса, итд. Заметь, что в браузерах победил JS. Опять же какая разница для пользователя в ожидании 0.1 или 0.2 секунды.

S> Берем какую то задачу и программируем. Зная ЗП среднестатистического программиста вычисляем стоимость. Затем берем тесты и вычисляем стоимость железа для достижения одинакового результата.
S> Нужно учитывать, что очень хороших программистов очень мало. Поэтому нужно брать средних программистов типа меня.

Из этого текста создаётся такое впечатление, что все эти sql серверы, http серверы, браузеры и т.п., в которых происходит основное время исполнения задачи (по твоим же словам) и которые кстати в подавляющем большинстве написаны на C/C++, пишутся не программистами, а какими-то инопланетянами. )))
Re[16]: Java vs C# vs C++
От: vdimas Россия  
Дата: 02.10.15 23:12
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>>>Линейный поиск обычно идёт с конца, а не сначала.

V>>Обычно он идёт двоичный.
EP>Обычно он линейный.

Линейный он лишь для случая одновременного поиска и сдвига элементов массива.
В этом случае он представляет из себя разновидность пузырьковой сортировки. Если же сначала найти необходимую позицию, а затем сдвинуть все необходимые элементы за раз, то так может оказаться эффективней.


EP>Сортировка вставками чаще всего применяется для случаев где элементы находятся недалеко от своего места — например на нижних уровнях std::sort — в этих случаях делать обычный двоичный поиск невыгодно.


Сортировка вставками — это один из наиэффективнейших алгоритмов сам по себе для случая, когда в массиве немного неотсортированных элементов. А "далеко" или "недалеко" — это всё спекуляции. В std::sort идет линейный поиск по той причине, которую уже многократно обсуждали на этом сайте — до, примерно, 16-ти элементов на современных процессорах выгодней искать элемент линейно, а не двоичным поиском. В общем же случае это утверждение совершенно не верно.


EP>Или например вот визуализация insertion sort:

EP>http://www.youtube.com/watch?v=8oJS1BMKE64

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


EP>В тех реализациях что я представляю — лишний проход есть.


Мммм...
Похоже, что в тех реализациях, что ты представляешь — пузырьковая сортировка отработает N! (факториал) раз независимо от исходных данных. ))


EP>Покажи реализацию без лишнего прохода, или хотя бы дай ссылку на код.


Стандартная и есть без лишнего прохода. Из вики:

Введение индикатора (флажка F) действительно произошедших во внутреннем цикле обменов уменьшает число лишних проходов в случаях с частично отсортированными массивами на входе. Перед каждым проходом по внутреннему циклу флажок сбрасывается в 0, а после действительно произошедшего обмена устанавливается в 1. Если после выхода из внутреннего цикла флажок равен 0, то обменов не было, то есть массив отсортирован и можно досрочно выйти из программы сортировки.

Re[16]: Java vs C# vs C++
От: vdimas Россия  
Дата: 02.10.15 23:28
Оценка: :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Вот визуализация реализации std::sort — там сортировка вставками на последнем этапе.


Оттуда же ролик:
https://www.youtube.com/watch?v=kPRA0W1kECg

Сортировка прямым выбором заборола быструю почти в два раза, ы-ы-ы.

Кста, сортировка прямым выбором одна из наипростейших для реализации...
Т.е., от исходных данных сильно всё зависит.
Re[17]: Java vs C# vs C++
От: Evgeny.Panasyuk Россия  
Дата: 02.10.15 23:47
Оценка:
Здравствуйте, vdimas, Вы писали:

EP>>>>Линейный поиск обычно идёт с конца, а не сначала.

V>>>Обычно он идёт двоичный.
EP>>Обычно он линейный.
V>Линейный он лишь для случая одновременного поиска и сдвига элементов массива.
V>В этом случае он представляет из себя разновидность пузырьковой сортировки.

Это не разновидность пузырьковой сортировки.

V>Если же сначала найти необходимую позицию, а затем сдвинуть все необходимые элементы за раз, то так может оказаться эффективней.


Может, не спорю что есть вариант с двоичным поиском, и что у него есть область применения. Я говорю что обычно он линейный.

EP>>Сортировка вставками чаще всего применяется для случаев где элементы находятся недалеко от своего места- например на нижних уровнях std::sort — в этих случаях делать обычный двоичный поиск невыгодно.

V>Сортировка вставками — это один из наиэффективнейших алгоритмов сам по себе для случая, когда в массиве немного неотсортированных элементов. А "далеко" или "недалеко" — это всё спекуляции.

Это не спекуляции, а реальное свойство влияющее на применимость.

V>В std::sort идет линейный поиск по той причине, которую уже многократно обсуждали на этом сайте — до, примерно, 16-ти элементов на современных процессорах выгодней искать элемент линейно, а не двоичным поиском.


В том числе и по этой причине.

V>В общем же случае это утверждение совершенно не верно.


Я не говорил про общий случай, я конкретно обозначил необходимое свойство.

EP>>Или например вот визуализация insertion sort:

EP>>http://www.youtube.com/watch?v=8oJS1BMKE64
V>Ну вот хорошо видно, что от текущего элемента работает как пузырьковая при линейном поиске ))

Это не пузырьковая сортировка
Там вообще говоря swap использовать не выгодно — там нет необходимости менять каждый соседний элемент между собой. Оптимальнее переместить текущий элемент в temp, все остальные переместить вправо, а потом переместить temp в левый край. Это операция ЕМНИП rotate_by_one.

EP>>В тех реализациях что я представляю — лишний проход есть.

V>Мммм...
V>Похоже, что в тех реализациях, что ты представляешь — пузырьковая сортировка отработает N! (факториал) раз независимо от исходных данных. ))

Очень смешно. Пузырьковая сортировка квадратична в худщем случае.

EP>>Покажи реализацию без лишнего прохода, или хотя бы дай ссылку на код.

V>Стандартная и есть без лишнего прохода.

Код в студию, иначе наш спор не разрешится.

V>Из вики:

V>

V>Введение индикатора (флажка F) действительно произошедших во внутреннем цикле обменов уменьшает число лишних проходов в случаях с частично отсортированными массивами на входе. Перед каждым проходом по внутреннему циклу флажок сбрасывается в 0, а после действительно произошедшего обмена устанавливается в 1. Если после выхода из внутреннего цикла флажок равен 0, то обменов не было, то есть массив отсортирован и можно досрочно выйти из программы сортировки.


И? Берём твой пример 1 2 3 4 6 5 7 8 9, начинаем:

* "Перед каждым проходом по внутреннему циклу флажок сбрасывается в 0"
flag = 0

В этом цикле у нас будет один swap/обмен 6<->5 :
* "а после действительно произошедшего обмена устанавливается в 1"
Устанавливаем flag = 1

* "Если после выхода из внутреннего цикла флажок равен 0, то обменов не было, то есть массив отсортирован и можно досрочно выйти из программы сортировки."
flag == 1, значит досрочно выйти мы не можем.
Делаем ещё один проход, опять вначале устанавливаем flag в 0 — на этот раз без обменов, и после этого второго прохода можем выйти досрочно.
Re[17]: Java vs C# vs C++
От: Evgeny.Panasyuk Россия  
Дата: 02.10.15 23:58
Оценка:
Здравствуйте, vdimas, Вы писали:

EP>>Вот визуализация реализации std::sort — там сортировка вставками на последнем этапе.

V>Оттуда же ролик:
V>https://www.youtube.com/watch?v=kPRA0W1kECg
V>Сортировка прямым выбором заборола быструю почти в два раза, ы-ы-ы.
V>Кста, сортировка прямым выбором одна из наипростейших для реализации...
V>Т.е., от исходных данных сильно всё зависит.

Конечно зависит, размер данных решает — в данном ролике он разный в каждом эпизоде

P.S. Сортировка выбором (не стабильный вариант) даёт наименьшее возможное количество перемещений элементов, вполне полезное свойство.
Re[18]: Java vs C# vs C++
От: Evgeny.Panasyuk Россия  
Дата: 03.10.15 00:13
Оценка:
V>>Т.е., от исходных данных сильно всё зависит.
EP>Конечно зависит, размер данных решает — в данном ролике он разный в каждом эпизоде

А вот параллельное сравнение на одинаковом небольшом размере:
http://www.youtube.com/watch?v=ZZuD6iUe3Pc
Re[24]: Java vs C# vs C++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.10.15 07:24
Оценка:
Здравствуйте, alex_public, Вы писали:

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


EP>>>Пишут что? В каких случаях? Удобнее для чего?

S>> Удобнее для написания сайтов, учетных систем массовых задач.

_>Сайты удобнее делать на скриптовых языках. А что такое "учетные системе массовых задач"?.

Учетные системы ERP это ERP Microsoft Dynamics,SAP, Oracle E-Business Suite ну и конечно 1С.

По поводу сайтов, то Asp.Net MVC очень востребована. Мало того сейчас серверная часть больше похожа на HTTP сервис, где выдается начальная страница, а с клиента через AJAX данные подгружаются ввиде Json и вся работа по построению DOM лежит на клиенте с помощью AJAX и JS библиотек
Например
http://itchief.ru/lessons/bootstrap-3/92-bootstrap-3-visual-editors
http://metanit.com/sharp/mvc5/17.3.php
http://demos.telerik.com/kendo-ui/grid/index
http://w2ui.com/web/demo/grid
http://demo.qooxdoo.org/current/showcase/#Tree

http://www.sencha.com/products/extjs/
http://webix.com/demo/charts/customizing/
http://yuilibrary.com/yui/docs/examples/
http://docs.angularjs.org/guide/overview
http://jqueryui.com/

S>> Еще раз повторю формулу экономической целесообразности

S>>(стоимость разработки) + (стоимость железа) для достижения одинаковой вычислительной мощности

_>Да, всё верно. Именно из-за этого факта и существуют такие вещи как Java/C#. И как раз сейчас в связи со стагнацией в росте производительности процессоров, ростом мобильного рынка (где вообще печаль с производительностью) и начинающейся модой на "интернет вещей" (а туда вообще даже сами платформы jvm/clr не лезут по нормальному, не говоря уже о какой-то производительности) в этом вопрос возможны существенные корректировки.


Ну сейчас идут по пути распараллеливания кода. Кстати многие сортировки можно распараллелить.

S>> Я не против тестов, я против синтетических тестов. В реальных приложениях занятость процессора очень далека до 100%. Большинство время уходит на ожидание запроса к SQL, HTTP запроса, итд. Заметь, что в браузерах победил JS. Опять же какая разница для пользователя в ожидании 0.1 или 0.2 секунды.

S>> Берем какую то задачу и программируем. Зная ЗП среднестатистического программиста вычисляем стоимость. Затем берем тесты и вычисляем стоимость железа для достижения одинакового результата.
S>> Нужно учитывать, что очень хороших программистов очень мало. Поэтому нужно брать средних программистов типа меня.

_>Из этого текста создаётся такое впечатление, что все эти sql серверы, http серверы, браузеры и т.п., в которых происходит основное время исполнения

задачи (по твоим же словам) и которые кстати в подавляющем большинстве написаны на C/C++, пишутся не программистами, а какими-то инопланетянами. )))

Вот посмотри мои разработки http://infostart.ru/profile/82159/public/
Большинство сделаны для связи 1С с внешним миров и со связью из внешнего мира с 1С. Я ими активно пользуюсь. И посмтори сколько комментариев и какие.
Народ просто не понимает о чем речь. И вместо использования готовых компонентов для хэширования использует побитовые операции на 1C.
http://forum.infostart.ru/forum86/topic136695/
http://infostart.ru/public/99739/ А ты говоришь про скорость

Народ в большинстве случаев варится в своем тесном мирке. Разработка SQL серверов и Вэб серверов весьма нетривиальная задача, которая для среднестатистического программиста далека как Марс от Земли.
и солнце б утром не вставало, когда бы не было меня
Re[24]: Java vs C# vs C++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.10.15 07:41
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


EP>>>>>А причём востребованность?

S>>>> При том, что пишут на тех языках на которых удобнее и нужна меньшая квалификация,
EP>>>Пишут что? В каких случаях? Удобнее для чего?
S>> Удобнее для написания сайтов, учетных систем массовых задач.

EP>И? Это единственные существующие задачи?

Такими задачами занимаются большинство программистов.

S>>>>а не на тех, что быстрее, но менее удобный.

EP>>>Для быстрого кода C++ удобный
S>> Еще раз повторю формулу экономической целесообразности
S>>(стоимость разработки) + (стоимость железа) для достижения одинаковой вычислительной мощности

EP>ОК, повторил, что ты этим хочешь сказать? (причем это одна из возможных формул, а не единственная)

EP>Да, целесообразность тоже нужно учитывать, с этим не спорю — кроме этого ты что-то ещё подразумевал?
К тому, что нужны специалисты со снанием конкретного языка. Какова доля программистов С++ в программистском мире?
А задач таких полно. И нужна скорость решения, а не скорость выполнения. У меня куча отчетов где скорость новых быстрее раз в 10.
Но например этот отчет бухгалтер делает раз в месяц. И он может подождать даже пол часа, занимаясь другой работой.
Иногда нужно быстро решить задачу, а сколько она будет выполняться не имеет значения.

S>>>>Я делал тесты на C#,Delphi http://rsdn.ru/forum/philosophy/555869.flat
Автор: VladD2
Дата: 02.03.04
. Просил сделать на С++ но народ не стал делать.

EP>>>Я уже и в этой теме много раз сказал, что если брать низкоуровневый код, типа как по твоей ссылке — где сортируется конкретный тип массива, с конкретным типом элементов, с конкретным типом предиката — то скорость на Java/C# будет очень близкой к C++.
EP>>>Основное преимущество по скорости у C++ в другом — в том что можно подняться на более высокий уровень абстракции не теряя, либо практически не теряя скорости.
S>> Ну в Net есть дженерики. Да они медленнее примерно в 2 раза за счет отсутствия инлайна.

EP>Это цифра с потолка.


EP>Во-первых отсутствие инлайна это прежде всего не стоимость непосредственно вызова, а отсутствие возможности оптимизировать большой кусок кода целиком.

поскипано. Это все понятно. Я не стал выводить выкладки. Понятно, что факторов очень много. Кстати по поводу использования структур.
http://rsdn.ru/forum/dotnet/415352.1
Автор: Serginio1
Дата: 20.10.03
Смысл в том, что если прошла сборка мусора, то джит собирает 0 поколения, а старые поколения если ссылки на них не менялись не трогает. А вот для если они менялись, то он их помечает и в итоге происходят тормоза. Поэтому Хэш таблицы например сделаны на массиве структур. Но при этом и сборщики мусора совершенствуются

Это
EP>>>Во-первых, это всего лишь один вариант целесообразности. Например железо может быть уже на миллионах устройств клиентов — и вместо покупки нового девайса, они пойдут к конкурентам, софт которых работает на текущем железе, пусть и стоимость его разработки была выше.

Или если таких приложений будет 1-2 он уйдет к тем у кого 1000-100000. Везде нужна экономическая целесообразность. Поэтому и существуют С++,С# и 1С.



S>>В реальных приложениях занятость процессора очень далека до 100%. Большинство время уходит на ожидание запроса к SQL, HTTP запроса, итд.


EP>Старая шарманка "всё в базу упираются"

EP>У меня в продукте вообще нет никакой никакого SQL и никаких HTTP, не надо проецировать какие-то свои личные задачи на всех, и делать далеко идущие выводы

И какова занятость процессора в твоих приложениях?
S>>Заметь, что в браузерах победил JS. Опять же какая разница для пользователя в ожидании 0.1 или 0.2 секунды.

EP>ASM.JS достаточно быстрый. Я даже выше приводил ссылку. C++ скомпилированный в ASM.JS обогнал C# в своей родной среде практически в два раза

EP>JavaScript, в веб-браузере, Карл!
В итоге все зависит от компилятора. Например TS тоже транслируется в JS и ничто не мешает транслировать в более оптимальный. Здесь проблема не языков а компиляторов которые совершенствуются.

S>> Берем какую то задачу и программируем. Зная ЗП среднестатистического программиста вычисляем стоимость. Затем берем тесты и вычисляем стоимость железа для достижения одинакового результата.


EP>Дальше-то ты какой вывод делаешь?

Вывод в том, что существование тех или иных языков или платформ вызвано не только скоростью выполнения, и от количества специалистов. А количество специалистов зависит от сложности выполнения той или иной задачи и зарплаты за её выполнение. И так по кругу. Рынок рулит
и солнце б утром не вставало, когда бы не было меня
Re[25]: Java vs C# vs C++
От: Evgeny.Panasyuk Россия  
Дата: 03.10.15 10:03
Оценка:
Здравствуйте, Serginio1, Вы писали:

EP>>>>>>А причём востребованность?

S>>>>> При том, что пишут на тех языках на которых удобнее и нужна меньшая квалификация,
EP>>>>Пишут что? В каких случаях? Удобнее для чего?
S>>> Удобнее для написания сайтов, учетных систем массовых задач.
EP>>И? Это единственные существующие задачи?
S> Такими задачами занимаются большинство программистов.

ОК, дальше-то какой вывод?

S>>> Еще раз повторю формулу экономической целесообразности

S>>>(стоимость разработки) + (стоимость железа) для достижения одинаковой вычислительной мощности
EP>>ОК, повторил, что ты этим хочешь сказать? (причем это одна из возможных формул, а не единственная)
EP>>Да, целесообразность тоже нужно учитывать, с этим не спорю — кроме этого ты что-то ещё подразумевал?
S> К тому, что нужны специалисты со снанием конкретного языка.

Когда как. Бывает заказчику всё равно какой там язык, главное результат.

S>Какова доля программистов С++ в программистском мире?


Не знаю, но уж точно не маленькая. И не только из-за его скорости или других удобств, например у него самый широкий из mainstream охват по платформам, и например есть ещё и legacy.

S>А задач таких полно. И нужна скорость решения, а не скорость выполнения.


С этим никто не спорил, и в общем-то это очевидные вещи.

S>У меня куча отчетов где скорость новых быстрее раз в 10.

S>Но например этот отчет бухгалтер делает раз в месяц. И он может подождать даже пол часа, занимаясь другой работой.

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

S>Иногда нужно быстро решить задачу, а сколько она будет выполняться не имеет значения.


Расшифруй.

S> поскипано. Это все понятно. Я не стал выводить выкладки. Понятно, что факторов очень много.


Много, и тормоза отнюдь не двукратные.

S>Кстати по поводу использования структур.

S>http://rsdn.ru/forum/dotnet/415352.1
Автор: Serginio1
Дата: 20.10.03
Смысл в том, что если прошла сборка мусора, то джит собирает 0 поколения, а старые поколения если ссылки на них не менялись не трогает. А вот для если они менялись, то он их помечает и в итоге происходят тормоза. Поэтому Хэш таблицы например сделаны на массиве структур. Но при этом и сборщики мусора совершенствуются


А я вообще забыл упомянуть тормоза от GC, это отдельная тема. Тормоза для pointer semantics style есть даже без учёта бОльшей нагрузки на GC.
И если активно использовать pointer semantics в C++ — то и там появятся точно такие же тормоза как и в Java/C#/etc: пример
Автор: Evgeny.Panasyuk
Дата: 18.10.14
— заменили плотно упакованные элементы, на структуру ссылочного вида — в результате разница по скорости 208.6x, и это без учёта работы менеджера памяти.
Но в C++ default это value semantics, и там его намного легче использовать чем в языках заточенных под pointer semantics.

S>Это

EP>>>>Во-первых, это всего лишь один вариант целесообразности. Например железо может быть уже на миллионах устройств клиентов — и вместо покупки нового девайса, они пойдут к конкурентам, софт которых работает на текущем железе, пусть и стоимость его разработки была выше.
S> Или если таких приложений будет 1-2 он уйдет к тем у кого 1000-100000.

Не понял этого тезиса.

S>Везде нужна экономическая целесообразность. Поэтому и существуют С++,С# и 1С.


Нужна, я этого не отрицал.

S>>>В реальных приложениях занятость процессора очень далека до 100%. Большинство время уходит на ожидание запроса к SQL, HTTP запроса, итд.

EP>>Старая шарманка "всё в базу упираются"
EP>>У меня в продукте вообще нет никакой никакого SQL и никаких HTTP, не надо проецировать какие-то свои личные задачи на всех, и делать далеко идущие выводы
S> И какова занятость процессора в твоих приложениях?

Это надо у клиентов спросить, так как это библиотека
А вообще не понятно к чему вопрос про занятость, даже если он в среднем занят на доли процента, это не делает не нужным быстрое железо, и быстрый софт.
Например женщина в среднем вынашивает ребёнка в течении скажем 2% от продолжительности своей жизни, размазать этот процент по всем годам никак не получится, и она не сможет родить ребёнка через день после зачатия

S>>>Заметь, что в браузерах победил JS. Опять же какая разница для пользователя в ожидании 0.1 или 0.2 секунды.

EP>>ASM.JS достаточно быстрый. Я даже выше приводил ссылку. C++ скомпилированный в ASM.JS обогнал C# в своей родной среде практически в два раза
EP>>JavaScript, в веб-браузере, Карл!
S> В итоге все зависит от компилятора. Например TS тоже транслируется в JS и ничто не мешает транслировать в более оптимальный. Здесь проблема не языков а компиляторов которые совершенствуются.

Как раз таки проблема в языках, об этом и речь. Высокоуровневый C++ быстрый отнюдь не только потому что для него оптимизаторы лучше, а во многом потому что в самом языке есть бесплатные, или практически бесплатные абстракции и высокоуровневые инструменты.

S>>> Берем какую то задачу и программируем. Зная ЗП среднестатистического программиста вычисляем стоимость. Затем берем тесты и вычисляем стоимость железа для достижения одинакового результата.

EP>>Дальше-то ты какой вывод делаешь?
S> Вывод в том, что существование тех или иных языков или платформ вызвано не только скоростью выполнения

В целом да, а в частности нет. Например сделали язык заточенный под скорость, потому что нужна скорость — вопрос, чем вызвано его существование?

S>А количество специалистов зависит от сложности выполнения той или иной задачи и зарплаты за её выполнение. И так по кругу. Рынок рулит


Дальше что? Это накладывает вето на любое сравнение скорости на разных языках?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.