• Thứ Tư, 01/09/2010 09:41 (GMT+7)

    .NET Framework: 10 năm nhìn lại

    Mai Văn Quân
    Với sự hậu thuẫn của Microsoft và sự ủng hộ mạnh mẽ của giới công nghệ, cộng đồng lập trình viên, .NET đã đi được những bước dài, trở thành một trong những nền tảng mạnh mẽ và phổ biến.

    12/4 vừa qua, Microsoft chính thức phát hành Visual Studio 2010 cùng với .NET Framework 4.0, đánh dấu 10 năm .NET Framework “tung hoành” trên thị trường phần mềm. Kể từ ngày đầu ra mắt với những bước đi chập chững, giờ đây, .NET Framework đã trở thành một “ông lớn” với số lượng các nhà phát triển đông đảo.  

    Nhớ lại những năm cuối thế kỉ trước, Java làm mưa làm gió trên thị trường phần mềm với khẩu hiệu nổi tiếng “Write once, Run anywhere” (viết một lúc, chạy mọi nơi). Không chỉ là một ngôn ngữ, Java còn là cả một nền tảng, thích hợp cho việc phát triển phần mềm ở mọi mức độ: từ lớn và phức tạp như các giải pháp doanh nghiệp cho đến nhỏ và ít tốn tài nguyên như các phần mềm chạy trên thiết bị di động. Lúc đó, Microsoft cũng phải hợp tác với Sun Microsystem để đưa ra Visual J++, công cụ phát triển Java trên nền Windows cho bộ Visual Studio của mình. Microsoft thậm chí còn xây dựng hẳn thư viện WFC (Windows Foundation Classes), bên cạnh bộ thư viện MFC, để hỗ trợ cho Visual J++. Nhưng “ngày vui ngắn chẳng tày gang”, sau đó, Sun tố giác Microsoft tự ý sửa code của máy ảo Java cho Windows (Java Virtual Machine – JVM). Vụ việc nhanh chóng làm đổ vỡ mối quan hệ giữa 2 ông lớn. Năm 1998, Microsoft đã mất quyền phát triển Java, và khi cả thế giới chuyển sang Java 1.2 (thường được biết đến với tên thương mại J2EE), Microsoft “ở lại” với Java 1.1. Và hệ quả tất yếu là Visual J++ “chết yểu”. Từ thế đối tác, Microsoft trở thành đối thủ của Sun về ngôn ngữ, cũng như về nền tảng lập trình.  

    Khi đó, Microsoft chưa có sản phẩm nào tương xứng để cạnh tranh với Sun, mặc dù đã có đầy đủ nền tảng và công cụ cho người lập trình: Visual C++ với MFC/ATL và Visual Basic cho lập trình Windows, ASP với Javascript/VBScript cho lập trình web... nhưng chúng đều không phải là đối thủ đúng nghĩa của ngôn ngữ/nền tảng Java. Mỗi sản phẩm của Microsoft tương ứng với một môi trường nhất định, việc chuyển sang môi trường khác buộc lập trình viên phải học ngôn ngữ mới. Ngoài ra, các nền tảng của Microsoft đều ít nhiều có nhược điểm: Visual Basic thì tiện lợi và dễ dùng nhưng hiệu năng thấp, không thích hợp cho các ứng dụng tính toán phức tạp. MFC khai thác được sức mạnh của Windows API nhưng chưa đủ thân thiện. ASP với Jscript/VBScript thì quá rắc rối để có thể bẫy lỗi và phát triển các website lớn…Ngoài ra, hỗ trợ Unicode cũng là một điểm yếu của các công cụ Microsoft khi đó. Có thể nói, vào những năm cuối của thế kỉ trước, Microsoft thiếu một nền tảng thống nhất.  

    Ngay từ năm 1998, Microsoft đã đổ tiền vào nghiên cứu trong dự án NGWS - Next Generation Windows Services, đồng thời chiêu mộ những nhân tài trong lĩnh vực phát triển phần mềm, có thể kể đến Anders Heijberg – tác giả nổi tiếng của Turbo Pascal và Delphi. Một kỉ nguyên mới bắt đầu. 

    Tháng 7 năm 2000, tại hội thảo dành cho các nhà phát triển chuyên nghiệp, Microsoft đã bắt đầu hé lộ về nền tảng .NET Framework, đồng thời cũng giới thiệu về ngôn ngữ mới của họ. Ban đầu, ngôn ngữ này được đặt tên là COOL – C-like Object Oriented Language, cùng với một vài cái tên tạm thời khác như COM3, Lightnight trước khi được đặt tên C#.  

    Ngày 12/2/2002 đánh dấu bước quan trọng đầu tiên trong “cuộc đời” của .NET Framework, khi phiên bản 1.0 cùng với Visual Studio.NET 2002 được chính thức ra mắt. Chính .NET Framework 1.0 là điểm nhấn đáng chú ý nhất và làm cho Visual Studio. NET 2002 khác biệt hẳn với Visual Studio 6.0 đã phát hành năm 1998. Lần đầu tiên, Microsoft giới thiệu về “lập trình hợp nhất”, với việc lấy .NET Framework làm nền tảng. Giờ đây, dù có dùng đến ngôn ngữ nào, kết quả sau khi dịch vẫn là CIL (Common Intermediate Language), được thực thi bởi CLR (Common Language Runtime) và sử dụng chung BCL (Base Class Library). Hơn thế nữa, dù là một ứng dụng Winform đơn giản, một giải pháp doanh nghiệp phức tạp hay một trang web đầy đủ chức năng, tất cả đều có thể xây dựng trên nền .NET. Được trợ giúp bởi 2 ngôn ngữ hoàn toàn hướng đối tượng mới, C# và Visual Basic.NET, .NET Framework thực sự là một cuộc cách mạng của Microsoft. 

    Phải nói một cách khách quan rằng rất nhiều ý tưởng quan trọng trong .NET Framework được vay mượn từ đối thủ Java. Tuy nhiên, điều may mắn là Microsoft đã bắt chước một cách “không tệ”. Ví dụ, kiểu dịch JIT (Just-in-time) trong .NET Framework hiệu quả hơn kiểu byte-code trong JVM. Điều này là bình thường trong thế giới hiện nay, vì ý tưởng thì chỉ có một, nhưng quan trọng là cách hiện thực như thế nào. Những bước đi đúng đắn của đội ngũ .NET ở Microsoft đã giúp cho .NET có những ưu thế không thể chối cãi trước các đối thủ cạnh tranh. 

    Một năm sau ngày .NET Framework 1.0 ra đời, ngày 24/4/2003, Microsoft đã có ngay bản cập nhật 1.1 ra mắt cùng với Visual Studio.NET 2003. Không có nhiều nâng cấp đáng chú ý trong lần ra mắt này, đáng kể nhất là sự ra đời của .NET Compact Framework, phiên bản thu gọn của .NET Framework cho các thiết bị di động. Điều đáng tiếc là mặc dù có nền tảng rất tốt, cùng với sự hỗ trợ mạnh mẽ từ Microsoft, cho đến nay, .NET Compact Framework vẫn chưa phát triển như “lẽ ra nó phải thế”. Hiện nay số thiết bị di động chạy Windows Mobile/Windows Phone khá khiêm tốn so với các hệ điều hành (HĐH) còn lại. 

    .NET Framework 1.1 cũng mở ra một “truyền thống” là kể từ đây, các HĐH Windows đều được cài đặt sẵn phiên bản .NET Framework mới nhất. Windows Server 2003 tiên phong với phiên bản 1.1, sau đó là Windows Vista với .NET 3.0, và gần đây nhất là Windows 7/Server 2008 với .NET 3.5 SP1. 

    Microsoft mất đến hơn 2 năm để phát triển .NET Framework 2.0 và Visual Studio 2005, và thời gian bỏ ra là thật sự đáng giá. Tháng 11/2005, hai sản phẩm này ra mắt với hàng loạt tính năng mới, trong đó đáng kể nhất là việc hỗ trợ hoàn toàn cho tính toán 64-bit, .NET Micro Framework, bổ sung và nâng cấp nhiều control của ASP.NET và đặc biệt là hỗ trợ Generics. 

    Quay lại trước đó một năm. .NET Framework thật sự là sức ép lớn đối với Sun khi họ phải nâng cấp nền tảng Java cho xứng tầm với đối thủ mới. Tuy nhiên, việc hỗ trợ Generics giữa .NET và Java gần như trái ngược. Generics trong Java hoàn toàn ở cấp độ ngôn ngữ, còn bản thân JRE không biết gì đến khái niệm này. Trình dịch đảm nhận toàn bộ công việc dịch Generics ra mã mà JRE “hiểu được”. Điều này cũng có nghĩa một chương trình Java sử dụng Generics vẫn có thể chạy trên các nền tảng Java cũ hơn, miễn là có các thư viện cần thiết. Còn ở .NET, CLR 2.0 – “người đồng cấp” với JRE – lại hỗ trợ hoàn toàn Generics, thậm chí, còn hỗ trợ tốt hơn cả các ngôn ngữ như C# hay Visual Basic. Nếu như 3 phiên bản trước đó, .NET Framwork đều gắn liền với một phiên bản Visual Studio nào đó, thì.NET Framework 3.0 đã “phá” truyền thống này khi ra mắt cùng với hệ điều hành Windows Vista vào cuối năm 2006. Ba “điểm nhấn” trong lần nâng cấp này là thành phần được kỳ vọng thay thế Winform - Windows Presentation Foundation – WPF, Windows Communitcation Foundation – WCF, Windows Workflow Foundation - WF, và Windows Card Space. 

    .NET Framework 3.0 không phải là một phiên bản mới hoàn toàn, thực tế là một bản nâng cấp của .NET 2.0, hay đúng hơn là một bản nâng cấp cho thư viện của .NET 2.0. Có thể minh hoạ bằng công thức: 

    .NET 3.0 = .NET 2.0 + WPF + WCF + WF + WCS 

    Chính vì không có Visual Studio “đi kèm”, mà .NET 3.0 đành phải “ký gửi” vào Visual Studio 2005 với một bộ công cụ mở rộng. Người dùng phải đợi đến tháng 11 năm 2007 mới được sử dụng một phiên bản Visual Studio hỗ trợ đầy đủ và toàn diện cho .NET 3.0, và hơn thế nữa. Vâng, chúng ta đang nói đến VS 2008 và .NET Frame work 3.5. Cũng như phiên bản 3.0, .NET 3.5, là một mở rộng trên nền .NET 2.0. Chúng ta có thể hình dung điều này bằng công thức: 

    .NET 3.5 = .NET 3.0 + LINQ + ASP.NET 3.5 + REST 

    LINQ là phần nổi bật và đáng chú ý nhất trong .NET 3.5. Để phục vụ cho thành phần mới này, một loạt các tính năng đã được bổ sung cho các ngôn ngữ như C# 3.0 và Visual Basic 9.0, như Automatic Implemented Properties, Anomynous Varibles…Các tính năng này cho phép các nhà phát triển viết các câu truy vấn trên LINQ tiện lợi hơn hẳn so với dùng các thư viện như ADO.NET. Ngày 12/4 vừa qua, Microsoft lại nâng cấp .NET Framework và Visual Studio.  

    Đây là phiên bản đầu tiên sau .NET 2.0 kể từ 2005, có một CLR hoàn toàn mới: CLR 4.0. Cũng cần nhắc lại là cả .NET 3.0 và 3.5 đều sử dụng CLR 2.0, và không có CLR 3.0. Việc Microsoft chuyển thẳng lên 4.0 không chỉ để “đồng bộ” phiên bản, mà còn nhằm khẳng định đây là một bước tiến lớn. Đó chưa phải là tất cả những gì mà .NET 4.0 đem lại.  

    10 năm không phải là dài, nhưng với lĩnh vực công nghệ thì đó là thời gian đủ để có những sự trưởng thành. Với sự hậu thuẫn của Microsoft và sự ủng hộ mạnh mẽ của giới công nghệ, đặc biệt là cộng đồng lập trình viên, .NET đã đi được những bước dài, trở thành một trong những nền tảng mạnh mẽ và phổ biến nhất. Hy vọng .NET 4.0 và các phiên bản sau này sẽ tiếp tục những thành công mà .NET Framework đã đạt được trong một thập kỉ qua.

    Ngôn ngữ lập trình, câu chuyện còn dài

    Lịch sử của .NET Framework có lẽ sẽ thiếu rất nhiều nếu không nhắc đến những ngôn ngữ đi cùng với nó. Trong khi nền tảng Java gắn liền với ngôn ngữ Java, thì trái lại, .NET mở rộng cửa hơn nhiều. Bạn có thể tự mình viết trình dịch cho ngôn ngữ mình yêu thích, miễn đảm bảo tương thích với ECMA, tức là dịch ra theo chuẩn của CIL. Cho đến nay, đã có hơn 30 ngôn ngữ được sử dụng với .NET, tuy nhiên, những ngôn ngữ từ chính Microsoft vẫn đang được sử dụng rộng rãi nhất. 

    Đầu tiên, không thể không kể đến C#. Kế thừa ưu điểm từ những người đi trước, như sự mạnh mẽ của C++, sự dễ dàng của Visual Basic, hướng đối tượng triệt để, cùng với một cú pháp trong sáng, dễ học, C# nhanh chóng trở thành lựa chọn số 1 của lập trình viên .NET. Có một điều mà đến nay nhiều người vẫn chưa biết là trong Visual Studio.NET 2003, phiên bản C# được dùng là 1.2 chứ không phải là 1.1. Tương tự, khi Visual Studio 2008 và .NET 3.5 ra đời, nhiều người đã nhầm lẫn về C# 3.5. Chính nhiều nhà xuất bản lớn như Apress cũng đã khiến người dùng hiểu sai khi liên tục đưa ra các tựa sách có khái niệm này. Thực tế, không hề có C# 3.5, mà chỉ có C# 3.0 đi liền với .NET 3.5. Cùng với .NET 4.0, chúng ta đón nhận phiên bản mới C# 4.0 với một loạt cải tiến: dynamic programming, optional và named parameters,… 

    Người anh em đi cùng C#, ắt hẳn phải là Visual Basic. Trước khi có .NET, bản thân Visual Basic đã quá nổi tiếng với khả năng xây dựng ứng dụng nhanh, đơn giản. Tuy nhiên, Visual Basic lại không phải là ngôn ngữ hướng đối tượng, và hiệu năng thực tế không cao. Visual Basic.NET không phải là một bản nâng cấp của Visual Basic, mà là một ngôn ngữ mới trong vỏ bọc cũ: hoàn toàn hướng đối tượng trên nền .NET. Sau hai phiên bản đầu (7.0 và 7.1), kể từ phiên bản 8.0 Visual Basic đã được bỏ cái đuôi .NET để trở lại cái tên quen thuộc. Visual Basic hoàn toàn tương đương với C#, mặc dù có một vài khác biệt nhỏ, nhưng bạn có thể chuyển đổi mã nguồn VB sang C# hay ngược lại một cách rất dễ dàng. 

    Không may mắn như C# và Visual Basic, C++/CLI là “đứa con bị hắt hủi” của Microsoft. Ra đời với cái tên managed C++ ( để phân biệt với unmanaged C++ , tức native code C++), kể từ .NET 2.0, nó được nâng cấp và đổi tên thành C++/CLI. Mục tiêu của Microsoft là khá rõ ràng: lôi kéo các lập trình viên C++ đến với .NET, tuy nhiên điều này nhanh chóng thất bại: các lập trình viên cần làm việc với native code thì ở lại với C++ truyền thống, những người muốn chuyển sang nền tảng .NET thì lại chọn C# do những ưu điểm của nó. C++/CLI chưa chết, nhưng ít ai còn nhớ đến, dù bản thân nó không phải là ngôn ngữ tồi. 

    Khi lập trình hướng chức năng trở thành nhu cầu thực tế nhằm giải quyết những vấn đề mà lập trình hướng đối tượng (OOP) không xử lý hiệu quả, Microsoft đã lập tức giới thiệu F#. F# không chỉ là một ngôn ngữ hướng chức năng mà còn là một ngôn ngữ hướng đối tượng dạng mệnh lệnh. Và ngay sau đó, để “lăng-xê” cho Dynamic Programming trên .NET, Microsoft cũng đã đưa ra IronPython và IronRuby, 2 ngôn ngữ thật sự “động”. Và đó chắc chắn chưa phải là những thành viên cuối cùng trong họ hàng nhà .NET.  

     

    ID: A1007_105