Reading sources of Array2D module, I've stumbled upon this interesting construct in implementation of many core functions, for example:
[<CompiledName("Get")>] let get (array: 'T[,]) (n:int) (m:int) = (# "ldelem.multi 2 !0" type ('T) array n m : 'T #)
I can only assume that this is the syntax to inline CIL and is used here obviously to gain performance benefits. However, when I've tried to use this syntax in my program, I get an error:
warning FS0042: This construct is deprecated: it is only for use in the F# library
What exactly is this? Is there any detailed documentation?
I think that this has 2 purposes:
Add
functions in a high performance way which is hard with the F# type system.You can actually use this but you have to specify the --compiling-fslib
(undocumented) and --standalone
flags in your code.
I've found some details in usenet archives: http://osdir.com/ml/lang.fsharp.general/2008-01/msg00009.html
Embedded IL in F# codes. Is this feature officially supported
Not really. The 99.9% purpose of this feature is for operations defined in FSharp.Core.dll (called fslib.dll in 1.9.2.9 and before).
Historically it has been useful to allow end-users to embed IL in order to access .NET IL functionality not accessible by F# library or language constructs using their own embedded IL. The need for this is becoming much more rare, indeed almost non-existent, now that the F# library has matured a bit more. We expect this to continue to be the case. It's even possible that we will make this a library-only feature in the "product" version of F#, though we have not yet made a final decision in this regard.
This was a message from Don Syme, dated January of 2008.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With