MSIL là gì? Với những developer mới ra trường, chúng ta thường đã được nghe đến một số khái niệm như ngôn ngữ lập trình cấp cao, ngôn ngữ trung gian hay ngôn ngữ máy. Vậy đã bao giờ bạn tìm hiểu xem với .NET, các ngôn ngữ này được dùng khi nào và cụ thể nó là gì không?
Trước tiên các bạn cần biết ECMA là gì?
ECMA là viết tắt của Hiệp hội Các nhà sản xuất máy tính châu Âu (ECMA), được thành lập bởi các công ty lớn nhỏ tại Châu Âu vào năm 1961 và đổi tên như hiện tại là ECMA International vào năm 1994.
Hoạt động như một tổ chức phi lợi nhuận nhằm phát triển / chuẩn hóa các tiêu chuẩn cũng như các báo cáo kỹ thuật trong lĩnh vực Công nghệ thông tin và Truyền thông, Điện tử gia dụng. Cái chúng ta cần quan tâm là mảng Programming Languages.
IL và MSIL là gì?
Tổ chức ECMA đã phê duyệt một tiêu chuẩn về ngôn ngữ lập trình trung gian cho .NET framework gọi là Common Intermediate Language (CIL). Chuẩn này cũng được biết đến với tên gọi Microsoft intermediate language (MSIL).
Và dĩ nhiên C# cũng được đề cập trong tài liệu của ECMA như một ngôn ngữ lập trình cấp cao.
Vậy ngôn ngữ cấp cao như C# có mối tương quan thế nào với MSIL? Để hiểu hơn tôi sẽ nói về quá trình compile code C#. Đi vào quá trình compile code bạn sẽ thấy C# =========> MSIL. Quá trình compile diễn ra như sau:
- Source code của bạn sẽ được phân tích cú pháp để đảm bảo bạn tuân thủ đúng syntax của ngôn ngữ.
- Phân tích nội dung code như method, biến, class và sau đó chúng sẽ được gán cho một cái tên khác(rất không thân thiện như khi bạn code). Cũng ở bước này các constant sẽ được thay thế bởi giá trị thực. Sau đó các thông tin trên sẽ được lưu trữ.
- Phân tích ngữ nghĩa code, mối ràng buộc giữa các hàm, class, các thành phần reference…
- Bước cuối cùng là lưu tất cả các thông tin trên dưới dạng IL – chính là các tập tin DLL hay EXE.
Chỉ dừng lại ở IL, tập tin DLL hay .EXE không thể run trên máy tính. Vậy làm cách nào bạn vẫn thấy nó chạy được? Đó là vì khi bạn run một file .EXE trên Windows, nếu nó là IL thì trình thông dịch .NET Just-In-Time (một phần của Common Language Runtime – CLR) sẽ được gọi để thông dịch mã IL thành mã máy (Native code) – cái mà CPU có thể hiểu. .NET Just-In-Time hay viết tắt là JIT sẽ được đề cập ở bài viết khác.

.NET execution cycle
Vì vậy nên các ứng dụng .Net thường start khá chậm. Nếu muốn tăng tốc độ Start, chúng ta có thể sử dụng NGEN để biên dịch IL sang Native code luôn. cải thiện đáng kể performance start
Cảm ơn a đã quan tâm và chia sẻ.