Информация об изменениях

Сообщение Re: Unfold от 22.09.2016 16:57

Изменено 23.09.2016 13:24 Sinix

Здравствуйте, 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;
        }
    }
}
Re: Unfold
Здравствуйте, 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;
        }
    }
}