2016-01-20 27 views
5

Mamy this announcement, że. Net Core zmienia nazwę na 1.0 (mylące, ale w porządku, cokolwiek). W nim Hanselman stwierdza:Czy .Net Core generuje taką samą IL jako standardową .Net?

It doesn't yet support VB or F#. 

Co sprawia, że ​​myślę, że czegoś brakuje. Moja logika działa w następujący sposób.

Wykonaj dwie proste proste aplikacje Hello World w języku C#, a drugą w VB. Zakładając, że zachowałeś prostotę, podczas kompilacji ze standardową strukturą msbuild/.Net powinieneś uzyskać identyczną IL. Rozumiem, że możesz wtedy zdobyć .Net core, aby uruchomić tę samą bibliotekę dll, ponieważ jest to IL na tym poziomie. Dlaczego więc powiedzieć, że nie obsługuje VB? Czy to nie obsługuje go poza prostymi sytuacjami (gdzie najprawdopodobniej powinieneś odwoływać się do rzeczy specyficznych dla VB)? Czy jest to fakt, że faktyczna IL generowana podczas kompilacji dla .Net Framework versus .Net Core jest inna i nie ma jeszcze kompilatora VB/F #?

+0

prawdopodobnie dlatego, że te języki mają specyficzne językowo biblioteki referencyjne (np. Microsoft.VisualBasic.dll), które mają własne odwołania, które nie obsługują jądra. – Jeff

+0

@Jeff dobrze tak, ale podałem to w pytaniu - nie * masz * używać 'Microsoft.VisualBasic.dll' w aplikacji vb (i możesz używać go dobrze w C# jednym). Więc to albo to, że ta biblioteka dll nie została przeniesiona do .Net Core, ale IL jest identyczny i nie jest do końca poprawny, że vb-wont-work, lub faktyczny IL jest inny. Który to jest? –

+5

Istnieje tylko jeden rodzaj IL, wersja .NETCore nie jest inna. Twoje założenie, że Microsoft.VisualBasic.dll nie jest konieczne, jest niepoprawne, kompilator automatycznie generuje kod, który z niego korzysta. Podstawowe rzeczy, takie jak porównanie ciągów, które muszą obserwować porównywanie opcji. Tak samo dla F # i FSharp.Core.dll –

Odpowiedz

2

Tak generuje taką samą IL

(nie mogłem się oprzeć, żeby go odebrać takie proste)

Niemniej jednak do części VB: W odniesieniu do wsparcia VB: Bieganie na .NET Rdzenia wymaga kompilatora (zaimplementowany w Roslyn), komenda CLI dotnet-compile-vb (nie zaimplementowana ... dla F # społeczności już ją dostarczyła) i obsługiwana wersja Microsoft.VisualBasic (zaimplementowana w corefx). Domyślam się, że obsługa VisualBasic jest taka sama, jak w przypadku np. ASP.NET SignalR. Kod zawiera 95%, działa, ale nie jest oficjalnie testowany i obsługiwany. Jest to kwestia czasu, a nie technologii.

IMHO: Biorąc pod uwagę, że istnieje zestaw Microsoft.VisualBasic, a IL jest taki sam, teoretycznie może nawet wykonać skompilowany zespół VB, o ile kompilator używał platformy Core opartej na System.Runtime.

Powiązane problemy