Ответ 1
Я провел последние 7 месяцев, развивая большой реальный глобальный сервер в F #. Я не могу дать вам точные данные, но это самый крупный контракт на консультацию моя компания когда-либо приземлялся.
Я ищу некоторые мысли от кого-то, кто использовал F # для решения больших, реальных проблем, проблем. Является ли F # хорошим инструментом для этого?
Да. У меня нет проблем с разработкой конечных коммерческих продуктов в F # (я сделал это здесь и здесь), но наши клиенты часто очень впечатлены быстрым прототипированием с использованием F #. Например, недавно я нашел документ внутренней компании, который процитировал 3 человеко-месяца для реализации функции на С++, которая заняла у меня 4 часа с помощью F #!
Каковы подводные камни?
В языке есть некоторые причуды, но единственные серьезные проблемы, с которыми я столкнулся (которые заблокировали мою работу в течение нескольких недель), были ошибки в .NET и плохая поддержка драйверов Infiniband для Windows, ни одна из которых не имела ничего общего с F #. У меня были некоторые незначительные проблемы с ошибками в библиотеках F # (например, TryScan
), но они были легко работать, как только я выяснил, в чем проблема. Команда F # всегда была очень хороша в предоставлении поддержки и принятии предложений.
Кроме того, обратите внимание, что я являюсь одним из немногих людей, которые впервые использовали эту технологию в промышленности, поэтому я ожидаю, что вы столкнетесь с меньшим количеством проблем, чем я, и решит их быстрее, потому что мы уже решили их для вас!
Мы имеем дело с множеством взаимодействующих сообщений и с большим изменением состояния, хотя это, скорее всего, будет жить в облаке DB. Функциональное программирование, похоже, светит при работе с массивными parallelism и распределенными вычислениями, но, похоже, препятствует изменению любого состояния.
Это распространенное заблуждение. В действительности почти все языки функционального программирования (например, Lisp, схема, Clojure, Scala, стандартный ML, OCaml, F #, Erlang) нечисты и полагаются на неконтролируемые побочные эффекты. Haskell - единственный сохранившийся чисто функциональный язык, и он совершенно не имеет значения.
На практике преимущества F # производительности больше связаны с выводами типов, сопоставлением типов и вариантами (из семейств языков ML) и другими функциями, такими как асинхронные рабочие процессы, процессоры почтовых ящиков, выражения последовательности, интероперабельность и так далее.
Будет ли F # придерживаться? Это касается меня, что это так ново, и я не хочу привязываться к умирающей платформе (J # кто-нибудь?)...
Мы используем F # в течение 4 лет, и он продолжает идти от силы к силе. Я думаю, что очень маловероятно умереть в ближайшее время, не в последнюю очередь потому, что Microsoft делает такое использование F # внутренне. Например, доля F # на рынке труда в Великобритании только утроилась всего за четыре месяца.
Существуют ли большие, реальные решения (предпочтительно серверы), которые используют F #?
Да, многие. Microsoft продолжает использовать его в Bing AdCenter и Halo 3, а другие компании, такие как E-ON, Grange и Credit Suisse, похоже, создали с ней существенные системы. Я подозреваю, что еще десятки используют его в тайне, как это делает наш клиент.
Хорошо ли работает F # с большими командами инженеров? Я уверен, что ответ на этот вопрос прост, но я все еще очень незнакома с языком/инструментами.
Если вы имеете в виду большие команды программистов F #, то я не знаю: я только когда-либо работал в группах до 4 человек, использующих эти языки.
Если вы имеете в виду, как введение F # в часть большой команды работает, я могу использовать своего клиента в качестве примера. У них не было F # 2 года назад. Сегодня две лучшие из наиболее результативных команд используют F #, и они решают проблемы, которые считались неразрешимыми до введения F # в компании. Количество людей, регулярно использующих F #, постепенно увеличивалось с одного человека два года назад примерно до двух десятков человек. Они прекратили нанимать разработчиков на С++ и начали требовать от F # базовых знаний для новых сотрудников.
Однако есть неизбежные политические проблемы. Моя производительность подняла брови по всей компании, и руководство начало задавать вопрос, почему я гораздо более экономически эффективен, оказывая большое давление на команды, использующие основные языки (С++ и С#). Следовательно, сейчас мы находимся под огнем и теряем бай-ин внутри компании, потому что мы заставляем других выглядеть плохо. Я был проинструктирован в пятницу, чтобы замедлить, чтобы избежать слишком многого, чтобы люди выглядели плохо! Поэтому я теперь назначен на несколько проектов и повторяю этот "успех".; -)