В каких областях F # "абсолютно не имеет смысла в использовании"?

Дон Симе в своем разговоре SPLASH говорит, что F # НЕ предназначен для замены С#, хотя он имеет общие возможности. Далее он говорит, что есть области, где F # не имеет смысла использовать, но не распространяется на тезис.

  • Может кто-нибудь, пожалуйста, скажите, какие области следует избегать при использовании F #?
  • Вы также можете указать области, где сияет С#.

Похожие вопросы:

В каких областях использование F # может быть более подходящим, чем С#?

Ответ 1

Я считаю, что замена языка как богатого и зрелого, так как С# будет очень дорогим. Так, например, на данный момент С# является абсолютно лучшим выбором для разработки WinForms, если использование конструктора Visual Studio WinForms может дать вам преимущество: у F # нет дизайнера WinForms.

С# также имеет лучшую поддержку LINQ-to-SQL на данный момент. Я уверен, что в этой строке есть много других примеров.

Затем требуется, чтобы вся квалифицированная рабочая сила С# обновила свои навыки до F #, сохраняя при этом навыки С# для поддержки приложений, опять же дорогие.

Наконец, С# - отличный язык с множеством отличных функций, некоторые F # даже не имеют аналогичных дженериков co/contra и из командной строки для динамического программирования против DLR (у F # просто нереализованный оператор).

Поэтому, не ожидая, что F # заменит С#, F # может развиваться по-новому, вместо того чтобы тратить все время на то, чтобы догнать в уже хорошо освещенных областях.

Ответ 2

Это сложный вопрос, потому что он не очень хорошо подготовлен. Вы говорите об общем языке или говорите о языке вместе с текущей поддержкой IDE? Или вы говорите об использовании F #, если библиотеки доступны?

  • Язык вообще. Я не думаю, что есть области, где использование F # было бы абсолютной бессмыслицей. Это было бы здорово для системного программирования полностью управляемой ОС (например, Singularity), и я думаю, что функциональные программы легче прояснить формально (что может быть большой проблемой для ОС). Для низкоуровневых встроенных систем вы можете использовать функции метапрограммирования и привязки к языку (например, для моделирования потока сигнала в оборудовании и т.д.).

  • Язык с текущей IDE. Текущая F # IDE имеет некоторые ограничения - она ​​не работает с дизайнером WinForms (но хорошо работает с Blend и WPF).

  • Язык, предоставляемый разработчиком образования. Труднее нанять программистов на F #, чем нанимать программистов на С#. Если вы создаете какое-то приложение, у которого нет сложного ядра (например, обычный "интерфейс для базы данных" ), то его разработка на С# будет дешевле (если бы вы могли нанять хороших разработчиков F #, они, вероятно, закончили бы это быстрее и с меньшими затратами ошибки, но это может не стоить).

  • Доступные для данного языка библиотеки. Если вы хотите ограничить себя использованием F # с помощью только тех библиотек, которые хорошо работают с ним, тогда домен сократится немного больше. Например, LINQ to SQL и ASP.NET MVC можно использовать с F #, но это не идеально. Однако для многих проектов было бы целесообразно разработать собственные библиотеки, а затем F # станет отличным языком для этого.

Ответ 3

Хороший вопрос. Я бы сказал, что есть нулевые языковые причины и многие неудачные навыки, склонность и отношение со стороны разработчиков, менеджеров и клиентов.

Ответ 4

Многие технологии Microsoft UI, такие как WPF, имеют отличную поддержку привязки данных. Эффективная привязка данных использует двустороннюю привязку для обновления базовых объектов, когда пользователь взаимодействует с пользовательским интерфейсом. Это означает, что эффективная привязка данных требует измененных объектов.

F #, с своим акцентом на неизменяемые типы, довольно плохо соответствует типу модели привязки данных. Хотя в F # можно создавать изменяемые типы, это приведет к удалению многих преимуществ языка. Это просто имеет смысл использовать язык (например, С#), где изменчивость становится более естественной.

Ответ 5

Возможно, вы захотите дважды подумать об использовании его для разработки ядра операционной системы или встроенных систем низкого уровня: -)

Ответ 6

Если вы готовы отказаться от инструментов, специфичных для С#, и заплатите за любую стоимость усыновления, нет никакой конкретной области, где F # не будет, по меньшей мере, такой же способной, как С#.

Ответ 7

Веб-приложения, в которых Frameworks, например. ASP.NET MVC лучше подходит для С#. "Абсолютно никакого смысла" - это крайность, я бы сказал "при нормальных обстоятельствах".

Конечно, он может быть использован для библиотек, на которые ссылается веб-приложение, но не самого реального приложения.

Ответ 8

Ну, рискуя заявить очевидное, F # - это, прежде всего, функциональный язык программирования, а программирование ООП в F # может быть болью в шее. Поэтому, если вы работаете с проблемой, которая лучше всего выражается в ООП, я полагаю, что использование С# имеет больше смысла.

Взаимно рекурсивные типы и явная реализация интерфейсов являются первыми примерами из верхней части моей главы о том, почему ООП в F # может быть громоздким.

Пример (часто цитируемый) примера "проблема, которая лучше всего выражается в ООП", создает библиотеку пользовательского интерфейса. У вас есть много виджетов, которые инкапсулируют свое собственное состояние, и вы хотите попросить их сделать несколько вещей, таких как "нарисовать себя" полиморфно (это даже слово?)

Ответ 9

Пока f # полностью не поддерживается Visual Studio (ASP.NET, WebForms, WPF и т.д.) и сторонними инструментами, f # всегда будет гражданином второго класса.

Посмотрите на это, выбор языка обычно не имеет большого значения для производительности по сравнению с твердой библиотекой (.NET, доступной как для С#, так и для f # - нет преимуществ для использования здесь), IDE (intellisense, синтаксическая раскраска, и т.д.) (только частично поддерживаемая f #, насколько я знаю... например, без поддержки Razor) и сторонних инструментов (например, resharper).

Таким образом, я не думаю, что кто-то может рекомендовать полную замену С#, пока все эти инструменты не будут установлены для f #. Хорошим компромиссом является использование f # в библиотеках классов и продолжение использования С# на передней панели.