[ANN] Расчистка техдолга в CJ, part1
От: Sinix  
Дата: 01.12.18 19:36
Оценка: 12 (1)
Подчистил всё связанное с сборкой в CJ, теперь тормоза / глюки в студии должны уйти.

Perftests убрал из солюшна, будут в отдельном SLN.
Заодно поправил расположение проектов, перевёл на flat tree (все проекты лежат по пути .\ProjName\ProjName.csproj, группировка проектов задаётся в солюшне).

Если есть ещё реквесты по CJ — пишите, постараюсь сделать.


UPD. А, да. Чисто технически у нас теперь нет препятствий для поддержки всякой экзотики типа .net 2.0 / netstandard 2.1 etc. Тесты и сборка должны прожевать без проблем.
Отредактировано 01.12.2018 19:39 Sinix . Предыдущая версия .
Re: [ANN] Расчистка техдолга в CJ, part1
От: _NN_ www.nemerleweb.com
Дата: 02.12.18 18:45
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>UPD. А, да. Чисто технически у нас теперь нет препятствий для поддержки всякой экзотики типа .net 2.0 / netstandard 2.1 etc. Тесты и сборка должны прожевать без проблем.

.NET 2.0 готов.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: [ANN] Расчистка техдолга в CJ, part1
От: _NN_ www.nemerleweb.com
Дата: 02.12.18 19:31
Оценка:
Здравствуйте, Sinix, Вы писали:

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


S>Perftests убрал из солюшна, будут в отдельном SLN.

А когда будут то ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: [ANN] Расчистка техдолга в CJ, part1
От: IT Россия linq2db.com
Дата: 02.12.18 19:52
Оценка:
Здравствуйте, Sinix, Вы писали:

Ещё бы от туплов избавиться.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: [ANN] Расчистка техдолга в CJ, part1
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.12.18 20:13
Оценка:
Здравствуйте, IT, Вы писали:

IT>Ещё бы от туплов избавиться.


Они только для старых фреймворков.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: [ANN] Расчистка техдолга в CJ, part1
От: Sinix  
Дата: 02.12.18 21:37
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>.NET 2.0 готов.


Если есть время / желание — сделаешь скрипт, который будет тесты nunit под net 3.5 запускать? У нас как выяснилось, и 3.5 по факту под 4.0 запускаются.
У меня руки пофиксить не дошли. Скрипт для существующих сборок в build\buildscripts, что у appveyor установлено на машине — см https://www.appveyor.com/docs/windows-images-software/#test-runners
Re[2]: [ANN] Расчистка техдолга в CJ, part1
От: Sinix  
Дата: 02.12.18 21:38
Оценка:
Здравствуйте, _NN_, Вы писали:

S>>Perftests убрал из солюшна, будут в отдельном SLN.

_NN>А когда будут то ?
Через неделю-две, хочу их обновить и техдолг по ним закончить.

Некритично, т.к, народ особо перфтесами не увлекается.
Re[2]: [ANN] Расчистка техдолга в CJ, part1
От: Sinix  
Дата: 02.12.18 21:41
Оценка:
Здравствуйте, IT, Вы писали:

IT>Ещё бы от туплов избавиться.

Андрей выше написал, мы их добавили только для старых FW. Если мешают — давай сценарий, подумаю. Про netstd 1.6 помню, попробую.
Re[2]: [ANN] Расчистка техдолга в CJ, part1
От: Sinix  
Дата: 02.12.18 21:45
Оценка:
Здравствуйте, IT, Вы писали:

Оффтоп. Глянь плиз

https://github.com/rsdn/CodeJam/issues/48
https://github.com/rsdn/CodeJam/issues/47
https://github.com/rsdn/CodeJam/issues/46

Что делать бум? Оставляем как есть / меняем?
Re[3]: [ANN] Расчистка техдолга в CJ, part1
От: IT Россия linq2db.com
Дата: 04.12.18 17:21
Оценка: 22 (1) +1
Здравствуйте, Sinix, Вы писали:

S>Андрей выше написал, мы их добавили только для старых FW. Если мешают — давай сценарий, подумаю. Про netstd 1.6 помню, попробую.


Они и для старых не нужны. Мы не предоставляем никакого API, где-бы использовались туплы. Исключительно для внутреннего пользования, как я понял просто поиграться кому-то хотелось. Выкинуть нафиг и не нужно будет тащить зависимую сборку для любых фреймворков.
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: [ANN] Расчистка техдолга в CJ, part1
От: IT Россия linq2db.com
Дата: 04.12.18 18:17
Оценка:
Здравствуйте, Sinix, Вы писали:

S>https://github.com/rsdn/CodeJam/issues/48


Это protected internal. Стоит ли вообще трогать и вводить out параметр? Как я понимаю смущает Try в названии метода?

S>https://github.com/rsdn/CodeJam/issues/47


