Будучи разработчиком C# с версии 1.0, F# в последние несколько недель занимал мое свободное время. Компьютеры сейчас продаются с 2, 4 ядрами и многопоточностью не всегда просто.
На данный момент я вижу, что F# имеет большой потенциал для сложных и / или тяжелых рабочих нагрузок. Как вы думаете, F# (после RTM) станет важным игроком на рынке корпоративного программного обеспечения?





Я думаю, что независимо от того, станет ли F# импортом для корпоративного программного обеспечения, возможность изолировать чисто функциональные части кода на любом языке будет ключом к использованию потенциала многоядерных компьютеров. Например, Microsoft Parallel Extensions для .NET великолепны, но все еще есть много места для ошибок, распараллеливая код, который не может выполняться параллельно. Если код имеет форму чисто функционального языка или чисто функционального подмножества вашего языка, то вы можете быть уверены, что сможете выполнять его параллельно. Уловка состоит в том, чтобы найти наиболее эффективный способ распределения работы.
Роль, которую играет в этом F#, я бы сказал, скорее, как катализатор, чтобы заставить людей замочить ноги и начать думать более декларативно.
Да, к этому определенно нужно привыкнуть, но в то же время можно довольно свободно решать проблему, описывая саму проблему, а не описывая шаги, которые вы предпримете для ее решения.
Я думаю, что у F# есть прекрасная возможность проникнуть в некоторые нишевые области корпоративных приложений, таких как математическое моделирование (например, для банковских / торговых приложений). Удаление побочных эффектов из функций также открывает большие возможности для параллелизма и запоминания. Трудно сказать, станут ли эти языки когда-либо массовыми, трудно сказать, но, на мой взгляд, проблемы, скорее всего, будут ориентированы на человека (то есть отсутствие навыков и высокая кривая обучения для людей, знакомых с более типичными языками, такими как C# / java / C++), а не технический.
Я думаю, мы увидим, что некоторые функциональные элементы будут перенесены на C#, такие как увеличение использования неизменяемых типов и функций маркировки как чистых и т.д. среднему разработчику.
Я согласен с тем, что только заинтересованные разработчики решатся на F#, это не самая простая задача, когда все, что вы делаете, это ООП.
Я думаю, что F# всегда будет нишевым языком по сравнению с VB / C# / Java, потому что он требует большего знания математики или информатики. Однако сам факт того, что это язык CLR, означает, что он будет иметь гораздо большее распространение, чем более ранние функциональные языки.
Я работаю в инвестиционном банке, и мы уже используем F# для некоторых специальных сценариев, мы очень хотим увидеть выпущенную версию F#, чтобы мы могли рассмотреть более формальную интеграцию в наши системы (хотя они, вероятно, останутся в основном На основе C#).
Я действительно думаю, что C# останется основным языком и что F# будет использоваться для решения более сложных проблем или более трудоемких задач. не могли бы вы поделиться некоторыми интересными ресурсами из своего опыта работы с F#?
Я не согласен с тем, что для этого требуется знание математики / CS. Для понимания таких вещей требуется, чтобы емкость. Но опять же, этого, вероятно, достаточно, чтобы ограничиться «нишей».
C# / VB всегда будет основными языками, но F# лучше справляется со сложными задачами. C# более универсален, в то время как F# лучше подходит для IA, статистики, науки (например, для поиска лекарства от рака) и т. д. F# никогда не заменит C#, но он позволит .NET конкурировать в большем количестве областей информатики. Что касается интеллектуального анализа данных и обработки больших объемов данных, вам лучше разрабатывать непосредственно в базе данных - например, SQL Server или oracle.
Что касается сложности изучения F#, то это только потому, что мы «испорчены» императивным образом мышления в большинстве других языков. Трудно отучиться от того, чем ты занимаешься, за 5 лет! Кроме того, по моему опыту, использование ocaml и F# доставляет удовольствие. Единственная жалоба на F# / Ocaml заключается в том, что в большинстве случаев люди злоупотребляют выводом типа, что делает код нечитаемым. Я бы предпочел объявить типы переменных, чтобы их было легче поддерживать.
Неизменяемые характеристики определенно отлично подходят для параллельного выполнения. Я должен признать, что к этому мне нужно немного привыкнуть.