Thứ Ba, 5 tháng 1, 2010

Dynamic Language Runtime - .NET, quo vadis?

Đề tài hôm nay là: "Dynamic Language Runtime - .NET, quo vadis?"
 
Ai đã từng làm việc với .NET mà không biết đến môi trường runtime CLR (Common Language Runtime).  CLR cung cấp cho các dịch vụ thông thường cho các ngôn ngữ lập trình như C#, VB, v.v…như  gom rác - Garbage Collection, biên dịch sang mã máy  - JIT-Compiler , …v.v.


Điều này tạo ra hai lợi thế chính:

  • Ngôn ngữ mới có thể được đưa ra trên cơ sở tương tự tại cơ sở (CLR) để dễ dàng thực hiện, ngôn ngữ có nguồn gốc từ CLR có thể để xây dựng từ ngôn ngữ khác hoặc làm việc với chung với nhau, thí dụ như xài chung 1 thư viện.
  • Hiện nay, có hàng tá ngôn ngữ cho .NET (danh sách: http://dotnetpowered.com/languages.aspx),  đây không chỉ là ngôn ngữ cấu trúc ngoài ra bọn chúng  cũng  đã có sẵn những chức năng thông dụng.
Microsoft đã soạn thảo IronPhyton (http://www.codeplex.com/IronPython) từ lâu. Theo dự án này, công việc lúc đầu là tạo dựng một ngôn ngữ động khi chạy (Dynamic Language Runtime), mà bây giờ họ đã có một dự án riêng biệt trên CodePlex.

DLR cung cấp dịch vụ chung cho tất cả ngôn ngữ bao gồm một hệ thống năng động và dịch vụ tạo mã khi kích hoạt.
Một khác biệt lớn giữa hệ thống năng động và hệ thống tĩnh (ví dụ như C#/VB.NET) là:


Hệ thống năng động (kiểm tra và cấp phát khi chạy)

  • Khi chạy sẽ bị chậm  tuy nhiên biên dịch nhanh hơn, có nghĩa là thời gian để sửa / thử nghiệm / chu trình gỡ lỗi, … sẽ ngắn đi nhiều
  • Kiểm tra phân loại được thực hiện khi chạy
  • Giảm lỗi khi tạo dựng do sử dụng các đơn vị kiểm nghiệm
Hệ thống tĩnh (kiểm tra phân loại trong quá trình biên dịch và phân bổ)

  • Nhanh hơn khi chạy vì kiểm tra phân loại được thực hiện khi biên dịch
  • Hệ thống kiểm lỗi được thực hiện trong quá trình biên dịch
Việc sử dụng chương trình năng động đã từng được dẫn giải ở nhiều nơi trong lĩnh vực scripting cũng như  trong hệ thống  plugin/addin. Một hạn chế đối với ngôn ngữ tĩnh là khi xử lý dữ liệu có xu hướng thay đổi dịnh dạng bất chợt như là dưới dịnh dạng XML và đây là một lợi thế của ngôn ngữ động.
 

Cho đến nay tôi đã luôn luôn chú ý đến vấn đề này, tuy rằng vẫn chưa áp dụng thật sự nhưng với thời gian nghiên cứu, tôi nghĩ rằng mình nên xét lại. Sớm hay muộn mọi người đều phải đụng chạm đến nó trong quá trình soạn thảo lập trình; sự phát triển này là một phần mở rộng của các khả năng và không phải là thay thế cơ sở cũ.
 

(Bài tiếng Việt đầu tiên về lập trình đọc thấy chuối ghê :D, chắc viết tiếng Đức cho nó lành :p)