Это я вообще не понял. Почему? Кто сказал?

S>https://github.com/rsdn/CodeJam/issues/46


То же самое. Мне, например, как раз интересен API, который принимает null и его нормально обрабатывает.

S>Что делать бум? Оставляем как есть / меняем?


Нафиг. Какие-то странные претензии. Хотя бы обостнование какое-нибудь услышать. А то опять получается — мои предпочтения круче твоих предпочтений.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: [ANN] Расчистка техдолга в CJ, part1
От: _NN_ www.nemerleweb.com
Дата: 04.12.18 18:34
Оценка:
Здравствуйте, IT, Вы писали:

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


S>>https://github.com/rsdn/CodeJam/issues/48


IT>Это protected internal. Стоит ли вообще трогать и вводить out параметр? Как я понимаю смущает Try в названии метода?

Уже не актуально.
Обсудили, что такие методы назвать надо с Try**.
Забыл закрыть.

S>>https://github.com/rsdn/CodeJam/issues/47


IT>Это я вообще не понял. Почему? Кто сказал?

Тогда стоит назвать, хотя бы, TryGetConvertExpression.
Методы возвращающие null без какого-либо указания это источник ошибок.
Проверенно на опыте.

S>>https://github.com/rsdn/CodeJam/issues/46


IT>То же самое. Мне, например, как раз интересен API, который принимает null и его нормально обрабатывает.

Очень подозрительный метод расширения, который умеет принимать this как null.
А если в коде вызывается как статический метод, то зачем он метод расширения.
В любом случае, возвращаемый null это стопроцентный источник будущих ошибок.

S>>Что делать бум? Оставляем как есть / меняем?

IT>Нафиг. Какие-то странные претензии. Хотя бы обостнование какое-нибудь услышать. А то опять получается — мои предпочтения круче твоих предпочтений.

Стиль кода подразумевает не возвращать null если это не указано в название метода.
Или это не так ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: [ANN] Расчистка техдолга в CJ, part1
От: IT Россия linq2db.com
Дата: 04.12.18 19:11
Оценка:
Здравствуйте, _NN_, Вы писали:

IT>>Нафиг. Какие-то странные претензии. Хотя бы обостнование какое-нибудь услышать. А то опять получается — мои предпочтения круче твоих предпочтений.

_NN>Стиль кода подразумевает не возвращать null если это не указано в название метода.

Стиль это и есть предпочтения. Такие же как и утверждение, что возвращение null — это стопроцентный источник ошибок. Оно как бы да и как бы нет.

В данном конкретном случае мы имеем дело с ExpressionTree, внешней, не нами разработанной структурой данных, где null — это валидное значение. Не ошибка передачи параметров или возвращаемых значений, а вполне себе нормальная ситуация. ET состоит из кучи других ET, в свою очередь состоящих из множества других, среди которых частенько бывает и null. Подгонять эту конкретную ситуацию под "стиль" не вижу смысла.

Что касается "расширения, который умеет принимать this как null", то у нас там таких строковых расширений мильён и маленькая тележка.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: [ANN] Расчистка техдолга в CJ, part1
От: Sinix  
Дата: 04.12.18 19:33
Оценка:
Здравствуйте, IT, Вы писали:

S>>Что делать бум? Оставляем как есть / меняем?


IT>Нафиг. Какие-то странные претензии. Хотя бы обостнование какое-нибудь услышать. А то опять получается — мои предпочтения круче твоих предпочтений.


Ок, оставляем как есть.
Отредактировано 04.12.2018 19:45 Sinix . Предыдущая версия .
Re[4]: [ANN] Расчистка техдолга в CJ, part1
От: Sinix  
Дата: 04.12.18 19:44
Оценка:
Здравствуйте, IT, Вы писали:

IT>Они и для старых не нужны. Мы не предоставляем никакого API, где-бы использовались туплы. Исключительно для внутреннего пользования, как я понял просто поиграться кому-то хотелось. Выкинуть нафиг и не нужно будет тащить зависимую сборку для любых фреймворков.

В кишках Memoize и в SuffixTreeBase используются. Основная проблема с SuffixTreeBase, там тюпл в protected member выставлен.

Если кто уберёт — можно будет тюплы только в таргетинге (для 3.5) оставить.
Re[6]: [ANN] Расчистка техдолга в CJ, part1
От: _NN_ www.nemerleweb.com
Дата: 04.12.18 20:25
Оценка:
Здравствуйте, IT, Вы писали:

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


IT>>>Нафиг. Какие-то странные претензии. Хотя бы обостнование какое-нибудь услышать. А то опять получается — мои предпочтения круче твоих предпочтений.

_NN>>Стиль кода подразумевает не возвращать null если это не указано в название метода.

IT>Стиль это и есть предпочтения. Такие же как и утверждение, что возвращение null — это стопроцентный источник ошибок. Оно как бы да и как бы нет.

