为F#4.0或3.1而不是3.0定位F#运行时的任何好处?

时间:2014-12-08 17:47:54

标签: f#

在Visual Studio 2015 Preview中,您可以从三个目标F#运行时中选择:

enter image description here

定位较新版本有什么好处吗?他们是否允许您访问其他API?如果是这样,哪些?如果我们能够生成一份全面的清单,那就太好了。

F# Core Library Reference

3 个答案:

答案 0 :(得分:9)

不幸的是,我不认为有一个完整的列表,你可以从引用F#4.0获得。但是,看the list of new things on CodePlex,有一些明显的问题:

  • ListSeqArray模块中的许多新功能(以便在可能的情况下,所有模块都提供相同的功能)

  • 其他一些图书馆添加(在表格中搜索"图书馆"),包括tryUnboxisNullofObj,{{ 1}},toObjofNullable以及toNullable用于非通用任务

  • 在语言功能之外,对quoting arguments of method calls的支持绝对是需要新F#核心的支持。

另外,我不太确定其中哪些实际上在预览中 - 我怀疑其中大部分都不是。

答案 1 :(得分:3)

我能够为FSharp.Core的公共表面区域生成3.1和4.0的新增加的完整列表。我用来生成差异列表的代码包含在内,可以重新使用。

https://gist.github.com/ctaggart/0205da3f153cd20b099d

答案 2 :(得分:2)

查看公共表面区域中的增量的快速方法是将代码从FSharp.Core public surface area unit tests中删除: - )

使用以下代码创建一个控制台应用程序,并针对您感兴趣的每个版本重建/重新运行它。它将转储该版本中的所有公共API。您可以使用windiff或您选择的差异工具来比较版本之间的API。

open System.Reflection
let file = typeof<int list>.Assembly.Location 
let asm = Assembly.ReflectionOnlyLoadFrom(file)
let referenced = asm.GetReferencedAssemblies()

for ref in referenced do
    Assembly.ReflectionOnlyLoad(ref.FullName) |> ignore

let types = asm.GetExportedTypes()

let values = 
    types 
    |> Array.collect (fun t -> t.GetMembers())
    |> Array.map (fun v -> sprintf "%s: %s" (v.ReflectedType.ToString()) (v.ToString()))
    |> Array.sort
    |> String.concat "\r\n"

// dump to a file or print to console
printfn "%s" values