Anh Em Nhà .NET – phần 1

1893

Thật sự thì có rất nhiều bạn trong đó có mình đã và đang làm việc với .NET rất lâu năm và nhất nhiều. Tuy nhiên, khi được hỏi và giải thích cho một ai đó rõ về hệ sinh thái của .NET cũng như những khác biệt giữa .NET Framework, .NET Core và .NET Standard như thế nào thì thật sự mọi người thường bị lúng túng và ú ớ trả lời.

Trong bài viết này chúng ta sẽ cùng nhau làm sáng tỏ những mù mờ về những khái niệm này. Qua đó cũng giúp chúng ta có được một kiến thức nền tảng tốt về những gì chúng ta đang sử dụng để có thể phát triển dự án tốt hơn, chất lượng hơn.

.NET là nền tảng mã nguồn mở do Microsoft phát triển. Dùng để hỗ trợ cho các developers xây dựng các ứng dụng khác nhau và hỗ trợ ứng dụng chạy đa nền tảng (cross-platform).

.NET là một hệ sinh thái do đó nó hỗ trợ developers nhiều ngôn ngữ lập trình (C#, VB, F#,… ), nhiều trình soạn thảo (VS Code, Visual Studio) và hàng loạt các thư viện để xây dựng các ứng dụng như: web, mobile app, desktop app, gaming và IoT.

Các thành phần kiến trúc chính trong .NET bao gồm:

  • .NET Implementations
  • .NET Runtimes
  • .NET Standard
  • .NET Toolings and Common Infrastructure
This image has an empty alt attribute; its file name is ecosystem_grid_v2.png

Trong bài này, chúng ta chỉ tập trung tìm hiểu về .NET Ecosystem. Thế nên, để hiểu rõ hơn code bên trong các ứng dụng .NET hoạt động thế nào chúng ta xem hình minh họa sau đây:

Hình 3

Trong Hình 3, phần Compile time là quá trình build (lúc bạn code), còn Runtime là quá trình thực thi chương trình (lúc bạn chạy chương trình).

Sau khi bạn viết code xong, bạn có thể dùng tool Visual Studio để build hoặc dùng lệnh ‘dotnet build‘, lúc này source code của bạn sẽ được biên dịch sang một ngôn ngữ trung gian được gọi là MSIL (Microsoft Intermediate Language). Quá trình này gọi là Compile time.

Khi ứng dụng được chạy, một thành phần trong .NET có tên là CLR (Common Language Runtime) sẽ tiến hành dịch mã MSIL thành mã máy (Native Code) để máy tính có thể hiểu và thực thi. Quá trình này gọi là JIT (Just-In-Time) hay Runtime.

Một số ứng dụng .NET thường chạy lần đầu lâu hơn những lần sau đó rất nhiều là vì lần tiên được chạy CLR tiến hành dịch mã MSIL thành mã máy (quá trình JIT), ở những lần chạy tiếp theo, không cần phải JIT nữa vì nó đã được biên dịch trước đó, nên thời gian thực thi nhanh hơn nhiều.

Vậy tại sao lại cần có ngôn ngữ trung gian?

Ngôn ngữ trung gian (MSIL) trong .NET khá gần với mã máy (Native code) nhưng không chứa thông tin cụ thể về CPU. Việc giúp cho đoạn code trung gian của bạn có thể hoạt động trên nhiều loại CPU (32bit, 64bit), cũng như nhiều loại kiến trúc khác (ARM, Intel,…)

Trên thực tế có một vài ngôn ngữ như JavaScript, Python,… không dùng đến ngôn ngữ trung gian. Lúc này source code sẽ được dịch thẳng ra mã máy tại thời điểm Runtime. Ưu điểm của việc này là quá trình build được đơn giản hóa và nhanh hơn. Tuy nhiên, hiệu năng sẽ bị hạn chế.

Ngoài ra thời gian biên dịch (compile time), thời gian chạy (runtime), trong .NET còn có các công cụ như:

  • Tự động quản lý bộ nhớ: khi làm việc với các ngôn ngữ bậc cao như C#, VB.NET bạn không cần giải phóng bộ nhớ bằng cách gọi free() như khi làm việc với C/C++. CLR bao gồm một công cụ dọn rác gọi là Grabage Collector (GC) sẽ tự động giải phóng những phần bộ nhớ không được sử dụng.
  • Strong Typings: CLR quản lý thông tin về các kiểu dữ liệu mà sử dụng. Điều này giúp cho bạn có thể phần biệt được các định dạng thông tin của từng biến khác nhau.

Vậy .NET còn các thư viện (Libraries) và công cụ (Toolings) nào nữa không?

Khi bạn làm việc với .NET, source code của bạn sẽ tương tác với rất nhiều class khác nhau. Trong đó có các class do thư viện .NET hỗ trợ như System.String, System.WebSystem.DataSystem.IO,… Các class thư viện này trong .NET gọi là Base Class Library (BCL).

Các công cụ (Toolings) của .NET bao gồm compiler và Visual Studio. Trong .NET hệ thống build dùng MSBuild của Microsoft. Còn đối với .NET Core chúng ta có thể dùng công cụ dòng lệnh ‘dotnet cli‘.

Trong phần sau chúng ta sẽ cùng tìm hiểu chi tiết hơn từng thành phần trong hệ sinh thái .NET.

TopDev via Thangphampt

SHARE