В каких областях кода вы используете f #?

Для тех из вас, кто использует f #, какие области функциональности вы кодируете с ним? Какой язык действительно хорошо подходит и что он делает с гораздо большей мощностью и легкостью, чем сказать С#?

Ответ 1

Подпишись поджаренными барабанами # 24:

  • Алгоритмическая обработка (включая вычисления)
  • Создание DSL
  • Параллельная обработка (неизменяемые данные, очередность сообщений, асинхронные рабочие процессы)

И, конечно, для многих систем F # может сформироваться ядро ​​обработки, но мне кажется, что он будет чаще, чем не быть обернутым (интерфейсом, пользователем или иным) с С#/VB, чтобы обеспечить обычный интерфейс.

Ответ 2

Разбор с FParsec (порт-в-духе Haskell Parsec)

Ответ 3

В настоящее время я использую F # для разработки моей следующей инди-видеоигры. До сих пор я обнаружил, что мой обычный подход OO отличается от того, как я развивается в С#.

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

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

Самое большое преимущество, которое я видел до сих пор, - это правильность моих кодов. Я знаю, это звучит смешно, но каждый раз, когда я получаю код для компиляции, он работал так, как ожидалось. Я надеюсь, что это все еще так, когда я разбиваю десять тысяч строк кода.

Ответ 4

  • Научные работы (Математические и статистические расчеты, визуализация, оптимизация,..)
  • Параллельное программирование (поддержка F # асинхронные рабочие процессы, стиль Erlang concurrency, Parallel FX,...)
  • Языковое программирование (например. DSL)
  • Анализ данных
  • ...

Ответ 5

В настоящее время я изучаю использование F # в

  • SOA
  • Параллельное выполнение
  • Интенсивность данных
  • Длительные процессы

Ответ 6

Малые (ish) сценарии обработки данных. Подумайте, анализируя длинные файлы журналов и пытаясь обнаружить "странное" поведение. Активные шаблоны и потоковая обработка делают для приятных (и быстрых) программ. Я использовал, чтобы писать их на С#, но они были выбрасываются - используя F #, я действительно нахожу, что повторно использую предыдущие скрипты и расширяю их.

Тестирование с использованием FsCheck (хорошо, я думаю, что обманываю, когда я сам портировал вещь...), но это было удивительно полезный (я был на самом деле удивлен этим сам;)) не только для тестирования программ F #, но и для .NET-библиотек в целом. Поскольку FsCheck является тестирующим DSL, я думаю, я тоже должен присоединиться к DSL.

Я давно хотел использовать F # с WPF или XNA, но не стал обходиться.

В отличие от некоторых, я обнаружил, что после того, как вы получите синтаксис построения неявного класса F #, программирование OO с использованием F # так же приятно, если не больше, чем с помощью С# или VB.

Верно, что если вы напишете библиотеку в F #, если вы не будете очень осторожны, она окажется интероперабельной только в теории. Поистине интероперабельные библиотеки F # либо должны быть очень осторожны, какие конструкторы F # использовать, либо писать обертку С#/VB.

Курт

Ответ 7

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

Мы используем его для веб-сервисов, сайтов ASP.NET MVC, демонов,

Вопрос в том, где не использовать его. Сейчас, похоже, в основном там, где отсутствует поддержка инструмента. Так, например, с ASP.NET, встроенный код страницы ASPX является С#, но контроллеры и все остальное находится в F #.

Несколько мест, где F # не так гладко, как я полагаю, будут разработаны в будущих выпусках.

Ответ 8

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

  • Динамика вычислительной жидкости
  • Обработка физических данных
  • Трассировка лучей
  • Разработка данных
  • Медицинская визуализация
  • Программное обеспечение для управления технологией
  • Обработка цифрового сигнала
  • Биоинформатика

На самом деле, проверьте эту страницу для более подробных примеров использования GPGPU.

Ответ 9

Я рассматриваю возможность использования F # для обработки HTML, потому что синтаксис соответствия шаблону списка подходит для проблемного домена (Пролог, вероятно, лучше, но все же).

Ответ 10

1) Моделирование (муравьи и мицелий)

Легко использовать асинхронные рабочие процессы для массового параллельного моделирования.

2) Тесты модулей для API С#

F # делает для коротких, сладких и очень читаемых тестов. Кроме того, FsStory довольно приятный.

3) Анализ данных и визуализация

У него отличные библиотеки визуализации, и очень быстро можно попробовать разные вещи. Мне также нравится VSLab и надеюсь, что он скоро увидит новый релиз.

4) Быстрое развитие XNA

Как только у вас есть небольшая структура, настроенная для сохранения объектно-ориентированной архитектуры XNA, разработка F # намного быстрее, а также намного проще экспериментировать.

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

Ответ 11

Я использую цитаты, компиляцию выражения linq, dsls, рабочие процессы async и типичные конструкции fp для клиента на данный момент. Много взаимодействий с С#.

Ответ 12

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

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

Ответ 13

Анализ и трансформация программ.

Ответ 14

Места, где много математических вычислений.

Ответ 15

Я использую F # для приема (TCP), разбора и хранения двоичных сообщений протокола от промышленных устройств. В настоящее время я тестирую асинхронные рабочие процессы.

Следующий проект - визуализация и анализ полученных данных.