f# - una - librerias en lenguaje c y sus funciones
¿Qué es la sintaxis(#...#) vista en la implementación de la biblioteca estándar de F#? (2)
Creo que esto tiene 2 propósitos:
- Estas funciones se compilan exactamente a 1 instrucción CIL que debe codificarse en algún lugar, por lo que la codificación en la fuente parece ser la mejor.
- Permite algunos trucos adicionales al definir las funciones de adición polimórficas de una manera de alto rendimiento que es difícil con el sistema de tipo F #.
Puede usar esto pero debe especificar los --compiling-fslib
(no documentados) y --standalone
en su código.
Al leer las fuentes del módulo Array2D, me topé con este interesante constructo en la implementación de muchas funciones básicas, por ejemplo:
[<CompiledName("Get")>]
let get (array: ''T[,]) (n:int) (m:int) = (# "ldelem.multi 2 !0" type (''T) array n m : ''T #)
Solo puedo asumir que esta es la sintaxis de CIL en línea y se usa aquí, obviamente, para obtener beneficios de rendimiento. Sin embargo, cuando intenté usar esta sintaxis en mi programa, obtengo un error:
warning FS0042: This construct is deprecated: it is only for use in the F# library
¿Qué es exactamente esto? ¿Hay alguna documentación detallada?
He encontrado algunos detalles en los archivos de usenet: http://osdir.com/ml/lang.fsharp.general/2008-01/msg00009.html
IL incrustado en los códigos F #. Es esta característica oficialmente compatible
Realmente no. El propósito del 99.9% de esta función es para las operaciones definidas en FSharp.Core.dll (llamadas fslib.dll en 1.9.2.9 y anteriores).
Históricamente, ha sido útil permitir a los usuarios finales incrustar IL para acceder a la funcionalidad .NET IL a la que no pueden acceder las bibliotecas F # o las construcciones de lenguaje utilizando su propia IL incorporada. La necesidad de esto se está volviendo mucho más rara, de hecho casi inexistente, ahora que la biblioteca F # ha madurado un poco más. Esperamos que esto siga siendo el caso. Incluso es posible que hagamos de esta característica solo de biblioteca en la versión "producto" de F #, aunque todavía no hayamos tomado una decisión final al respecto.
Este fue un mensaje de Don Syme, fechado en enero de 2008.