visual una studio servicios publica principales librerias lenguaje funciones definicion clases biblioteca f# cil

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:

  1. 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.
  2. 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.