Решил добавить реализацию. Основная проблема — как обозвать.
В первой итерации
добавил класс sequence.
Вопросы:
1) Как лучше переобозвать?
2) Какие еще вариации на тему генерации последовательностей были бы полезны?
3) Стоит ли для унификации добавить синонимы Enumerable.Range и Repeat?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, 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;
}
}
}
|
| |
Здравствуйте, Sinix, Вы писали:
S>А какие вообще сценарии замышляются?
S>Как хелперы для частных случаев — 100% да, как что-то более серьёзное... вот что-то я сомневаюсь, что нам нужен полноценная функциональщина в виде Sequence/Fold etc.
Да вроде из кода должно быть видно, что речь именно про хелперы.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Да вроде из кода должно быть видно, что речь именно про хелперы.
Тогда может и запихнуть их в EnumerableEx, как в
Ix.Net поступили?
Здравствуйте, 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>>
Здравствуйте, Sinix, Вы писали:
S>(специально разрешил структуры в Sequence.Create()).
Это огрехи копипасты. Констрейнт нужен только для CreateWhileNotNull
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>У нас нет EnumerableEx. Есть EnumerableExtensions, но пихать туда не extension-методы, имхо, не лучшая идея.
AVK>Предлагаешь переименовать Sequence в EnumerableEx?
Как вариант. Но это в самом конце надо делать, как с набором фич определимся. А то сейчас одно лучше смотрится, потом — другое, каждый раз метаться лень