Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
F Sharp (programming language)
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
===Language evolution=== F# uses an open development and engineering process. The language evolution process is managed by [[Don Syme]] from [[Microsoft Research]] as the [[benevolent dictator for life]] (BDFL) for the language design, together with the F# Software Foundation. Earlier versions of the F# language were designed by [[Microsoft]] and [[Microsoft Research]] using a closed development process. F# was first included in Visual Studio in the [[Visual Studio#2010|2010 edition]], at the same level as [[Visual Basic (.NET)]] and C# (albeit as an option), and remains in all later editions, thus making the language widely available and well-supported. F# originates from Microsoft Research, Cambridge, UK. The language was originally designed and implemented by [[Don Syme]],<ref name="historyMSR">{{cite web |url=https://www.microsoft.com/en-us/research/project/f-at-microsoft-research/ |title=F# Historical Acknowledgements |website=[[Microsoft]]}}</ref> according to whom in the fsharp team, they say the F is for "Fun".<ref>{{cite web |url=http://www.networkworld.com/article/2271225/software/the-a-z-of-programming-languages--f-.html |title=The A-Z of programming languages: F# |last1=Edwards |first1=Kathryn |date=23 December 2008 |website=[[Network World]] |publisher=IDG |access-date=8 August 2016 |archive-date=13 November 2018 |archive-url=https://web.archive.org/web/20181113210720/https://www.networkworld.com/article/2271225/software/the-a-z-of-programming-languages--f-.html |url-status=dead}}</ref> Andrew Kennedy contributed to the design of units of measure.<ref name="historyMSR"/> The Visual F# Tools for Visual Studio are developed by Microsoft.<ref name="historyMSR"/> The F# Software Foundation developed the F# open-source compiler and tools, incorporating the open-source compiler implementation provided by the Microsoft Visual F# Tools team.<ref name="fsharporg"/> {| class="wikitable" |+ Summary of versions |- ! F#<br/>version ! Features added |- ! 1.0 |valign="top"| * Functional programming * Discriminated unions * Records * Tuples * Pattern matching * Type abbreviations * Object-oriented programming * Structs * Signature files * Scripting files * Imperative programming * Modules (no functors) * Nested modules * .NET interoperability |- ! 2.0 | * Active patterns * Units of measure * Sequence expressions * Asynchronous programming * Agent programming * Extension members * Named arguments * Optional arguments * Array slicing * Quotations * Native interoperability * Computation expressions |- ! 3.0<ref>{{cite web|last=McNamara|first=Brian|title=More About F# 3.0 Language Features|url=http://blogs.msdn.com/b/fsharpteam/archive/2012/07/19/more-about-fsharp-3.0-language-features.aspx|access-date=September 7, 2014|publisher=Microsoft}}</ref> | * Type providers * LINQ query expressions * CLIMutable attribute * Triple-quoted strings * Auto-properties * Provided units-of-measure |- ! 3.1<ref>{{cite web|last=McNamara|first=Brian|title=Announcing a pre-release of F# 3.1|url=http://blogs.msdn.com/b/fsharpteam/archive/2013/06/27/announcing-a-pre-release-of-f-3-1-and-the-visual-f-tools-in-visual-studio-2013.aspx|access-date=September 7, 2014|publisher=Microsoft}}</ref> | * Named union type fields * Extensions to array slicing * Type inference enhancements |- ! 4.0<ref>{{Cite news|title=Announcing the RTM of Visual F# 4.0|language=en-US|url=https://blogs.msdn.microsoft.com/dotnet/2015/07/20/announcing-the-rtm-of-visual-f-4-0/|access-date=2017-03-08}}</ref> | * Printf on unitized values * Extension property initializers * Non-null provided types * Primary constructors as functions * Static parameters for provided methods * Printf interpolation * Extended #if grammar * Tailcall attribute * Multiple interface instantiations * Optional type args * Params dictionaries |- ! 4.1<ref>{{Cite news|title=Announcing F# 4.1 and the Visual F# Tools for Visual Studio 2017|language=en-US|url=https://blogs.msdn.microsoft.com/dotnet/2017/03/07/announcing-f-4-1-and-the-visual-f-tools-for-visual-studio-2017-2/|access-date=2017-03-08}}</ref> | * Struct tuples which inter-operate with C# tuples * Struct annotations for Records * Struct annotations for Single-case Discriminated Unions * Underscores in numeric literals * Caller info argument attributes * Result type and some basic Result functions * Mutually referential types and modules within the same file * Implicit "Module" syntax on modules with shared name as type * Byref returns, supporting consuming C# ref-returning methods * Error message improvements * Support for 'fixed' |- ! 4.5<ref name="blogs.msdn.microsoft.com2"/> | * Versioning alignment of binary, package, and language * Support for 'Span<T>' and related types * Ability to produce 'byref' returns * The 'voidptr' type * The 'inref<'T>' and 'outref<'T>' types to represent readonly and write-only 'byref's * 'IsByRefLike' structs * 'IsReadOnly' structs * Extension method support for 'byref<'T>'/'inref<'T>'/'outref<'T>' * 'match!' keyword in computation expressions * Relaxed upcast with 'yield' in F# seq/list/array expressions * Relaxed indentation with list and array expressions * Enumeration cases emitted as public |- ! 4.6 | * Anonymous record types |- ! 4.7<ref name="blogs.msdn.microsoft.com.4.7">{{Cite web|url=https://devblogs.microsoft.com/dotnet/announcing-f-4-7/|title=Announcing F# 4.7|date=23 September 2019}}</ref> | * Implicit yields * No more required double underscore * Indentation relaxations for parameters passed to constructors and static methods * 'nameof' function * Open static classes |- ! 5.0<ref name="blogs.msdn.microsoft.com.5.0">{{Cite web|url=https://devblogs.microsoft.com/dotnet/announcing-f-5/|title=Announcing F# 5|date=10 November 2020}}</ref> | * FSharp.Core now targets netstandard2.0 only * Package references in F# scripts * Support for Jupyter, nteract, and VSCode Notebooks * String Interpolation * Support for nameof * Open Type declarations * Enhanced Slicing * F# quotations improvements * Applicative Computation Expressions * Improved stack traces in F# async and other computation expressions * Improved .NET interop * Improved Map and Set performance in FSharp.Core * Improved compiler performance * Improved compiler analysis for library authors |- ! 6.0<ref>{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/fsharp/whats-new/fsharp-6|title=What's new in F# 6 - F# Guide|date=10 March 2023}}</ref> | * Tasks * Simpler indexing * Augments to "active patterns" * Overloaded custom operations in computation expressions * βasβ patterns * Indentation syntax revisions * More implicit conversions * More implicit upcast conversions * Implicit integer conversions * First-class support for .NET-style implicit conversions * Optional warnings for implicit conversions * Formatting for binary numbers * Discards on use bindings * InlineIfLambda optimizer directive * Resumable code * More collection functions * Map has Keys and Values * More intrinsics for NativePtr * More numeric types with unit annotations * Informational warnings for rarely used symbolic operators |- ! 7.0<ref>{{Cite web |url=https://devblogs.microsoft.com/dotnet/announcing-fsharp-7/ |title=Announcing F# 7 |date=8 November 2022}}</ref> | * Static abstract members support in interfaces * Making working with SRTPs (statically resolved type parameters) easier * Required properties checking * Init scope and init-only properties * Reference assemblies support * F# self-contained deployments & Native AOT * Added support for N-d arrays up to rank 32. * Result module functions parity with Option. * Fixes in resumable state machines codegen for the tasks builds. * Better codegen for compiler-generated side-effect-free property getters * ARM64 platform-specific compiler and ARM64 target support in F# compiler. Dependency manager #r caching support * Parallel type-checking and project-checking support (experimental, can be enabled via VS setting, or by tooling authors) * Miscellaneous bugfixes and improvements. |- ! 8.0<ref>{{Cite web|url=https://devblogs.microsoft.com/dotnet/announcing-fsharp-8/|title=Announcing F# 8| date=14 November 2023}}</ref> | * _.Property shorthand for (fun x -> x.Property) * Nested record field copy and update * while! (while bang) feature <ref>{{Cite web |url=https://devblogs.microsoft.com/dotnet/simplifying-fsharp-computations-with-the-new-while-keyword/ |title=Simplifying F# computations with the new 'while!' keyword' |date=20 September 2023}}</ref> * Extended string interpolation syntax * Use and compose string literals for printf and related functions * Arithmetic operators in literals * Type constraint intersection syntax * Extended fixed binding * Easier [<Extension>] method definition * Static members in interfaces * Static let in discriminated unions, records, structs, and types without primary constructors * try-with within seq{}, [], and [||] collection expressions * Recursive calls and yield! within exception handler * Tail call attribute * [<Struct>] unions can now have > 49 cases * Strict indentation rules * New diagnostics from the compiler * Switches for compiler parallelization |- ! 9.0<ref>{{Cite web|url=https://learn.microsoft.com/en-us/dotnet/fsharp/whats-new/fsharp-9|title=What's new in F# 9| date=12 November 2024}}</ref> | * Nullable reference types * Discriminated union .Is* properties * Partial active patterns can return bool instead of unit option * Prefer extension methods to intrinsic properties when arguments are provided * Empty-bodied computation expressions * Hash directives are allowed to take non-string arguments * Extended #help directive in fsi to show documentation in the REPL * Allow #nowarn to support the FS prefix on error codes to disable warnings * Warning about TailCall attribute on non-recursive functions or let-bound values * Enforce attribute targets * Updates to the standard library (FSharp.Core) * Developer productivity improvements * Performance improvements * Improvements in tooling |}
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)