Đây là bài viết được dịch từ https://devblogs.microsoft.com/dotnet/why-dotnet/
Bài viết này nhằm giới thiệu về .NET, một trong những nền tảng lập trình phổ biến nhất, mạnh mẽ nhất, hỗ trợ đầy đủ tất cả các hệ điều hành, kiến trúc, từ smart phone, đến desktop, máy chủ… Với sự hậu thuẫn mạnh mẽ bởi Microsoft và cộng đồng hàng triệu lập trình viên trên khắp thế giới.
Hiểu rõ những khả năng của .NET giúp bạn quyết định việc đầu tư việc học vào nền tảng này.
Phần chữ in nghiêng là phần ghi chú thêm của người dịch.
.NET đã thay đổi rất nhiều từ lúc chúng tôi khởi động dự án chuyển đổi .NET sang mã mở và đa nền tảng. Chúng tôi đã khảo sát lại toàn bộ, tinh chỉnh lại nền tảng, thêm vào các tính năng ở cấp thấp hỗ trợ cho hiệu năng và tính an toàn, cùng với các tính năng ở cấp cao giúp việc xây dựng ứng dụng nhanh chóng và hiệu quả. Span<T>
, hardware intrinsics, và nullable reference types là một số ví dụ. Chúng tôi cũng khởi động một blog “.NET Design Point” để giúp bạn biết thêm về những khái niệm và quyết định khi thiết kế ra .NET platform mà chúng ta có ngày nay, và nó đã giúp ích như thế nào khi viết code.
Bài đầu tiên của loại bài này cung cấp một cái nhìn tổng quan về các trụ cột chính và các design point của nền tảng. Nó mô tả ở mức độ khái quát “những gì bạn nhận được” khi bạn chọn .NET và nhằm mục đích trở thành một bộ khung tập trung vào những điểm quan trọng mà bạn có thể dựa trên đó để giới thiệu nền tảng này đến những người khác. Các bài viết tiếp theo sẽ đi vào chi tiết của các chủ đề đã nói đến. Bài viết này sẽ không mô tả về các công cụ, như Visual Studio, hoặc các thư viện cấp cao hoặc các mô hình ứng dụng như ASP.NET Core.
“.NET” mà chúng ta đang nói đến là .NET Core hiện đại. Nếu bạn quên, thì chúng tôi đã bắt đầu dự án này vào năm 2014 như một dự án nguồn mở trên GitHub. Nó có thể chạy Linux, macOS, và Windows on Arm64, x64, và các kiến trúc chíp khác nữa. Nó cũng có sẵn trong nhiều Linux distro. Nó cũng duy trì rất nhiều sự tương thích với .NET Framwork cũ, nhưng nó thực sự là một sản phẩm và là một hướng đi mới.
Trước khi đi vào chi tiết, sẽ rất có ích khi nói về việc .NET đang sử dụng như thế nào. Nó đang được dùng bởi hàng triệu developer, để tạo ra nhiều ứng dụng chạy trên cloud, client, và nhiều ứng dụng khác chạy trên những hệ điều hành và kiến trúc chip khác nhau. Nó cũng chạy trên nhiều dịch vụ nổi tiếng như Azure, StackOverflow và Unity. Bạn sẽ dễ dàng tìm thấy .NET được sử dụng trong các công ty ở mọi quy mô, đặc biệt trong các công ty lớn. Ở nhiều nơi, biết về .NET là một lợi thế để tìm một công việc.
Bạn có thể xem qua một đánh giá từ cộng đồng tại đây: Thoughts on ‘What is .NET, and why should you choose it?’
.NET design point (Điểm thiết kế trong .NET)
The .NET platform stands for Productivity, Performance, Security, and Reliability. The balance .NET strikes between these values is what makes it attractive.
.NET design point có thể được rút gọn lại thành hai điểm chính: hiệu quả và hiệu suất trong cả các vùng an toàn và vùng không an toàn (1)(xem giải thích ở cuối trang). .NET có lẽ là môi trường được quản lý với nhiều chức năng có sẵn nhất, đồng thời cũng mang đến chi phí thấp nhất khi tương tác với thế giới bên ngoài, mà không phải đánh đổi một trong hai thứ. Thực sự là nhiều tính năng đã khai thác sự phân chia liền mạch này, cung cấp các API an toàn để truy cập vào sức mạnh và khả năng thực sự của các OS và CPU bên dưới.
Chúng ta có thể mở rộng design point ra thêm một chút:
- Productivity (tính hiệu quả) là điểm cần cân nhắc đầu tiên nhất khi thiết kế runtime, thư viện, ngôn ngữ và các công cụ.
- Safe code là mô hình sử dụng chính, trong khi unsafe code cung cấp thêm khả năng tối ưu bằng tay.
- Static và dynamic code đều được hỗ trợ, cho phép bạn xử lý rất nhiều tình huống khác nhau.
- Native code interop và hardware intrinsics chi phí thấp và độ chính xác cao (raw API và instruction access).
- Code is portable across platforms (OS, chip architecture), code có thể chuyển giữa các platform khác nhau nhưng vẫn cung cấp khả năng platform targeting giúp cho phép tối ưu hoặc cho phép các tính năng chỉ có thể một nền tảng nào đó.
- Adaptability across programming domains (cloud, client, gaming) Khả năng thích ứng với nhiều mô hình thực thi khác nhau nhờ các implemention riêng cho mỗi nền tảng dựa trên một mô hình lập trình chung.
- Industry standards Các chuẩn ông nghiệp như OpenTelemetry và gRPC được ưu tiên hơn các chuẩn riêng.
Những trụ cột của .NET
Runtime, thư viện và ngôn ngữ là trụ cột của .NET stack. Các thành phần cấp cao hơn, như các công cụ .NET và app stack như ASP.NET Core, được xây dựng trên các trụ cột này. Các trụ cột có mối quan hệ cộng sinh, được thiết kế và xây dựng cùng nhau bởi một nhóm duy nhất (nhân viên của Microsoft và cộng đồng nguồn mở), nơi các cá nhân làm việc và cung cấp thông tin cho những thành phần này.
C# là hướng đối tượng và runtime cũng hỗ trợ hướng đối tượng. C# yêu cầu bộ dọn rác (garbage collection) và runtime cung cấp một trình theo dõi rác. Trên thực tế, không thể chuyển C# (ở dạng hoàn chỉnh) sang một hệ thống mà không có bộ thu dọn rác. Các thư viện (và cả các app stack) định hình các khả năng đó thành các khái niệm và mô hình đối tượng cho phép các nhà phát triển viết các thuật toán một cách hiệu quả trong các quy trình làm việc trực quan.
C# là ngôn ngữ lập trình hiện đại, an toàn và đa dụng trải dài từ các tính năng mức cao như data-oriented records đến các tính năng mức thấp như con trỏ hàm. Nó cung cấp các kiểu dữ liệu tĩnh, an toàn kiểu và an toàn bộ nhớ như những tính năng cơ bản, giúp cải thiện đồng thời năng suất của nhà phát triển và độ an toàn của code. Trình biên dịch C# cũng có thể mở rộng, hỗ trợ mô hình plug-in cho phép các nhà phát triển tăng cường hệ thống với các chẩn đoán bổ sung và tạo mã khi biên dịch.
Một số tính năng của C# đã ảnh hưởng hoặc bị ảnh hưởng bởi các ngôn ngữ lập trình hiện đại. Ví dụ: C# là ngôn ngữ chính đầu tiên giới thiệu async và await. Đồng thời, C# vay mượn các khái niệm được giới thiệu lần đầu trong các ngôn ngữ lập trình khác, chẳng hạn như bằng cách áp dụng các phương pháp chức năng như pattern matching và primary constructor.
Các thư viện core cung cấp hàng nghìn kiểu dữ liệu, nhiều kiểu trong số đó tích hợp và hỗ trợ ngôn ngữ C#. Ví dụ: foreach của C# cho phép liệt kê các tập hợp tùy ý, với tính năng tối ưu hóa dựa trên pattern cho phép các tập hợp như List<T> được xử lý một cách đơn giản và hiệu quả. Việc quản lý tài nguyên có thể tùy thuộc vào việc thu gom rác nhưng có thể dọn dẹp nhanh chóng thông qua IDisposable và được ngôn ngữ hỗ trợ trực tiếp bằng using.
String interpolation trong C# vừa rõ ràng vừa hiệu quả, được tích hợp và hỗ trợ bởi các implementation trên các loại thư viện lõi như String, StringBuilder và Span<T>. Và các tính năng truy vấn tích hợp ngôn ngữ (LINQ) được hỗ trợ bởi hàng trăm chức năng hỗ trợ xử lý tuần tự trong các thư viện, như Where, Select và GroupBy, với thiết kế và triển khai có thể mở rộng hỗ trợ cả nguồn dữ liệu trong bộ nhớ và từ bên ngoài. Danh sách này vẫn tiếp tục và những gì được tích hợp trực tiếp vào ngôn ngữ chỉ là một phần trong những tính năng có trong thư viện lõi của .NET, từ compression đến cryptography đến regular expression. Networking được hỗ trợ toàn diện, trải dài từ socket đến HTTP/3. Tương tự, các thư viện hỗ trợ xử lý vô số định dạng và ngôn ngữ như JSON, XML và tar.
Trình runtime .NET ban đầu được gọi là “Common Language Runtime (CLR)”. Nó tiếp tục hỗ trợ nhiều ngôn ngữ, một số ngôn ngữ được duy trì bởi Microsoft (ví dụ: C#, F#, Visual Basic, C++/CLI và PowerShell) và một số bởi các tổ chức khác (ví dụ: Cobol, Java, PHP, Python, Scheme). Nhiều cải tiến là không phụ thuộc vào ngôn ngữ, giúp nâng cao mọi con thuyền (tức mọi ngôn ngữ đều được hưởng lợi từ những cải tiến đó).
Tiếp theo, chúng ta sẽ xem xét các đặc điểm nền tảng khác nhau mà chúng đi cùng nhau. Chúng tôi có thể trình bày chi tiết từng thành phần này một cách riêng biệt, nhưng bạn sẽ sớm thấy rằng chúng kết hợp với nhau trong việc cung cấp .NET design point. Ta sẽ bắt đầu với hệ thống kiểu dữ liệu.
(Hết bài 1)
(1) Effective – hiệu quả là có tác dụng trong quá trình thực hiện (làm đúng); còn efficient – hiệu suất là có kết quả tối ưu trong mục tiêu (làm nhanh nhất, đỡ tốn nhất)
Vùng an toàn (safe domain) là những đoạn lệnh được thực thi và kiểm soát với .NET runtime, vùng không an toàn (unsafe domain) là những vùng bạn làm việc trực tiếp với các hệ thống bên dưới, .NET runtime không kiểm soát những gì bạn làm trong vùng này .