2017年10月21日 星期六

[.net framework 工程師看.net core][03]工程師的語言 C#

image
圖片來源:https://pixabay.com/en/annual-report-book-brochure-686343/

在上一篇介紹完了.Net Framework的概觀(起源.Net Framework) - 在這一篇將會介紹和.Net Framework一起誕生的語言:C#

將會了解到C#版本的歷史、主要版本之間的功能差異和.Net Compiler Platform (Roslyn) 帶來的差異

C#是什麼

C#(唸法:C Sharp)是一個語法結構類似Java的OO語言。和.Net Framework一起誕生出來,可以說C#是.Net 開發的第一語言。

目前組新的版本是 C# 7.1

C#版本功能

基本上C#會和某一個.Net Framework版本搭配,並且也會搭配某一個Visual Studio (VS) 版本一起release。

和VS一起release的原因是有些語法糖的修改,舉例來說VS 2015就不支援C# 7.0的語法 - 在VS 2015上面會出現好像錯誤,但是可以透過更新.Net Compiler Platform來達到編譯成功

相關可以參考:[Visual Studio]如何在Visual Studio 2015使用C#7的功能?

image
C# 和 .Net 版本對應和版號。 來源:http://www.webdevelopmenthelp.net/2015/06/new-features-in-csharp-6.html

每一個Release基本上都會有一個主要的主題:

  1. 2.0 - 加入 泛型(Generic)因為如此1和2不兼容
  2. 3.0 - 加入 Linq
  3. 4.0 - 加入 dynamic
  4. 5.0 - 加入 async await
  5. 6.0 - 比較偏語法糖(syntax sugar)類型的修改
  6. 7.0 - 比較偏語法糖(syntax sugar)類型的修改
更多版本之間的差異可以參考:The history of C#

.Net Framework如何執行C#程式

image
整個編譯和執行過程

C#經過編譯器(compiler)編譯之後產生的是所謂的Intermediate Language (IL),最後當使用者執行的時候,CLR在把 IL run 起來透過及時編譯(JIT compile)變成機器碼(machine code)執行在機器上面。

由於run 起來的CLR會幫忙管理底層的一些資源,例如memory的管理,因此C# 又稱之為managed code。

除了C#以外的其他.Net Framework語言

精準一點說,.Net Framework (CLR) 支援的語言只有一種,那就是 IL。

不過.Net Framework一起帶來的工具裡面包含compiler支援3種語言編譯成為IL:

  1. C#
  2. VB .Net - 語法類似VB6,當初.Net剛出來希望鼓勵大家轉.Net因此提供
  3. F# - 偏Functional Programing的語言,Serverless的服務Azure Function就有支援

不管是這三種語言的那種,最後compile之後(不管是exe還是dll)都是IL - 因此3種語言的結果是可以互相使用。換句話說,VB .Net寫的Library,可以直接在C#的console使用。

compiler的進化

在早期版本的C# compiler是和.Net Framework一起安裝的,這個compiler的程式名稱是csc.exe

不過因為很多原因(例如更容易做meta programing等好處),後來compiler被獨立出來,變成一個自己的專案叫做.Net Compiler Platform (aka Roslyn) (官方repo)。

image
.Net Framework的csc只有支援到C# 5

因為這個原因,所以C# 6.0以上的compiler使用的都是Roslyn。

Roslyn的一個好處是,能夠用nuget package安裝並且在編譯的時候自動使用nuget裝的版本,而不是電腦安裝的版本。這個在CI建制上也更加方便。

image
可以看到Roslyn和bin包在了一起,並且Roslyn還是保留了csc.exe

結語

在這篇對於C#的基本功能有做了基本的介紹,並且也對Roslyn - 新的compiler做了基本介紹。

對於整個.Net平台和開發的語言C#應該有了一些基本的概念了之後,接下來就可以看一下.Net Core的平台概觀和.Net Framework有什麼不同。


沒有留言 :

張貼留言