Основная проблема в том, что не всегда есть проверки.
Возможно и expr.Item1 никогда не будет null, но никто не проверяет.

https://github.com/rsdn/CodeJam/blob/master/CodeJam.Blocks/Mapping/ConvertT.cs#L32
        private static void Init()
        {
            var expr = ConvertBuilder.GetConverter(null, typeof(TFrom), typeof(TTo));

            _expression = (Expression<Func<TFrom,TTo>>)expr.Item1;

            var rexpr = (Expression<Func<TFrom,TTo>>)expr.Item1.Transform(e => e is DefaultValueExpression ? e.Reduce() : e);

            _lambda = rexpr.Compile();
}



IT>В данном конкретном случае мы имеем дело с ExpressionTree, внешней, не нами разработанной структурой данных, где null — это валидное значение. Не ошибка передачи параметров или возвращаемых значений, а вполне себе нормальная ситуация. ET состоит из кучи других ET, в свою очередь состоящих из множества других, среди которых частенько бывает и null. Подгонять эту конкретную ситуацию под "стиль" не вижу смысла.


IT>Что касается "расширения, который умеет принимать this как null", то у нас там таких строковых расширений мильён и маленькая тележка.

Думаю, тогда можно это решить аннотацией вида
[ContractAnnotation("expr:null => null; expr:notnull => notnull")]
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: [ANN] Расчистка техдолга в CJ, part1
От: _NN_ www.nemerleweb.com
Дата: 04.12.18 22:18
Оценка:
Здравствуйте, IT, Вы писали:

Ещё примеры.
https://github.com/rsdn/CodeJam/blob/master/CodeJam.Blocks/Mapping/MappingSchema.cs#L260

Не спорю что, скорее, всего проблемы и никогда не будет,
Однако код получается хрупким. Достаточно поменять немного GetConverter и получим NRE там, где не ждали.

        protected internal virtual LambdaExpression TryGetConvertExpression(Type from, Type to)
        {
            var li = GetConverter(from, to, false);
            // Тут проверям 'li'
            return li == null ? null : (LambdaExpression)ReduceDefaultValue(li.CheckNullLambda);
        }

        public Expression<Func<TFrom,TTo>> GetConvertExpression<TFrom,TTo>()
        {
            var li = GetConverter(typeof(TFrom), typeof(TTo), true);
            // А тут забыли проверить 'li'
            return (Expression<Func<TFrom,TTo>>)ReduceDefaultValue(li.CheckNullLambda);
        }

        public Func<TFrom,TTo> GetConverter<TFrom,TTo>()
        {
            var li = GetConverter(typeof(TFrom), typeof(TTo), true);
            // Забыли проверить 'li' снова
            if (li.Delegate == null)
            {
                var rex = (Expression<Func<TFrom,TTo>>)ReduceDefaultValue(li.CheckNullLambda);
                var l   = rex.Compile();

                Schemas[0].SetConvertInfo(typeof(TFrom), typeof(TTo), new ConvertInfo.LambdaInfo(li.CheckNullLambda, null, l, li.IsSchemaSpecific));

                return l;
            }

            return (Func<TFrom,TTo>)li.Delegate;
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: [ANN] Расчистка техдолга в CJ, part1
От: _NN_ www.nemerleweb.com
Дата: 05.12.18 13:52
Оценка:
Здравствуйте, Sinix, Вы писали:

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


_NN>>.NET 2.0 готов.


S>Если есть время / желание — сделаешь скрипт, который будет тесты nunit под net 3.5 запускать? У нас как выяснилось, и 3.5 по факту под 4.0 запускаются.

S>У меня руки пофиксить не дошли. Скрипт для существующих сборок в build\buildscripts, что у appveyor установлено на машине — см https://www.appveyor.com/docs/windows-images-software/#test-runners

Имеется ввиду добавить вызов nunit с нужным фреймворком в CodeJam.AppVeyor.NUnit.Tests.ps1 ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: [ANN] Расчистка техдолга в CJ, part1
От: Sinix  
Дата: 05.12.18 18:32
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Имеется ввиду добавить вызов nunit с нужным фреймворком в CodeJam.AppVeyor.NUnit.Tests.ps1 ?


Угу
Re[5]: [ANN] Расчистка техдолга в CJ, part1
От: Lexey Россия  
Дата: 09.12.18 22:20
Оценка: 72 (1)
Здравствуйте, Sinix, Вы писали:

S>Основная проблема с SuffixTreeBase, там тюпл в protected member выставлен.

S>Если кто уберёт — можно будет тюплы только в таргетинге (для 3.5) оставить.

Постараюсь посмотреть в ближайшем будущем.

Upd: там копеечный ченж получился: https://github.com/rsdn/CodeJam/pull/64
"Будь достоин победы" (c) 8th Wizard's rule.
Отредактировано 09.12.2018 23:02 Lexey . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.