|
| 1 | +Features Added in F# Language Versions |
| 2 | +==================== |
| 3 | + |
| 4 | +# [F# 1.0](https://docs.microsoft.com/en-us/archive/blogs/dsyme/welcome-to-dons-f-blog) |
| 5 | + |
| 6 | +- Discriminated unions |
| 7 | +- Records |
| 8 | +- Tuples |
| 9 | +- Pattern matching |
| 10 | +- Type abbreviations |
| 11 | +- Structs |
| 12 | +- Signature files |
| 13 | +- Imperative programming |
| 14 | +- Modules (no functors) |
| 15 | +- Nested modules |
| 16 | +- .NET Interoperability |
| 17 | + |
| 18 | +# [F# 1.1](https://docs.microsoft.com/en-us/archive/blogs/dsyme/a-taste-of-whats-new-in-f-1-1) |
| 19 | + |
| 20 | +- Interactive environment |
| 21 | +- Object programming |
| 22 | +- Encapsulation Extensions |
| 23 | + |
| 24 | +# [F# 2.0](https://fsharp.org/specs/language-spec/2.0/FSharpSpec-2.0-April-2012.pdf) |
| 25 | + |
| 26 | +- Active patterns |
| 27 | +- Units of measure |
| 28 | +- Object expressions |
| 29 | +- Sequence expressions |
| 30 | +- Asynchronous programming |
| 31 | +- Agent programming |
| 32 | +- Extension members |
| 33 | +- Named arguments |
| 34 | +- Optional arguments |
| 35 | +- Array slicing |
| 36 | +- Quotations |
| 37 | +- Native interoperability |
| 38 | +- Computation expressions |
| 39 | + |
| 40 | +# [F# 3.0](https://fsharp.org/specs/language-spec/3.0/FSharpSpec-3.0-final.pdf) |
| 41 | + |
| 42 | +- Type providers |
| 43 | +- LINQ query expressions |
| 44 | +- CLIMutable attribute |
| 45 | +- Triple-quoted strings |
| 46 | +- Auto-properties |
| 47 | +- Provided units-of-measure |
| 48 | + |
| 49 | +# [F# 3.1](https://fsharp.org/specs/language-spec/3.1/FSharpSpec-3.1-final.pdf) |
| 50 | + |
| 51 | +- Named union type fields |
| 52 | +- Extensions to array slicing |
| 53 | +- Type inference enhancements |
| 54 | + |
| 55 | +# [F# 4.0](https://fsharp.org/specs/language-spec/4.0/FSharpSpec-4.0-final.pdf) |
| 56 | + |
| 57 | +- `printf` on unitized values |
| 58 | +- Extension property initializers |
| 59 | +- Non-null provided types |
| 60 | +- Primary constructors as functions |
| 61 | +- Static parameters for provided methods |
| 62 | +- `printf` interpolation |
| 63 | +- Extended `#if` grammar |
| 64 | +- Multiple interface instantiations |
| 65 | +- Optional type args |
| 66 | +- Params dictionaries |
| 67 | + |
| 68 | +# [F# 4.1](https://fsharp.org/specs/language-spec/4.1/FSharpSpec-4.1-latest.pdf) |
| 69 | + |
| 70 | +- Struct tuples which inter-operate with C# tuples |
| 71 | +- Struct annotations for Records |
| 72 | +- Struct annotations for Single-case Discriminated Unions |
| 73 | +- Underscores in numeric literals |
| 74 | +- Caller info argument attributes |
| 75 | +- Result type and some basic Result functions |
| 76 | +- Mutually referential types and modules within the same file |
| 77 | +- Implicit `Module` syntax on modules with shared name as type |
| 78 | +- Byref returns, supporting consuming C# `ref`-returning methods |
| 79 | +- Error message improvements |
| 80 | +- Support for `fixed` |
| 81 | + |
| 82 | +# [F# 4.5](https://docs.microsoft.com/en-us/dotnet/fsharp/whats-new/fsharp-45) |
| 83 | + |
| 84 | +- Versioning alignment of binary, package, and language |
| 85 | +- Support for `Span<'T>` and related types |
| 86 | +- Ability to produce `byref` returns |
| 87 | +- The `voidptr` type |
| 88 | +- The `inref<'T>` and `outref<'T>` types to represent readonly and write-only `byref`s |
| 89 | +- `IsByRefLike` structs |
| 90 | +- `IsReadOnly` structs |
| 91 | +- Extension method support for `byref<'T>`/`inref<'T>`/`outref<'T>` |
| 92 | +- `match!` keyword in computation expressions |
| 93 | +- Relaxed upcast with `yield` in F# sequence/list/array expressions |
| 94 | +- Relaxed indentation with list and array expressions |
| 95 | +- Enumeration cases emitted as public |
| 96 | + |
| 97 | +# [F# 4.6](https://docs.microsoft.com/en-us/dotnet/fsharp/whats-new/fsharp-46) |
| 98 | + |
| 99 | +- Anonymous records |
| 100 | +- `ValueOption` module functions |
| 101 | + |
| 102 | +# [F# 4.7](https://docs.microsoft.com/en-us/dotnet/fsharp/whats-new/fsharp-47) |
| 103 | + |
| 104 | +- Compiler support for `LangVersion` |
| 105 | +- Implicit `yield`s |
| 106 | +- No more required double underscore (wildcard identifier) |
| 107 | +- Indentation relaxations for parameters passed to constructors and static methods |
0 commit comments