Re: аллокации для params object[]
От: Jack128  
Дата: 25.04.16 10:14
Оценка: 44 (1)
Здравствуйте, rameel, Вы писали:

Возможно имеет ли смысл добавлять перегрузку:
AssertArgument(
            bool condition,
            [NotNull, InvokerParameterName] string argName,
            [NotNull] string messageFormat,
            [CanBeNull] object arg)

чтоб убрать лишнее выделение памяти под массив.
Re[2]: аллокации для params object[]
От: Sinix  
Дата: 25.04.16 11:12
Оценка:
Здравствуйте, Jack128, Вы писали:

J>чтоб убрать лишнее выделение памяти под массив.

Гхимм, а оно разве не учтено в рослине?

Когда проверял — работало. В перфтесты добавлю.
Re[3]: аллокации для params object[]
От: Jack128  
Дата: 25.04.16 11:23
Оценка:
Здравствуйте, Sinix, Вы писали:

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


J>>чтоб убрать лишнее выделение памяти под массив.

S>Гхимм, а оно разве не учтено в рослине?

Вроде тут про Array.Empty говорится, то есть про случай, когда нет аргументов для форматирования. А я говорю, про случай, когда мы передаем один аргумент для форматирования.
Собственно у любого логера так сделано.

Log(string message);
Log(string message, object arg);
Log(string message, object arg1, object arg2);
Log(string message, object arg1, object arg2, object arg3);
Log(string message, params object [] args);


Если совсем замарочиться, то нужно вообще дженерик методы делать, а-ля
Log<TArg>(string message, TArg arg);
Log<TArg1, TArg2>(string message, TArg1 arg1, TArg2 arg2);
...
Log(string message, params object [] args);

это уже чтоб боксинг убрать, когда value-типы передаем
Re[4]: аллокации для params object[]
От: Sinix  
Дата: 25.04.16 11:27
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Если совсем замарочиться, то нужно вообще дженерик методы делать, а-ля

А, не так вопрос понял

Ну да, надо сделать генерик-версию, чтоб без боксинга. И перегрузки до 4 аргументов. И допилить вот этот
Автор: Sinix
Дата: 19.04.16
момент в решарпере. И губозакаточную машинку пожалуйста.
Я вот думаю: дадут мне под это дело прикрутить отдельный проект с реврайтером на рослине, геройски копипастить копипасту, или всё-таки попытать счастья с парсингом регексами?

Есть какие идеи?
Re[5]: аллокации для params object[]
От: Jack128  
Дата: 25.04.16 17:39
Оценка:
Здравствуйте, Sinix, Вы писали:

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


J>>Если совсем замарочиться, то нужно вообще дженерик методы делать, а-ля

S>А, не так вопрос понял

S>Ну да, надо сделать генерик-версию, чтоб без боксинга. И перегрузки до 4 аргументов. И допилить вот этот
Автор: Sinix
Дата: 19.04.16
момент в решарпере. И губозакаточную машинку пожалуйста.

S>Я вот думаю: дадут мне под это дело прикрутить отдельный проект с реврайтером на рослине, геройски копипастить копипасту, или всё-таки попытать счастья с парсингом регексами?

S>Есть какие идеи?


Э, моя не понимать. Для чего именно нужен рерайтер на рослине?
типа по коду

public static void AssertArgument(
bool condition,
[NotNull, InvokerParameterName] string argName,
[NotNull] string messageFormat,
[CanBeNull] params object[] args)
{
if (!condition)
throw CodeExceptions.Argument(argName, messageFormat, args);
}

генерить набор перегрузок с один, двумя и тд аргументами??
Re[6]: аллокации для params object[]
От: Sinix  
Дата: 25.04.16 17:53
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Э, моя не понимать. Для чего именно нужен рерайтер на рослине?

J>генерить набор перегрузок с один, двумя и тд аргументами??

Ну да. Я как бы альтернатив для сделать один раз и хорошо не вижу.

Задача: на входе исходник, на выходе — partial-класс с перегрузками для методов с params object[] args в конце.

На параметры метода могут быть навешены атрибуты, могут использоваться default values, default value может быть произвольной строкой, для каждой перегрузки надо адаптировать xdoc comments — из них справка генерируется.

Вот не хочу я такое регэксом парсить
Эта штука не один раз нужна, навскидку методов 5 похожих точно найдётся.
Re[7]: аллокации для params object[]
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.04.16 18:22
Оценка: :))
Здравствуйте, Sinix, Вы писали:

