Здравствуйте, CoderMonkey, Вы писали:
I>>Непонятно, что ты в это вкладываешь. Функциональность, внешний вид, количество строчек кода ?
CM>Функциональность, естественно.
I>>Сначала ты взялся соревноваться с Excel и googlesheets. Ты передумал ?
CM>И не брался Какой ты все-таки унылый изворотливый казуист.
Цитирую некоего CoderMonkey: "Открываешь гугловский редактор таблиц ..."
Щас ты наверное скажешь, что не предлагал меряться с гуглошитами ?
I>>И как ты это будешь сравнивать ? Изложи методику, а то судя по предыдущему "примеру" сортировки, ты вообще в замерах ничего не понимаешь.
CM>Враньё.
Всю работу по сравнению проделали ровно три человека и тебя в их числе нет. А вот ошибочка в твоей сортировке — есть
Итого — где методика ?
Здравствуйте, Ikemefula, Вы писали:
I>Разумеется, потому что ты в фоксе запускаешь. Чего ты хотел от вымирающей платформы ? В Интернет Эксплорере результат еще хуже будет.
I>Частота процессора, турбо-режим, частота памяти — все это дает слишком большое влияние.
Не в разы большое.
I>Важно, что ты не пробовал ни того, ни другого, но перешел к обвинениям.
Что поделаешь, если ты все время юлишь и выкручиваешься. Давай конкретные описания, что и как запускать — тогда и обвинений не будет. А то мой телепатический шар давно сломался.
Здравствуйте, Ikemefula, Вы писали:
I>Цитирую некоего CoderMonkey: "Открываешь гугловский редактор таблиц ..." I>Щас ты наверное скажешь, что не предлагал меряться с гуглошитами ?
Простой и быстрый тест. Или, как вариант, открываешь Янус и сравниваешь расход памяти с тем же топиком — чем больше топик, тем лучше — в браузере.
Тебе непонятно, что такое простой и быстрый тест и зачем он нужен?
I>Всю работу по сравнению проделали ровно три человека и тебя в их числе нет.
Зато ты, конечно же, есть
I>А вот ошибочка в твоей сортировке — есть
Про которую ты очень много вопил, но так и не смог продемонстрировать.
Здравствуйте, Ikemefula, Вы писали:
I>>>Я такое наблюдал и вживую, и со стороны. Оптимизации это всегда усложнения. Соответственно стоимость поддержки растет. Отсюда и выражение про "premature optimisation". Т.е. выше уровня поддерживаемости не прыгнешь, это и есть потолок для оптимизаций, а вовсе не сам эффект.
A>>
"Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%."
A>>Будет надо — прыгнешь. На самый жуткий хардкор повесишь табличку "Не влезай — убьёт!", обернёшь каким-нибудь более-менее пристойным интерфейсом и обвесишь по периметру тестами. I>Ты почему то процитировал по английски то, что я сказал тебе по русски.
Ты стараешься распространить правила написания условных 97% кода на оставшиеся 3%. По твоей логике не существует никаких 97% и 3%, а существуют только 100%, где всецело правит мейнтенанс. Но если ты не заставишь эти критические 3% работать так, как они должны работать, можешь "выбросить нахрен проект и пилить на другом языке, архитектуре и т.д." И удачи тебе переписать 100% проекта на С++ со всеми фичами за в два раза меньшее время, вместо того чтобы немножко локально запачкаться в C#.
Здравствуйте, CoderMonkey, Вы писали:
A>>Я сравню скорость получения желаемого результата на разных языках. Польза очевидна — на каком языке задача решается быстрее, тот и подходит лучше для решения похожих задач, когда скорость важна. CM>"Решается" как? Быстрее написать прототип? Быстрее написать полноценный релиз? Быстрее искать и фиксить баги?
Код быстрее работает. Если нам интересна не скорость работы кода, а что-то другое, мы бы не стали тут измерять и обсуждать именно скорость работы кода. Я бы не стал.
A>>Если подгонять реализации решения задачи на разных языках друг под друга и потом их сравнивать, то пользы от такого сравнения я уже не вижу. CM>Можно и не подгонять. Но тогда для небольшого бенчмарка слишком велика вероятность, что одна мелкая оптимизация очень сильно исказит результат — в случае с встроенной сортировкой, например. А писать большой и объемистый бенчмарк — долго и сложно. CM>Так что, проще всё же взять и сравнить по возможности сравнимое.
Это похоже на поиски там, где светло, а не там, где потеряли.
Если под "идеальным результатом" понимать результат сравнения полного решения задачи на разных языках (сравнить две готовые программы, по итогам одну выкинуть, вторую использовать), то я твою мысль понимаю так: вместо того чтобы допустить в бенчмарках возможное случайное искажение (отклонение их результата от идеального), ты предлагаешь внести в бенчмарки намеренные оторванные от реальности искажения в надежде, что таким образом результат окажется менее искажён. Я думаю, что это иррационально.
Здравствуйте, alexzzzz, Вы писали:
A>Код быстрее работает. Если нам интересна не скорость работы кода, а что-то другое, мы бы не стали тут измерять и обсуждать именно скорость работы кода. Я бы не стал.
В чем и насколько? Как насчет потребления памяти?
A>Если под "идеальным результатом" понимать результат сравнения полного решения задачи на разных языках (сравнить две готовые программы, по итогам одну выкинуть, вторую использовать), то я твою мысль понимаю так
Нет. Моя мысль — по возможности, исследовать не производительность встроенных функций, а производительность языка как такового.
"Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%."
A>>>Будет надо — прыгнешь. На самый жуткий хардкор повесишь табличку "Не влезай — убьёт!", обернёшь каким-нибудь более-менее пристойным интерфейсом и обвесишь по периметру тестами. I>>Ты почему то процитировал по английски то, что я сказал тебе по русски.
A>Ты стараешься распространить правила написания условных 97% кода на оставшиеся 3%. По твоей логике не существует никаких 97% и 3%, а существуют только 100%, где всецело правит мейнтенанс.
Именно. Все части проекта должны обладать этим свойством. Оптимизируются самые критичные вещи. Раз они критичные, то и майнтенас в них обязательное условие. Сам подумай — вдруг понадобится еще перформанса выжать, а майнтенанс уже утерян. Каким чудом ты выжимать будешь ? Наугад строчки фиксить, не читая, не вникая и надеясь, что оно не только скомпилруется но и заработает с нужными свойствами ?
>Но если ты не заставишь эти критические 3% работать так, как они должны работать,
Майнтенанс означает, что ты можешь и прочитать, и понять, и модифицировать. И твои примеры "огородить", "не влезай" они целиком про майнтенанс.
Если у тебя нет такого свойства, то код неуправляемый, и нет никакой гарантии, что ты хоть чтото выпустишь.
Здравствуйте, CoderMonkey, Вы писали:
I>>Цитирую некоего CoderMonkey: "Открываешь гугловский редактор таблиц ..." I>>Щас ты наверное скажешь, что не предлагал меряться с гуглошитами ?
CM>Простой и быстрый тест. Или, как вариант, открываешь Янус и сравниваешь расход памяти с тем же топиком — чем больше топик, тем лучше — в браузере.
Что ты называешь "память" ? Working Set, Virtual Size ?
CM>Тебе непонятно, что такое простой и быстрый тест и зачем он нужен?
У теста есть цель, критерии сравнения, т.е. та самая методика, про которую ты ничего сказать не можешь. Вроде обсуждаем дотнет и джаваскрипт, а ты лезешь с экселем, потому перепрыгиваешь на янус. Как это понимать ?
Янус и форум в браузере решают совершенно разые задачи, они даже слабо похожи. Общего там только UI.
I>>А вот ошибочка в твоей сортировке — есть CM>Про которую ты очень много вопил, но так и не смог продемонстрировать.
Ты видишь фикс, но не можешь его минимально проверить ? Или тебе непонятно, что у тебя там происходит ? Задавай нормальные вопросы, глядишь, получишь нормальные ответы.
Здравствуйте, CoderMonkey, Вы писали:
I>>Частота процессора, турбо-режим, частота памяти — все это дает слишком большое влияние.
CM>Не в разы большое.
Я тебе страшное скажу — все что выше статистической погрешности надо учитывать отдельно. Алё, ты что, не видишь, как отличаются твои и мои цифры версии C# ?
I>>Важно, что ты не пробовал ни того, ни другого, но перешел к обвинениям.
CM>Что поделаешь, если ты все время юлишь и выкручиваешься. Давай конкретные описания, что и как запускать — тогда и обвинений не будет. А то мой телепатический шар давно сломался.
Здравствуйте, alexzzzz, Вы писали:
CM>>"Решается" как? Быстрее написать прототип? Быстрее написать полноценный релиз? Быстрее искать и фиксить баги?
A>Код быстрее работает. Если нам интересна не скорость работы кода, а что-то другое, мы бы не стали тут измерять и обсуждать именно скорость работы кода. Я бы не стал.
Скорость работы какого кода, библиотечного, рукописного ? Если у тебя обычный код отличатется по скорости скажем, раза в два, то у тебя узких мест в софтине будет не 3 процента, а 33.
A>Если под "идеальным результатом" понимать результат сравнения полного решения задачи на разных языках (сравнить две готовые программы, по итогам одну выкинуть, вторую использовать), то я твою мысль понимаю так: вместо того чтобы допустить в бенчмарках возможное случайное искажение (отклонение их результата от идеального), ты предлагаешь внести в бенчмарки намеренные оторванные от реальности искажения в надежде, что таким образом результат окажется менее искажён. Я думаю, что это иррационально.
Посмотри внимательно на цитату, что ты привел, про 97% и 3%. 97% пишутся на любом языке одинаково, потому что программист всегда один и тот же, он не может начать думать в два раза лучше, если ты ему другой язык дашь.
Здравствуйте, CoderMonkey, Вы писали:
A>>Код быстрее работает. Если нам интересна не скорость работы кода, а что-то другое, мы бы не стали тут измерять и обсуждать именно скорость работы кода. Я бы не стал. CM>В чем и насколько? Как насчет потребления памяти?
А что с потреблением памяти? Можно оптимизировать не на скорость, а на потребление памяти. Хотя довольно часто одно автоматически тащит за собой другое. Иногда, правда, наоборот.
Первый вопрос я не понял, к чему относится.
A>>Если под "идеальным результатом" понимать результат сравнения полного решения задачи на разных языках (сравнить две готовые программы, по итогам одну выкинуть, вторую использовать), то я твою мысль понимаю так CM>Нет. Моя мысль — по возможности, исследовать не производительность встроенных функций, а производительность языка как такового.
Сферической производительности языка в вакууме не существует. Она зависит от решаемой задачи. Какие-то типы задач лучше ложатся на язык, какие-то хуже. В одних примерах разница в скорости между C# и C++ на уровне погрешности измерения, в других C++ примерно в полтора раза быстрее, в третьих в 10 раз, если у компилятора C++ "пасьянс сошёлся", а у C# нет.
Вне поставленной задачи мерять скорость смысла нет, результат не будет применим к реальным задачам. А если задача в общем виде есть, примерно понятно, какими способами её можно решать и можно из них выбирать наиболее эффективные.
Здравствуйте, Ikemefula, Вы писали:
A>>Код быстрее работает. Если нам интересна не скорость работы кода, а что-то другое, мы бы не стали тут измерять и обсуждать именно скорость работы кода. Я бы не стал. I>Скорость работы какого кода, библиотечного, рукописного ?
Того, который быстрее переделывает входные данные в выходные.
I>Если у тебя обычный код отличатется по скорости скажем, раза в два, то у тебя узких мест в софтине будет не 3 процента, а 33.
33% узких мест не будет никогда. Как ты сам знаешь, скорость работы 97% кода никого не парит.
A>>Ты стараешься распространить правила написания условных 97% кода на оставшиеся 3%. По твоей логике не существует никаких 97% и 3%, а существуют только 100%, где всецело правит мейнтенанс.
I>Именно. Все части проекта должны обладать этим свойством. Оптимизируются самые критичные вещи. Раз они критичные, то и майнтенас в них обязательное условие. Сам подумай — вдруг понадобится еще перформанса выжать, а майнтенанс уже утерян. Каким чудом ты выжимать будешь?
Гм...
1. Ты знаешь, что на работу критических 3% кода выделен строго ограниченный бюджет времени.
2. Ты не будешь любыми средствами укладывать его в бюджет, потому что а вдруг в будущем бюджет ещё уменьшится и оптимизировать уже оптимизированный код окажется сложно.
Да ты в существующий бюджет уже не вписался с таким подходом. Критические 3% не работают как надо, продукт нерабочий, будущее не наступит.
CM>Нет. Моя мысль — по возможности, исследовать не производительность встроенных функций, а производительность языка как такового.
Язык один производительность разная
Здравствуйте, alex_public, Вы писали: _>Ага, работает, подтверждаю. ) Кстати, но мне кажется, что всё же не совсем корректно сравнивать такие реализации, потому что в реальной жизни большинство программистов будет всё же использовать готовые функции. Так что я бы представил результаты всех этих наших измерений приблизительно так:
Табличка
время заполнения массива, с помощью стандартных функций, мс
время заполнения массива, с помощью ручного кода, мс
JS
node
500
?
Firefox
200
?
C#
normal
500
200
server
380
100
C++
14
120
52
17
60
52
Boost
49
52
Новые циферки для таблички:
Total: 128 ms
Total: 86 ms
Total: 82 ms
Total: 81 ms
Total: 82 ms
GC: 7 6 6
C#, один поток
using System;
using System.Diagnostics;
namespace QuickSort
{
public class Program
{
public static void Main()
{
const int ARRAY_SIZE = 1000 * 1000;
var watch = new Stopwatch();
for (var i = 0; i < 5; i++)
{
GC.Collect();
watch.Restart();
var vals = new TestStruct[ARRAY_SIZE];
for (int j = 0; j < vals.Length; j++)
{
vals[j] = TestStruct.Create();
}
watch.Stop();
Console.WriteLine($"Total: {watch.ElapsedMilliseconds} ms");
}
Console.WriteLine($"GC: {GC.CollectionCount(0)} {GC.CollectionCount(1)} {GC.CollectionCount(2)}");
Console.ReadLine();
}
}
internal unsafe struct TestStruct
{
public string id;
public string value;
private static readonly Random random = new Random();
public static TestStruct Create()
{
TestStruct item;
item.id = GenerateRandomNumber();
item.value = GenerateRandomNumber();
return item;
}
public override string ToString() => id;
private static string GenerateRandomNumber()
{
int num = random.Next(100_000_000);
var result = new string('0', 10);
fixed (char* p = result)
{
*(p + 2) = (char)('0' + num % 10); num /= 10;
*(p + 3) = (char)('0' + num % 10); num /= 10;
*(p + 4) = (char)('0' + num % 10); num /= 10;
*(p + 5) = (char)('0' + num % 10); num /= 10;
*(p + 6) = (char)('0' + num % 10); num /= 10;
*(p + 7) = (char)('0' + num % 10); num /= 10;
*(p + 8) = (char)('0' + num % 10); num /= 10;
*(p + 9) = (char)('0' + num);
}
return result;
}
}
}
Здравствуйте, Ikemefula, Вы писали:
I>У теста есть цель, критерии сравнения, т.е. та самая методика, про которую ты ничего сказать не можешь. Вроде обсуждаем дотнет и джаваскрипт, а ты лезешь с экселем, потому перепрыгиваешь на янус. Как это понимать ?
Быстрый и простой тест. Что конкретно тебе здесь непонятно? Незнакомые буквы, слишком сложные слова?
>Ты видишь фикс, но не можешь его минимально проверить ? Или тебе непонятно, что у тебя там происходит ? Задавай нормальные вопросы, глядишь, получишь нормальные ответы.
Я вижу "фикс", но не вижу его необходимости. Ты можешь ее продемонстрировать или будешь и дальше балаболить?
Здравствуйте, alexzzzz, Вы писали:
A>А что с потреблением памяти? Можно оптимизировать не на скорость, а на потребление памяти. Хотя довольно часто одно автоматически тащит за собой другое. Иногда, правда, наоборот.
Ну-ну. Остается только удивляться, почему выжрать пару сотен мегабайт для любого мелкого сайтеца — это уже совершенно нормально.
Здравствуйте, CoderMonkey, Вы писали:
I>>У теста есть цель, критерии сравнения, т.е. та самая методика, про которую ты ничего сказать не можешь. Вроде обсуждаем дотнет и джаваскрипт, а ты лезешь с экселем, потому перепрыгиваешь на янус. Как это понимать ?
CM>Быстрый и простой тест. Что конкретно тебе здесь непонятно? Незнакомые буквы, слишком сложные слова?
Мне неизвестны методы и критерии сравнения. Я задал прямые вопросы и ты нигде не дал ни одного ответа.
>>Ты видишь фикс, но не можешь его минимально проверить ? Или тебе непонятно, что у тебя там происходит ? Задавай нормальные вопросы, глядишь, получишь нормальные ответы.
CM>Я вижу "фикс", но не вижу его необходимости. Ты можешь ее продемонстрировать или будешь и дальше балаболить?
Для тебя стараться нет никакого желания. Ты клянчил портирование в JS, а когда получил его, начал кидаться дерьмом. На кой ляд мне тебе помогать, объясни внятно ?
Здравствуйте, CoderMonkey, Вы писали:
I>>Надо объяснять, что вставить в file.js ?
CM>Ага. И попробуй дать код, который хотя бы не вылетает с ошибкой.
То есть, ты за две недели не смог const на var или let переделать ?
Или две недели не мог взять обновленный код из сообщения ?
Выходит, твои обвинения были не просто голословны, а вообще враньё, ибо ты не смог ничего запустить ?
Ты внятно изъясняться умеешь ? По факту ты только орешь, что где то чтото не работает. Я вот только что взял код из сообщения, вставил в хром — всё палит. Ты похоже не способен ни проблему описать, ни даже клипбордом пользоваться
I>>Надо объяснять, как запустить хром, вызвать DevTools и что такое консоль ?
CM>Почему именно хром и нод, а не firefox?
Движок v8 доминирует среди себе подобных, а фокс это вымирающая платформа. v8 есть не просто везде, он почти везде доминирует.
Здравствуйте, Ikemefula, Вы писали:
I>Для тебя стараться нет никакого желания. Ты клянчил портирование в JS, а когда получил его, начал кидаться дерьмом.
А кто виноват, что твои цифры в разы расходятся?
I> На кой ляд мне тебе помогать, объясни внятно ?
Ты и так никогда ничего не объяснял. Зачем начинать?