2014-12-08 12 views

Odpowiedz

9

Niestety, nie sądzę, że jest to pełna lista rzeczy, które można uzyskać z przedstawieniu F # 4.0. Jednak patrząc na the list of new things on CodePlex, istnieje kilka oczywistych:

  • Wiele nowych funkcji w List, Seq i Array modułów (tak, że ekwiwalent funkcja jest dostępna we wszystkich modułach o ile to możliwe)

  • szereg innych dodatków Library (przeszukać tabeli „Library”), w tym takie rzeczy jak tryUnbox, isNull, ofObj, toObj, ofNullable, toNullable ale także AwaitTask dla zadań nierodzajową

  • Z funkcji językowych obsługa quoting arguments of method calls jest zdecydowanie wymagająca nowego jądra F #.

Ponadto, nie jestem do końca pewien, które z nich są rzeczywiście w podglądzie - podejrzewam, że większość z nich nie jest.

+0

Dzięki Tomas. A może 3,1 vs 3,0? –

+0

@CameronTaggart: Znacząco ** duże usprawnienia wydajności funkcji wewnątrz modułu 'Printf'. Możesz znaleźć szczegółowe informacje o wszystkich zmianach między różnymi wersjami na blogu [F # Team] (http://blogs.msdn.com/b/fsharpteam/) (znajdziesz inny post dla każdej wersji, jeśli trochę przewiniesz) . – ildjarn

+0

@ildjarn Rozumiem, że w środowisku uruchomieniowym występują ulepszenia wydajności podczas korzystania z nowszych wersji. Moje pytanie dotyczy naprawdę * kierowania * konkretnej wersji w czasie projektowania. Byłoby wspaniale, gdyby lista mogła być generowana z różnicami w formacie metadanych używanym przez narzędzie Visual F # Power Tools. –

2

Szybkie-n-brudny sposób, aby zobaczyć delty w powierzchni publicznego jest szopka kod z FSharp.Core public surface area unit tests :-)

Utwórz aplikację konsoli z poniżej kodu i odbudować/powtórkę w stosunku do każdej wersji, którą jesteś zainteresowany. Zrzuci wszystkie publiczne interfejsy API w tej wersji. Możesz użyć windiff lub swojego ulubionego narzędzia do porównywania interfejsów API między wersjami.

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 
+0

Właśnie zrobiłem coś podobnego, ale nie tak szybkie i brudne. Stworzyłem sens, który zawiera publiczny interfejs API udokumentowany jako plik interfejsu .fsi przy użyciu kodu FCS i VFPT. Kod dołączony. Użyj narzędzia WinMerge lub innego narzędzia diff, aby zobaczyć różnicę. https://gist.github.com/ctaggart/cd3f74cf366f2759311d –