S>Эта штука не один раз нужна, навскидку методов 5 похожих точно найдётся.


Ага, в GetValueOrDefault например. После последних правок там 18 перегрузок. 18, Карл!
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[7]: аллокации для params object[]
От: Jack128  
Дата: 25.04.16 19:18
Оценка:
Здравствуйте, Sinix, Вы писали:

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


J>>Э, моя не понимать. Для чего именно нужен рерайтер на рослине?

J>>генерить набор перегрузок с один, двумя и тд аргументами??

S>Ну да. Я как бы альтернатив для сделать один раз и хорошо не вижу.


S>Задача: на входе исходник, на выходе — partial-класс с перегрузками для методов с params object[] args в конце.


S>На параметры метода могут быть навешены атрибуты, могут использоваться default values, default value может быть произвольной строкой, для каждой перегрузки надо адаптировать xdoc comments — из них справка генерируется.

default values в методах с params ? Это как?

S>Вот не хочу я такое регэксом парсить

S>Эта штука не один раз нужна, навскидку методов 5 похожих точно найдётся.

Ну я б таки регэксп заюзал, в целевых методах не будет супер сложного кода, так что никаких колизий быть не должно.
Re[8]: аллокации для params object[]
От: Jack128  
Дата: 25.04.16 19:42
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


S>>Эта штука не один раз нужна, навскидку методов 5 похожих точно найдётся.


AVK>Ага, в GetValueOrDefault например. После последних правок там 18 перегрузок. 18, Карл!


Кстати, как на счет заменить
TValue GetValueOrDefault<TKey, TValue>([NotNull] this IDictionary<TKey, TValue> dictionary, TKey key, TValue defaultValue)

на
TResult GetValueOrDefault<TKey, TValue, TResult>([NotNull] this IDictionary<TKey, TValue> dictionary, TKey key, TResult defaultValue)
    where TValue: TResult


Смысл в том, что иногда у нас есть на например словарь Dictionary<int, List<MyClass>>, а в качестве дефолотового значения мы хотим задать IReadOnlyList<MyClass>
Re[8]: аллокации для params object[]
От: Sinix  
Дата: 25.04.16 20:15
Оценка:
Здравствуйте, Jack128, Вы писали:


S>>На параметры метода могут быть навешены атрибуты, могут использоваться default values, default value может быть произвольной строкой, для каждой перегрузки надо адаптировать xdoc comments — из них справка генерируется.

J>default values в методах с params? Это как?
Ну вот так вот например:
http://stackoverflow.com/a/13807929/318263


S>>Вот не хочу я такое регэксом парсить

S>>Эта штука не один раз нужна, навскидку методов 5 похожих точно найдётся.



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


Ты похоже всю засаду с задачей не заметил.

Надо
1. Из готового исходника выцепить вcе методы с params. Хотя бы заголовки, от первого комментария к методу и до первого операнда. Атрибуты и комментарии важны.
2. В коде каждого метода заменить params на n параметров. Добавить генерик-параметры.
3. Заменить тело метода на вызов исходной перегрузки.
4. Поправить xml-документацию.

Регексами? вот чего-то я сомневаюсь.
Re[2]: Assertions
От: Lexey Россия  
Дата: 25.04.16 21:44
Оценка: 24 (1)
Здравствуйте, Sinix, Вы писали:

S>1. NotNullNorWhiteSpace — нужен реальный юз-кейз. Я ещё не видел ни одного метода, в котором использовался бы такой ассерт. Без реальных сценариев я код не добавляю, т.к. неизбежно получается сфероконь на выброс. Исключений не видел.


Приходит тебе какой-нибудь url, path или строковый id на вход, который хочется по-быстрому провалидировать, не заморачиваясь полноценной проверкой. Вот тут оно и пригодится, но скорее нужно NotNullNorEmptyNorWhiteSpace.
"Будь достоин победы" (c) 8th Wizard's rule.
Отредактировано 26.04.2016 17:02 Lexey . Предыдущая версия .
Re[9]: аллокации для params object[]
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.04.16 21:44
Оценка: +1
Здравствуйте, Jack128, Вы писали:

J>Смысл в том, что иногда у нас есть на например словарь Dictionary<int, List<MyClass>>, а в качестве дефолотового значения мы хотим задать IReadOnlyList<MyClass>


Как то уж слишком кучеряво и неочевидно.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.