Pull to refresh

[Перевод] Я все еще не просек F#

Reading time2 min
Views2.1K
Original author: Roger Alsing
Я думаю, что Microsoft пытается продать нам 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#.

У кого-нибудь есть такой пример?
Tags:
Hubs:
Total votes 33: ↑17 and ↓16+1
Comments30

Articles