Я думаю, что Microsoft пытается продать нам F# как что-то новое и крутое, но у меня серьезные проблемы с пониманием приемуществ F# перед C#.
Но F# может делать каррирование (curring) функций!
Ну, C# тоже это может.
F# умеет создавать конвейерные вычисления (pipelining)!
C# тоже умеет.
В F# есть наборы (tuples)!
Наборы встроены в .NET 4 как обобщенный тип (generic), так что они доступны во всех .NET языках, поддерживающих обобщенные типы.
В F# есть хвостовая рекурсия (tail recursion).
Хорошо, вы меня поймали, она там есть.
Но, скажите мне, когда в последний раз вам действительно она была нужна?
Любой «хвостово-рекурсивный» алгоритм может быть реализован итеративно. Но, конечно, это приятный синтаксический сахар.
В F# проще писать асинхронный код.
Это был один из аргументов на демо F# на PDC 2008.
Там было показано, как это было сделано с помощью PLinq, завернутого в сборку C#. Может, я не понял некоторых примеров, но почти каждый пример, который я видел, может быть реализован на C# приблизительно таким же объемом кода.
Что я хотел бы увидеть, так это действительно хороший пример на F#, который было бы сложно или невозможно повторить на C#.
Если F# лишь слегка лучше чем C# в некоторых задачах, то затраты на появление F# в проекте всегда будет перевешивать те небольшие приемущества, которые он сможет принести.
Другой аргумент F# в том, что он направлен на совершенно другой круг задач. Хорошо, покажите нам, где F# блистает, без обмана о том, чего может или не может C#.
У кого-нибудь есть такой пример?
Но F# может делать каррирование (curring) функций!
Ну, C# тоже это может.
string Foo(int a, bool b)
{
//do stuff
}
void UseCurry()
{
Func<int,string> curriedFooWithTrue = a => Foo(a,true);
//invoke curried function.
var res = curriedFooWithTrue(123);
}
* This source code was highlighted with Source Code Highlighter.
F# умеет создавать конвейерные вычисления (pipelining)!
C# тоже умеет.
var listOfInts = new List<int> {1,2,3,4,5,6};
Func<int,int> squared = x => x*x;
var squaredListOfInts = listOfInts.Select(x => squared).ToList();
* This source code was highlighted with Source Code Highlighter.
В F# есть наборы (tuples)!
Наборы встроены в .NET 4 как обобщенный тип (generic), так что они доступны во всех .NET языках, поддерживающих обобщенные типы.
В F# есть хвостовая рекурсия (tail recursion).
Хорошо, вы меня поймали, она там есть.
Но, скажите мне, когда в последний раз вам действительно она была нужна?
Любой «хвостово-рекурсивный» алгоритм может быть реализован итеративно. Но, конечно, это приятный синтаксический сахар.
В F# проще писать асинхронный код.
Это был один из аргументов на демо F# на PDC 2008.
Там было показано, как это было сделано с помощью PLinq, завернутого в сборку C#. Может, я не понял некоторых примеров, но почти каждый пример, который я видел, может быть реализован на C# приблизительно таким же объемом кода.
Что я хотел бы увидеть, так это действительно хороший пример на F#, который было бы сложно или невозможно повторить на C#.
Если F# лишь слегка лучше чем C# в некоторых задачах, то затраты на появление F# в проекте всегда будет перевешивать те небольшие приемущества, которые он сможет принести.
Другой аргумент F# в том, что он направлен на совершенно другой круг задач. Хорошо, покажите нам, где F# блистает, без обмана о том, чего может или не может C#.
У кого-нибудь есть такой пример?