|
ref и out параметры
|
|||
---|---|---|---|
#18+
Мой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо. Кто что думает по этому поводу? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 16:33 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyМой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо. Кто что думает по этому поводу? бред, так ему и передай :) он видимо не пользуется TryGetValue или TryParse, это же low level! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 16:37 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Еще говорит, сложно читать и мешает композиции. Насчет первого это его личная проблема, мне читается прекрасно, а насчет композиции мне непонятно, о чем речь. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 16:49 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariy, Пример его варианта дайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 17:00 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Дело не в лоулевеле По сути метод с out/ref это метод с side effect, что не особо хорошо. Единственное, наверное, разумное применение, что я им вижу - это как раз упомянутый TryDoSomething(out blaBalBla). И то, можно заметить, что большинство таких стандартных методов всегда ходят парами - один с возможным ексепшеном, другой с "TryXXX". ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 17:32 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Насчет композиции тоже бред, как выяснилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 17:48 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Petro123Antonariy, Пример его варианта дайте.если нужно вернуть несколько значений, его вариант - наплодить классов. кортежи пока не используем, потому что сидим на 4м фреймворке. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 17:54 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatПо сути метод с out/ref это метод с side effect, что не особо хорошо.Слишком абстрактно. Какие именно эффекты? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 17:55 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariy, Вон, в java вообще нельзя два выходных параметра. Но писать то неудобно с непривычки)) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 17:58 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyPetro123Antonariy, Пример его варианта дайте.если нужно вернуть несколько значений, его вариант - наплодить классов. кортежи пока не используем, потому что сидим на 4м фреймворке.значит он из java ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 17:59 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariyесли нужно вернуть несколько значений, его вариант - наплодить классов. кортежи пока не используем, потому что сидим на 4м фреймворке. В этом есть разумное зерно. Если метод возвращает сразу несколько значений, то, скорее всего эти значения достаточно тесно связаны и класс для них смысл имеет. Если они вообще никак не связаны, значит с методом что-то нездоровое - скорее всего нарушение single responsibility. Лично я кортежи использую обычто только как замену анонимным классам (чаще всего просто запись короче получается), например: Код: c# 1. 2. 3. 4.
Из метода кортежи я бы возвращать не стал. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 18:27 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariy, А var он использует? В java позавчера только появилось))) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 18:49 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariyкортежи пока не используем, потому что сидим на 4м фреймворке.4-й фреймворк никак не мешает использованию кортежей. Вот буквально недавно Випросу пример приводил ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 20:10 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Shocker.ProAntonariyкортежи пока не используем, потому что сидим на 4м фреймворке.4-й фреймворк никак не мешает использованию кортежей. Вот буквально недавно Випросу пример приводил 21857815 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2019, 20:14 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Petro123В java позавчера только появилось))) А тебе что за печаль? Тебя же из жавы поперли, скоро из дотнета попрут - пойдешь на FoxPro 2.6 свои большие десктопы создавать ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 07:07 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthat, Таблеточек с утра выпей. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 07:16 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatА тебе что за печаль?Petro123Таблеточек с утра выпей.За продолжение Петя-болла пострадают оба его участника. Я предупредил ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 08:52 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatДело не в лоулевеле По сути метод с out/ref это метод с side effect, что не особо хорошо. Единственное, наверное, разумное применение, что я им вижу - это как раз упомянутый TryDoSomething(out blaBalBla). И то, можно заметить, что большинство таких стандартных методов всегда ходят парами - один с возможным ексепшеном, другой с "TryXXX". А как же Deconstruct ? А как же ref struct, readonly struct, readonly ref struct? Да и по in кодревьюер походу еще не чухает. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 09:34 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyPetro123Antonariy, Пример его варианта дайте.если нужно вернуть несколько значений, его вариант - наплодить классов. кортежи пока не используем, потому что сидим на 4м фреймворке.объективно, у него нет оснований. Так что выпей с ним пиво. В шарпе еще много нового будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 09:40 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatPetro123В java позавчера только появилось))) А тебе что за печаль? Тебя же из жавы поперли, скоро из дотнета попрут - пойдешь на FoxPro 2.6 свои большие десктопы создавать к слову, попробуй сейчас найди мастера, чтобы на фоксе сделал что-то ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 09:47 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyМой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо. Кто что думает по этому поводу? goto бояться - в лес не ходить! это лучшее, что есть в разных языках ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 09:50 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Ролг Хупин, Увы. У нас на работе java, шарп и c++ ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 09:50 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyЕще говорит, сложно читать и мешает композиции. Насчет первого это его личная проблема, мне читается прекрасно, а насчет композиции мне непонятно, о чем речь. он, видимо, из разжалованных художников ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 09:51 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Ролг Хупинэто лучшее,перебор)) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 09:51 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Ролг Хупинgoto бояться - в лес не ходить! это лучшее, что есть в разных языках Если использовать кодогенерацию, то goto самый то. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 09:53 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВкодогенерациютоже пребор. Но ставлю имхо) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 10:02 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Shocker.ProAntonariyкортежи пока не используем, потому что сидим на 4м фреймворке.4-й фреймворк никак не мешает использованию кортежей. Вот буквально недавно Випросу пример приводилИспользовать класс Tuple можно, но синтаксические кортежи не работают, они требуют поддержки какими-то другими классами, которых в 4м нет. Можно использовать какое-то дополнение, но не хочется, в обозримом будущем переедем на фреймворк поновее. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 10:59 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
автор сидим на 4м фреймворке.к тому же на client profile ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 11:01 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariy, нужно только выбрать соответствующую версию языка ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 11:58 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyИспользовать класс Tuple можно, но синтаксические кортежи не работают, они требуют поддержки какими-то другими классами, которых в 4м нет.Этот класс ValueTuple - его нет и в других фреймворках, не только в 4-м. При этом он прекрасно совместим и ставится из нугета, причем практически автоматом, как только начинаешь использовать именованные кортежи Antonariyно синтаксические кортежи не работаютя ж даже скриншот привел, что работаютAntonariyк тому же на client profileда пофиг. Этот, как я сказал, отдельный класс и синтаксис языка. К фреймворку не имеет отношения. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 16:59 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Shocker.Pro, В общем-то, туплы (которые с красивым синтаксисом) появились в C# 7, а его в старом фреймворке может и не быть (он, емнип, шел с минимум 4.6). Другое дело, что можно спокойно поставить новый фреймворк с ним, а собирать им для старого фреймворка (поставить в свойствах проекта Target Framework). Есть правда с этим засада при работе в команде - у кого-нибудь некрофила может проект с вашим кодом не собраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 18:09 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Shocker.Pro, Я имею в виду, не класс Tuple<T1, T2> и подобные, а поддержку конструкций типа Код: c# 1.
(она на самом деле именно в Tuple<string, string> компилятором и преобразуется) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 18:15 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatВ общем-то, туплы (которые с красивым синтаксисом) появились в C# 7, а его в старом фреймворке может и не быть....Я имею в виду, не класс Tuple<T1, T2> и подобные, а поддержку конструкций типа мля, я же внятно сказал ValueTuple. И ссылку дал: 21857815 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 18:39 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthat(она на самом деле именно в Tuple<string, string> компилятором и преобразуется)нет ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 18:39 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Shocker.ProfkthatВ общем-то, туплы (которые с красивым синтаксисом) появились в C# 7, а его в старом фреймворке может и не быть....Я имею в виду, не класс Tuple<T1, T2> и подобные, а поддержку конструкций типа мля, я же внятно сказал ValueTuple. И ссылку дал: 21857815 Все верно. У тебя таргетфреймворк 4, а компилятор стоит уже 7-й (это в настройках билда "Advanced" можно посмотреть или изменить). А у ТС может просто компилятора достаточно нового не быть. Мы сейчас точно так же стали, например, кое-что уже под коре 2 собирать на C# 8. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 18:43 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Shocker.Profkthat(она на самом деле именно в Tuple<string, string> компилятором и преобразуется)нетОчень важное отличие, на котором ты проколешься, раз думаешь, что именованные кортежи преобразуются в Tuple - это то, что именованный кортеж является структурой, а не классом, как Tuple. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 18:44 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatВсе верно. У тебя таргетфреймворк 4, а компилятор стоит уже 7-й (это в настройках билда "Advanced" можно посмотреть или изменить). А у ТС может просто компилятора достаточно нового не быть. Мы сейчас точно так же стали, например, кое-что уже под коре 2 собирать на C# 8.Я читаю то, что было написано и не более: Antonariyкортежи пока не используем, потому что сидим на 4м фреймворке. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 18:46 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Shocker.Pro, Ну я ими почти не пользуюсь, т.ч. таких ньюансов не особо знаю. Но один черт, оно преобразуется в чисто библиотечный тип данных, который, как ты уже упоминал ставится под любой четвертый фреймворк пакетом. Просто с более старым компилятором придется этот тип данных использовать напрямую, а с новым можно более удобным синтаксисом писать. Вот попробуй в настройках проекта переключится на C# 6 и оно уже не соберется. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 18:50 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatПросто с более старым компилятором придется этот тип данных использовать напрямую, а с новым можно более удобным синтаксисом писать. Вот попробуй в настройках проекта переключится на C# 6 и оно уже не соберется.это ежу понятно, но речь-то не об этом ))) возможно люди ограничивают себя просто по незнанию ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 19:58 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyМой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо. Кто что думает по этому поводу? Человеку больше заняться нечем видимо. Обоснование по типу "потому что зелёное", не нужно ему в кодревью. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 14:16 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyМой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо. Кто что думает по этому поводу? А можно увидеть ваш метод, в котором используются out и ref параметры? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 18:27 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Arm79, Выше уже просил. Конкретику не показывают. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 19:42 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariy, Вот если бы код твой ревьювер сказал бы, например, что out/ref нельзя использовать в асинхронных методах и при необходимости переделывать их на асинк будет сложно рефакторить, вот это был бы разумный довод. Опять же, ref действительно использовался в основном для поддержки работы с низкоуровневым АПИ, COM. Но это не касается out, который действительно очень полезен особенно вкупе с фичами C# 7, когда переменную можно объявить прям в out выражении. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 21:30 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
hVosttВот если бы код твой ревьювер сказал бы, например, что out/ref нельзя использовать в асинхронных методах А их и так нельзя использовать. Компилятор не даст. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 23:49 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthathVosttВот если бы код твой ревьювер сказал бы, например, что out/ref нельзя использовать в асинхронных методах А их и так нельзя использовать. Компилятор не даст.Ты вырвал фразу из контекста. hVostt на это и намекает во второй части предложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2019, 10:03 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
hVosttНо это не касается out, который действительно очень полезен особенно вкупе с фичами C# 7, когда переменную можно объявить прям в out выражении. Мне все-таки как-то сложно придумать ему какую-то полезность, кроме паттерна "bool TryXXXX(out foo)" - кстати, это как раз и есть случай использования out-ов, на который code analysis не ругается. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2019, 10:45 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Arm79AntonariyМой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо. Кто что думает по этому поводу? А можно увидеть ваш метод, в котором используются out и ref параметры?А какая разница? По смыслу - TryParse. Например, метод открытия файла, возвращающий успех/неуспех и текст с путем к файлу или текст ошибки (в зависимости от успеха). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2019, 20:09 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Ну или несколько разнородных объектов преобразовать в несколько объектов других родов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2019, 20:13 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariyметод открытия файла, возвращающий успех/неуспех и текст с путем к файлу или текст ошибки (в зависимости от успеха). А почему не предусмотрели такой механизм в платформе? )))) именно для файлов возможно и не нужно так ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2019, 20:28 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyНу или несколько разнородных объектов преобразовать в несколько объектов других родов. Это еще хуже, это имхо чистый exception ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2019, 20:28 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Arm79, Обязательно файл что ли? По факту это требуется возврат два, три значения сразу. Без компоновки в класс. Почему нет? Ну а ref конвейерная обработка. Я за свободу). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2019, 20:42 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyНапример, метод открытия файла, возвращающий успех/неуспех и текст с путем к файлу или текст ошибки (в зависимости от успеха). Звучит, как метод, который в зависимости от возвращаемого bool возвращает температуру на южном полюсе или цену на котлеты в соседнем бургеркинге. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2019, 22:03 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyМой кодревьюер постоянно клюет мне моск, что использовать ref и out плохо, это слишком low level по его выражению. Я считаю, что не использовать какую-то возможность языка из идейных соображений (исключая goto, но это ограничение хорошо обосновано) - тупо. если у тебя постоянно используется ref/out/Tuple в коде - то точно что-то не то в консерватории, скорее всего очень непродуманная структура кода и классов, методы делающие и возвращающие несвязанные вещи. Такой код невозможно нормально читать и сопровождать. Ревьювер должен не на сами конструкции указывать, а на более фундаментальные проблемы кода, приведшие к их использованию ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 03:39 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
stenfordесли у тебя постоянно да. Ключевое слово постоянно. Так же как cons, global и... размер метода в строках. Всему есть мера). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 07:28 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Petro123, Нет, не обязательно )) Я ж не говорю, что плохо. Поэтому предложил сам метод показать, а не "по аналогии", "что-то похожее", так как аналогии могут быть и неверны Ничего плохого в паттерне Try* нет, но справедливости ради следует отметить, что в в .net его применяют нечасто. В случае с файлом вполне можно применять, если, например, файл не ваш, а пользуетесь чьим то другим. И не знаете, снята или нет монопольная блокировка. Но и это не 100%, так как монопольно занятый файл приводит при попытке доступа к exception. Иногда есть смысл глушить исключение, а иногда нет. Без понимания контекста задачи нельзя однозначно сказать, хорошо это или плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 08:01 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Arm79, Еще пример, рекурсия. Очень удобен сабж в рекурсии. Еще пример, пересечение геометрии Type Intersect(out pnt1, out pn2... И т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 08:34 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Arm79Без понимания контекста задачи нельзя однозначно сказать, хорошо это или плохо.еще бы. Программирование это искусство а не ремесло (с))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 08:35 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Arm79 Ничего плохого в паттерне Try* нет, но справедливости ради следует отметить, что в в .net его применяют нечасто. Вообще он появился когда C# был беден на конструкции. В других языках применяется следующие. в GO что то типа Код: c# 1. 2. 3. 4. 5. 6.
В f# есть размеченные объединения, которые в итоге разворачиваются во что то подобное. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 10:11 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВВообще он появился когда C# был беден на конструкции.странная фраза. Ref, out это преимущество шарп. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 10:26 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Petro123Ref, out это преимущество шарп. in еще может быть ref и out скорее некий компромис, необходимый для взаимодействия с неупровляемым кодом. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 11:20 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Насколько я помню, как раз в GO применяют такую конструкцию из-за проблем с exception - точнее, из-за другой концепции обработки exception Так что говорить о "бедности" языковых конструкций C# некорректно ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 11:44 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Юз кейс я написал. Неуправляемый код у меня особенность чисто на деструктор. Да и зачем его неуправляемым делать). Поэтому передать по ссылке/указателю и выхолные бывает использую. Всё испрльзую кроме GOTO)))) Его только в батниках. Имхо ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 11:52 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Arm79Так что говорить о "бедности" языковых конструкций C# некорректно Я к тому, что шарп в последнее время обогатился конструкциями и так называемый паттерн TryXXXX пока в топку. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 12:08 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Petro123, Под неуправляемым кодом я имел ввиду именно неуправляемый, как ты это вызовешь без out? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 12:10 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВPetro123, Под неуправляемым кодом я имел ввиду именно неуправляемый, как ты это вызовешь без out?а я это называл когда то в дельфи win api32). OK ЕвгенийВпаттерн TryXXXX А чем давить исключения в цикле? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 12:38 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВшарп в последнее времялет 15 или лет 5 это последнее врнмя? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 12:39 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Petro123ЕвгенийВPetro123, Под неуправляемым кодом я имел ввиду именно неуправляемый, как ты это вызовешь без out?а я это называл когда то в дельфи win api32). OK Конкретно это не win api. Petro123ЕвгенийВпаттерн TryXXXX А чем давить исключения в цикле? Зачем их давить? Вообще исключения не самая легкая штука, если часто возникают случаи например не корректности данных, то их нужно валидировать другими способами, не доводя до бросания исключений. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 14:16 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatМне все-таки как-то сложно придумать ему какую-то полезность, кроме паттерна "bool TryXXXX(out foo)" - кстати, это как раз и есть случай использования out-ов, на который code analysis не ругается. Полезность великая. Достать значение из словаря или подобной структуре одним выражением, распарсить строку, любая попытка чего-либо. Иначе, придётся городить что-то типа возврата OperationResult с Payload, что не так уж и плохо, так как функционально и работает с async/await. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 14:36 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВЗачем их давить? Вообще исключения не самая легкая штука, если часто возникают случаи например не корректности данных, то их нужно валидировать другими способами, не доводя до бросания исключений.ты как будто не читал что я пишу. Я давлю именно в юз кейсе ЦИКЛА. Именно шаблоном tryXXX Знаешь ДРУГИЕ способы - рассказывай. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 14:52 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
hVosttПолезность великая. Достать значение из словаря или подобной структуре одним выражением, распарсить строку, любая попытка чего-либо. Ну так это и есть шаблон bool TryXXX(out ...), про который я писал. hVosttИначе, придётся городить что-то типа возврата OperationResult с Payload, что не так уж и плохо, так как функционально и работает с async/await. Тем более, что для таких случаев можно общий дженерик завести. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 16:44 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Как уже писали - неплохо было бы увидеть пример отбракованного кода. Сильно подозреваю, что там будет как почти всегда: "тупой тимлид гнобит юное дарование". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 16:47 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatКак уже писали - неплохо было бы увидеть пример отбракованного кода. Сильно подозреваю, что там будет как почти всегда: "тупой тимлид гнобит юное дарование". Отсутствует адекватное обоснование, при чём тут "гнобление"? Вся суть ревью это не только контроль качество кода, но и шаринг знаний. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 16:52 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
hVosttОтсутствует адекватное обоснование, при чём тут "гнобление"? Вся суть ревью это не только контроль качество кода, но и шаринг знаний. Ну так в исходном сообщение явно была жалоба на тяжелую жизнь. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 16:55 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatНу так в исходном сообщение явно была жалоба на тяжелую жизнь. Не думаю, что это является предметом обсуждения :) По крайне мере до тех пор, пока не станет ясно, что ТС не прав ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 17:15 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Никакой код с реф/аут отбракован не был, его утвердил тимлид. Сабж не любит напарник, ревьюят оба. Напарник внятно объяснить свою нелюбовь не смог, поэтому я попросил помощь зала, поскольку в голову никогда не приходило страдать такими вопросами. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 22:44 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
stenfordесли у тебя постоянно используется ref/out/Tuple в коде - то точно что-то не то в консерватории, скорее всего очень непродуманная структура кода и классов, методы делающие и возвращающие несвязанные вещи.В консерватории очень много чего не так. Например, провайдер данных может зависеть от потребителя.) Не я эту консерваторию запиливал. И "постоянство" тут относительное. Я использую сабж редко, но каждый раз, как использую, получаю замечание и требование переписать. Иногда переписываю, иногда отстаиваю ref/out, если вижу, что альтернативные варианты чреваты кучей декоративного говнокода, который даже не будет повторно использован. stenfordТакой код невозможно нормально читать и сопровождать.Некоторые куски я переписываю декларативно на linq, даже не пытаясь разобраться, как исходное говно работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 23:01 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariy... на linq, даже не пытаясь разобраться, как исходное говно работает. лучше чем linq - стопудово ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 00:19 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ViPRosлучше чем linq - стопудово О, вот и некрофилия подтянулась. Дженерики - порождение диавола. Самому не смешно, в 2019 году-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 00:40 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatViPRosлучше чем linq - стопудово О, вот и некрофилия подтянулась. Дженерики - порождение диавола. Самому не смешно, в 2019 году-то? когда пишешь всякую фигню можно и дженерики приходи лет через 20 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 01:10 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ViPRosприходи лет через 20 Послушать, как ты будешь тут спрашивать про миграцию с фокспро 2.6 на 6.0? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 01:28 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ViPRosAntonariy... на linq, даже не пытаясь разобраться, как исходное говно работает. лучше чем linq - стопудово"лучше" - характеристика качественная, ничего не говорящая о предмете конкретно. решения с linq обычно работают медленнее, но они втрое-вчетверо меньше по объему и во столько же более читаемее. в том слое, где практикуются такие переписывания, это приемлемо, прозрачность и безглючность кода важнее производительности. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 10:27 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariyрешения с linq обычно работают медленнее В общем-то, только из-за доп. расходов на компиляцию лямбд (я и тут даже не уверен, м.б. в случае LINQ to Objects это уже компилятор заранее делает - надо будет декомпилятором как-нибудь посмотреть) - других причин я придумать не могу - внутри будет такой же foreach. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 10:42 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatAntonariyрешения с linq обычно работают медленнее В общем-то, только из-за доп. расходов на компиляцию лямбд (я и тут даже не уверен, м.б. в случае LINQ to Objects это уже компилятор заранее делает - надо будет декомпилятором как-нибудь посмотреть) - других причин я придумать не могу - внутри будет такой же foreach.Замедление не от самого linq, а от обвеса, с которым он работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 11:21 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
А обвес работает с экселем) Поэтому шаг влево, шаг вправо от идеального по быстродействию способа - и эксель провисает. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 11:24 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatAntonariyрешения с linq обычно работают медленнее В общем-то, только из-за доп. расходов на компиляцию лямбд (я и тут даже не уверен, м.б. в случае LINQ to Objects это уже компилятор заранее делает - надо будет декомпилятором как-нибудь посмотреть) - других причин я придумать не могу - внутри будет такой же foreach. В случае LINQ to Objects компиляции лямб нет, если не делать AsQueryable ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 11:29 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyЗамедление не от самого linq, а от обвеса, с которым он работает. Есть замедление, ибо там сплошной вызов делегатов, хотя с другой стороны ленивые вычисления. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 11:30 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВAntonariyЗамедление не от самого linq, а от обвеса, с которым он работает. Есть замедление, ибо там сплошной вызов делегатов, хотя с другой стороны ленивые вычисления. Делегат как-то принципиально по-другому вызывается по сравнению с обычным методом? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 11:49 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
AntonariyА обвес работает с экселем) Поэтому шаг влево, шаг вправо от идеального по быстродействию способа - и эксель провисает. Если с екселем работаешь через COM, то там накладные расходы на его вызовы такие, что все остальное вообще никак влиять не должно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 11:55 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatДелегат как-то принципиально по-другому вызывается по сравнению с обычным методом? Ясен пень Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Против Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 12:09 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Инструкций больше, это-то и так понятно, но, именно принципиальной разницы, как, например "раннее связывание" и "позднее связывание" тут нет. И там и там метод прямо по указателю вызывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 12:43 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatAntonariyА обвес работает с экселем) Поэтому шаг влево, шаг вправо от идеального по быстродействию способа - и эксель провисает. Если с екселем работаешь через COM, то там накладные расходы на его вызовы такие, что все остальное вообще никак влиять не должно.А от COM никуда не денешься, виндовый офис имеет его в своем фундаменте. Работаю через NET-обертки ExcelDna+NetOffice, так что добавь еще накладные расходы внутри них. Однако даже их сумма ничто по сравнению с производительностью самих вызываемых методов. Например, удаление диапазона строк. Удаление одной строки и сотни строк по времени почти одинаково, но если удалять диапазон построчно, то время возрастает в разы, даже если поотключать экселю все обновления и события. Это самый очевидный кейс, и его я оптимизирую, если натыкаюсь на построчное удаление, а самый распространенный - атомарная операция присвоения массива диапазону, и тут местами приходится разоптимизировать. Метод, создающий массив, обычно имеет кучу параметров, определяющих его внешний вид и размер, данные для массива разнородные, полет мысли авторов, собирающих эти данные в кучу, неописуем. В результате имеем кучу нечитаемых методов, непригодных для повторного использования - грубо говоря, в новом методе массив формируется новым способом, и здесь правят бал Tuple<>. Приходится дробить атомарную операцию на осмысленные куски (которые возможно повторно использовать в других методах), выводя кусками и массив, и это основная причина проседания производительности. Но терпимая. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 14:12 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatЕвгенийВ, Инструкций больше, это-то и так понятно, но, именно принципиальной разницы, как, например "раннее связывание" и "позднее связывание" тут нет. И там и там метод прямо по указателю вызывается.так-то ранее связывание отличается от позднего тем, что во втором как раз и есть больше инструкций, занимающимися тем, чем при раннем связывании занимается компилятор - определением адреса вызываемого метода) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 14:20 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariy, У вас проблема вроде не в скорости была). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 15:29 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
в Linq почти все вызовы больше O(n), так как последовательность IEnumerabl<T> не упорядочена, не имеет фиксированного размера, нет предоставляет прямой доступ по индексу к элементам последовательности, что делает невозможным применение более быстрых алгоритмов логарифмической сложности O(logn) и константного время доступа к элементам последовательности. Время материализации постоянно O(c) для всех случаев, им можно пренебречь, ведь и для обычных массивов и для IEnumerable<T> данные в любом случае придется загрузить. Массив в отличии от последовательности, это непрерывная область в памяти фиксированной длинны, то есть вероятность того, что весь массив или его часть окажется закэширован выше, чем в случае с последовательностью, ведь не факт, что за кулисами массив. И в момент обращения к первому элементу, 2 вообще еще существует. Linq и последовательности, по очевидным причинам удобнее, лаконичнее, короче, нагляднее и выразительнее, чем работа с более низкоуровневыми типами. А концепция методов расширения позволяет расширить её и добавить сколько угодно новых методов. За собой замечаю, что все больше отдаю предпочтение массивам T[], особенно если последовательность имеет фиксированный размер и важен доступ через индексатор. Оптимизация нужна не всегда и не везде. Нет смысла городить сложные алгоритмы поиска в наборе из 100 записей, при реализации функционала если задача выполняется за разумное\требуемое время, нет смысла делать её быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 17:00 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Roman Mejtes, В Linq многие методы оптимизированы за счет того, что они сначала смотрят, что на самом деле лежит под IEnumerable и для "знакомых" им коллекций вызывают соответствующие "быстрые" методы или свойства. Поясню на примере: Код: c# 1.
В этом случае Сount() распознает, что в него передали массив и не станет просто перебирать его элементы и подстчитывать, а сразу вернет свойство Length. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 17:37 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВВ случае LINQ to Objects компиляции лямб нет, если не делать AsQueryable Да, посмотрел - там блямбда преобразуется в делегат уже самим компилятором. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 17:39 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatRoman Mejtes, В Linq многие методы оптимизированы за счет того, что они сначала смотрят, что на самом деле лежит под IEnumerable и для "знакомых" им коллекций вызывают соответствующие "быстрые" методы или свойства. Поясню на примере: Код: c# 1.
В этом случае Сount() распознает, что в него передали массив и не станет просто перебирать его элементы и подстчитываеть, а сразу вернет свойство Length. Ваш пример, это наилучший результат выполнения метода, подобный тому, если бы N было равно 0 или 1, размер коллекции мы бы получили немедленно, практически за константное время. Но при оптимизации рассматривают наихудший из возможных сценариев, а не наилучший. В худшем из сценариев, данный метод может занимать огромное количество времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 18:05 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariyтак-то ранее связывание отличается от позднего тем, что во втором как раз и есть больше инструкций, занимающимися тем, чем при раннем связывании занимается компилятор - определением адреса вызываемого метода) Ну так если рассуждать, то вообще ничего от ничего не отличается. MS Office отличается от SQL Server только количеством и порядком инструкций. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 18:06 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Roman MejtesВаш пример, это наилучший результат выполнения метода, подобный тому, если бы N было равно 0 или 1, размер коллекции мы бы получили немедленно, практически за константное время. Но при оптимизации рассматривают наихудший из возможных сценариев, а не наилучший. В худшем из сценариев, данный метод может занимать огромное количество времени. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 18:18 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatViPRosприходи лет через 20 Послушать, как ты будешь тут спрашивать про миграцию с фокспро 2.6 на 6.0? пшел бы ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 20:03 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariystenfordесли у тебя постоянно используется ref/out/Tuple в коде - то точно что-то не то в консерватории, скорее всего очень непродуманная структура кода и классов, методы делающие и возвращающие несвязанные вещи.В консерватории очень много чего не так. Например, провайдер данных может зависеть от потребителя.) Не я эту консерваторию запиливал. Стоило бы спросить у стенфорда, например, в чём проблема ref/out/Tuple, но внятного ответа ты не дождёшься. Одно только ясно "что-то не то" Ох уж эта религия.. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 20:48 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
hVostt, По-моему он в своем сообщении вполне понятно написал. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 21:41 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthathVostt, По-моему он в своем сообщении вполне понятно написал. Ничего понятного тут нет и в помине. Ты испольуешь ref/out -- значит у тебя (скорее всего) "очень непродуманная структура". Рили? Это прекрасно, я смотрю тут многим не нужно в ревью, настоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 23:44 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
hVostt в чём проблема ref/out/Tuple, но внятного ответа ты не дождёшься. Одно только ясно "что-то не то" Проблема в слабости системы типов C#. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 09:29 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
hVostt, На этот случай должны быть утвержденные кодинг-стайл гайдлайнс, чтобы не тратить по полдня читая лекции про правильный дизайн каждому джуну. Подрастут, книжек умных почитают, и сами разберутся что к чему. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 09:40 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Roman Mejtesв Linq почти все вызовы больше O(n), Тут можно поспорить. Посчитай O(?) для Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 09:52 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВRoman Mejtesв Linq почти все вызовы больше O(n), Тут можно поспорить. Посчитай O(?) для Код: c# 1. 2.
и? как параллелизм, в данном случае, влияет на алгоритм? каждый элемент массива будет возведен в квадрат, в 2, 10 или 1 потоке это происходит, не имеет значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 16:34 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthathVostt, На этот случай должны быть утвержденные кодинг-стайл гайдлайнс, чтобы не тратить по полдня читая лекции про правильный дизайн каждому джуну. Подрастут, книжек умных почитают, и сами разберутся что к чему. Как относится кодинг-стайл к out/ref? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 22:44 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
hVostt, ну, пускай, выкинем "style", назовем просто "coding guidelines", или "best practice" - один черт все, я думаю, поняли о чем я. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 23:05 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Roman MejtesЕвгенийВпропущено... Тут можно поспорить. Посчитай O(?) для Код: c# 1. 2.
и? как параллелизм, в данном случае, влияет на алгоритм? каждый элемент массива будет возведен в квадрат, в 2, 10 или 1 потоке это происходит, не имеет значения. Как то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 23:33 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Roman MejtesЕвгенийВпропущено... Тут можно поспорить. Посчитай O(?) для Код: c# 1. 2.
и? как параллелизм, в данном случае, влияет на алгоритм? каждый элемент массива будет возведен в квадрат, в 2, 10 или 1 потоке это происходит, не имеет значения.как это не имеет? а выигрыш в производительности? либо у тебя в одном потоке все считается, либо в разных потоках разбрасывается кусками по ядрам и все куски считаются параллельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 23:35 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Antonariy, Сложность алгоритма это формальное понятие и к практической производительности имеет условное отношение. Хоть стопиццот ядер поставь, но формальная сложность будет все равно O(N). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 23:44 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthatAntonariy, Сложность алгоритма это формальное понятие и к практической производительности имеет условное отношение. Хоть стопиццот ядер поставь, но формальная сложность будет все равно O(N). Все зависит от алгоритма. Быстрая сортировка легко распараллеливается, а вычисление чисел Фибоначчи нет. Этот факт при подсчете сложности нельзя не учитывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2019, 23:49 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Ну опять-таки - никак не связано. Распараллеливай, не распараллеливай, но кол-во действий будет то же самое, хоть и выполнятся они быстрее (если на нескольких ядрах), т.ч. O() то же самое. И, тупой "пузырек", например, будет намного быстрее чем qsort, если ими массив из нескольких чисел сортировать - к асимптотической сложности это отношения никакого не имеет. O(N) означает только что есть такие C и M, что T(N > M) / N всегда не больше C. Насколько большие или малые эти C и N определение ничего не говорит. Они, например, могут быть настолько большие, что на любых реальных данных O(N) может оказаться медленней чем хоть O(N!), я же говорю - это чисто формально-теоретическое понятие. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 00:23 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
fkthat, Вообще вычислительная сложность складывается из временной сложности и пространственной сложности. Временная является функцией от количества обрабатываемых элементов и если мы можем распараллелить, поделить хотя бы на 2, уже очень круто. Проще говоря у тебя сильно больше шансов дождаться результатов работы алгоритма, который будет работать 25 лет, чем у того, который будет работать 50 лет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 09:49 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВ, последовательность Фибоначчи легко параллелизуется с помощью перемножения матриц можно за log(n) найти значение числа N в последовательности, если у нас 4 потока, то находим 8 начальных значений, потом просто в 4 потока заполняем последовательность ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 10:25 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
Roman MejtesЕвгенийВ, последовательность Фибоначчи легко параллелизуется с помощью перемножения матриц можно за log(n) найти значение числа N в последовательности, если у нас 4 потока, то находим 8 начальных значений, потом просто в 4 потока заполняем последовательность А подробнее? Где почитать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 10:47 |
|
ref и out параметры
|
|||
---|---|---|---|
#18+
ЕвгенийВПроще говоря у тебя сильно больше шансов дождаться результатов работы алгоритма, который будет работать 25 лет, чем у того, который будет работать 50 лет. Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 10:50 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1398931]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
187ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
123ms |
get tp. blocked users: |
2ms |
others: | 272ms |
total: | 632ms |
0 / 0 |