In mid-August 2018, Microsoft released the production Version 4.5 of F#, which supports the Span value type from .Net Core to improve code.
Current version: What’s new in F# 4.5
Span, aka Span<T>, enables the representation of contiguous regions in arbitrary memory. With Span, Microsoft wants F# to have better code generation particularly for byref
-like constructions and full parity with .Net Core performance innovations. Interoperability with high-performance code also is a goal.
Span allows for safe use of performance-oriented constructs in a restrictive manner. For example, a developer cannot define an F# record type with a Span inside it, because Span is a byref
-like type and thus can only be contained in other byref
types.
The Span feature set in F# 4.5 includes:
- The
voidptr
type. - Comprehensive safety checks to prevent unsound code.
- The ability to produce
IsReadOnly
structs. - The ability to produce
IsByRefLike
structs. inref<’T>
andoutref<’T>
types, which are read- and write-only versions ofbyref<’T>
.- The ability to write extension methods on
byref<'T>
,inref<'T>
, andoutref<'T>
.