Unfold
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.09.16 15:38
Оценка:
Решил добавить реализацию. Основная проблема — как обозвать.
В первой итерации добавил класс sequence.
Вопросы:
1) Как лучше переобозвать?
2) Какие еще вариации на тему генерации последовательностей были бы полезны?
3) Стоит ли для унификации добавить синонимы Enumerable.Range и Repeat?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re: Unfold
От: Sinix  
Дата: 22.09.16 16:57
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Решил добавить реализацию. Основная проблема — как обозвать.


А какие вообще сценарии замышляются?
Как хелперы для частных случаев — 100% да, как что-то более серьёзное... вот что-то я сомневаюсь, что нам нужен полноценная функциональщина в виде Sequence/Fold etc.
Без кучи приседаний, сделанных в F# оно будет безумно медленно и неэффективно. Для эстетов есть F#, для хипстеров — C# Functional Extensions, чего ещё желать?

Хотя... прогнал перфтест — не так уж оно и страшно (специально разрешил структуры в Sequence.Create()).
  Скрытый текст
using System;
using System.Linq;

using CodeJam.Collections;
using CodeJam.PerfTests;
using CodeJam.PerfTests.Configs;

using JetBrains.Annotations;

using NUnit.Framework;

namespace CodeJam
{
    [TestFixture(Category = CompetitionHelpers.PerfTestCategory)]
    [Explicit(CompetitionHelpers.TemporarilyExcludedReason)]
    [PublicAPI]
    public class SequencePerfTests
    {
        public readonly int Count = 100 * 1000;

        [Test]
        public void RunSequencePerfTests() => Competition.Run(this, AssemblyCompetitionConfig.RunConfig);

        [CompetitionBenchmark(17.03, 23.40)]
        public long TestSequence()
        {
            long result = 0;
            foreach (var i in Sequence.Create(0, i => i < Count, i => i + 1))
            {
                result += i;
            }

            return result;
        }

        [CompetitionBenchmark(11.15, 14.13)]
        public long TestRange()
        {
            long result = 0;
            foreach (var i in Enumerable.Range(0, Count))
            {
                result += i;
            }

            return result;
        }

        [CompetitionBaseline]
        public long TestRaw()
        {
            long result = 0;
            for (int i = 0; i < Count; i++)
            {
                result += i;
            }

            return result;
        }
    }
}
Отредактировано 23.09.2016 13:24 Sinix . Предыдущая версия .
Re[2]: Unfold
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.09.16 23:39
Оценка:
Здравствуйте, Sinix, Вы писали:

S>А какие вообще сценарии замышляются?

S>Как хелперы для частных случаев — 100% да, как что-то более серьёзное... вот что-то я сомневаюсь, что нам нужен полноценная функциональщина в виде Sequence/Fold etc.

Да вроде из кода должно быть видно, что речь именно про хелперы.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Unfold
От: Sinix  
Дата: 23.09.16 11:54
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Да вроде из кода должно быть видно, что речь именно про хелперы.

Тогда может и запихнуть их в EnumerableEx, как в Ix.Net поступили?
Re[4]: Unfold
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.09.16 13:16
Оценка:
Здравствуйте, Sinix, Вы писали:

AVK>>Да вроде из кода должно быть видно, что речь именно про хелперы.

S>Тогда может и запихнуть их в EnumerableEx

У нас нет EnumerableEx. Есть EnumerableExtensions, но пихать туда не extension-методы, имхо, не лучшая идея.

S>, как в Ix.Net поступили?


Предлагаешь переименовать Sequence в EnumerableEx?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: Unfold
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.09.16 13:21
Оценка:
Здравствуйте, Sinix, Вы писали:

S>(специально разрешил структуры в Sequence.Create()).


Это огрехи копипасты. Констрейнт нужен только для CreateWhileNotNull
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: Unfold
От: Sinix  
Дата: 23.09.16 13:23
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>У нас нет EnumerableEx. Есть EnumerableExtensions, но пихать туда не extension-методы, имхо, не лучшая идея.

AVK>Предлагаешь переименовать Sequence в EnumerableEx?
Как вариант. Но это в самом конце надо делать, как с набором фич определимся. А то сейчас одно лучше смотрится, потом — другое, каждый раз метаться лень
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.