Для тех из вас, кто использует f #, какие области функциональности вы кодируете с ним? Какой язык действительно хорошо подходит и что он делает с гораздо большей мощностью и легкостью, чем сказать С#?
В каких областях кода вы используете f #?
Ответ 1
Подпишись поджаренными барабанами # 24:
- Алгоритмическая обработка (включая вычисления)
- Создание DSL
- Параллельная обработка (неизменяемые данные, очередность сообщений, асинхронные рабочие процессы)
И, конечно, для многих систем F # может сформироваться ядро обработки, но мне кажется, что он будет чаще, чем не быть обернутым (интерфейсом, пользователем или иным) с С#/VB, чтобы обеспечить обычный интерфейс.
Ответ 2
Ответ 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), разбора и хранения двоичных сообщений протокола от промышленных устройств. В настоящее время я тестирую асинхронные рабочие процессы.
Следующий проект - визуализация и анализ полученных данных.