Как F # работает с тысячами стандартных изменяемых типов в BCL? - PullRequest
2 голосов
/ 03 февраля 2010

Типы точек, размеров и т. Д.

Я также слышал, что строки в .NET не являются неизменными. Использует ли F # эти или альтернативные неизменяемые версии?

Если он использует стандартные изменяемые типы BCL, не нарушит ли это доверие к неизменности, которое F # дает и во время компиляции, и во время выполнения?

РЕДАКТИРОВАТЬ: Я хотел спросить, есть ли у вас альтернативные неизменяемые версии этих типов BCL, поэтому мне не нужно писать все эти различные типы BCL с нуля. Или это желаемое поведение, что эти типы (такие как Точка, Размер и т. Д.) Все еще изменчивы при использовании WinForms или еще много чего?

Ответы [ 3 ]

10 голосов
/ 03 февраля 2010

Вы можете прекрасно использовать типы из .Net BCL (библиотеки базовых классов) из F #.Многие из этих типов являются изменяемыми и, следовательно, имеют все связанные с этим издержки и преимущества изменяемых данных.

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

Тем не менее, среда выполнения F # (FSharp.Core.dll) включает в себя несколько неизменяемых классов коллекций, таких как list , Set и Map (которые, примерно, являются неизменяемыми аналогами классов List, HashSet и Dictionary, найденных в System.Collections.Generic), поскольку часто полезно иметь неизменяемые коллекции, например, для постоянных снимковв многопоточном коде.

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

1 голос
/ 03 февраля 2010

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

Итак, чтобы ответить на ваш вопрос: он отлично с ними справляется.

0 голосов
/ 03 февраля 2010

Вы можете использовать ключевое слово mutable для использования изменяемых структур данных em F #. F # не является чисто функциональным языком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...