Cơ sở ngôn ngữ dùng chung

Cơ sở ngôn ngữ dùng chung hoặc Cơ sở hạ tầng ngôn ngữ dùng chung (Common Language Infrastructure - CLI) là một tiêu chuẩn kỹ thuật được phát triển bởi Microsoft và được tiêu chuẩn hoá bởi ISO và ECMA, mô tả mã thực thi và môi trường runtime cho phép nhiều ngôn ngữ lập trình cấp cao được sử dụng trên các nền tảng máy tính khác nhau mà không cần viết lại mã cho một nền tảng cụ thể. .NET Framework, .NET Core, Mono, DotGNU và Portable.NET là những ứng dụng của CLI. ISO/IEC 23271:2012 - Information technology -- Common Language Infrastructure (CLI)
 Tổng quan 
nhỏ|323x323px|Hình ảnh tổng quan của Cơ sở ngôn ngữ dùng chung (CLI)
Đặc tả này mô tả bốn khía cạnh lớn sau đây:
 Hệ thống kiểu dữ liệu dùng chung (CTS): Một tập hợp các kiểu dữ liệu và các toán tử được dùng chung bởi tất cả các ngôn ngữ tuân thủ nguyên tắc này.
 Metadata: Các thông tin về cấu trúc chương trình là độc lập với ngôn ngữ, để có thể được tham chiếu giữa các ngôn ngữ và các công cụ khác nhau, giúp cho lập trình viên dễ dàng làm việc với ngôn ngữ mà họ không sử dụng.
 Đặc điểm kỹ thuật ngôn ngữ dùng chung (CLS): Một tập hợp các quy tắc cơ bản mà bất kỳ ngôn ngữ nào sử dụng CLI phải tuân theo để tương tác với các ngôn ngữ CLS khác. Các quy tắc của CLS định nghĩa một tập con của CTS.
 Hệ thống thực thi ảo (VES): VES tải và thực thi các chương trình tương thích với CLI, sử dụng metadata để kết hợp các đoạn mã được tạo riêng biệt trong thời gian chạy.
Tất cả các ngôn ngữ tương thích được biên dịch sang Ngôn ngữ trung gian dùng chung trước khi thực thi. Khi mã được thực thi, VES cụ thể cho từng nền tảng sẽ biên dịch CIL sang ngôn ngữ máy theo phần cứng và hệ điều hành cụ thể.

 Tiêu chuẩn hóa và cấp phép 
Vào tháng 8 năm 2000, Microsoft, Hewlett-Packard, Intel và những tổ chức khác đã cùng nhau chuẩn hóa CLI, và đến tháng 12 năm 2001 thì CLI đã được ECMA phê chuẩn. Sau đó, ISO cũng cấp phép cho CLI vào tháng 4 năm 2003.

Microsoft và các đối tác của họ giữ bằng sáng chế cho CLI. ECMA và ISO yêu cầu tất cả các bằng sáng chế cần thiết để thực hiện được cung cấp theo "các điều khoản hợp lý và không phân biệt đối xử (RAND)". Thường thì việc cấp phép của RAND đòi hỏi một khoản thanh toán tiền bản quyền, điều này có thể là nguyên nhân gây quan ngại cho Mono. Do đó, đến tháng 1 năm 2013, cả Microsoft và các đối tác vẫn chưa có kế hoạch nào cho việc triển khai CLI tuân theo RAND.

Tính đến tháng 7 năm 2009, Microsoft đã bổ sung thêm C# và CLI vào danh sách các chi tiết kỹ thuật của Microsoft Community Promise, vì vậy bất cứ ai cũng có thể hiện thực hóa các phiên bản tiêu chuẩn một cách an toàn mà không sợ bản quyền bằng sáng chế của Microsoft. Tuy nhiên, mệnh đề tuân thủ của CLI cho phép mở rộng các profile được hỗ trợ bằng cách thêm các phương thức mới và các kiểu dữ liệu mới vào các lớp, cũng như bắt nguồn từ các namespace mới. Nhưng nó không cho phép thêm các thành viên mới vào các interface. Điều này có nghĩa là các tính năng của CLI có thể được sử dụng và mở rộng, miễn là việc triển khai hồ sơ phù hợp không làm thay đổi hành vi của các chương trình chạy trên profile đó, đồng thời vẫn cho phép các hành vi không xác định từ các chương trình được viết cụ thể cho việc triển khai đó.

Năm 2012, ECMA và ISO đã xuất bản ấn bản mới của tiêu chuẩn CLI, và ấn bản này không được đề cập trong Community Promise.

 Triển khai 
.NET Framework là bản triển khai thương mại đầu tiên của Microsoft của CLI. Hệ thống thực thi ảo của nó là Common Language Runtime và việc triển khai các thư viện tiêu chuẩn là Framework Class Library.
 .NET Compact Framework là bản triển khai thương mại của Microsoft về CLI cho các thiết bị di động và Xbox 360.
 .NET Micro Framework là một ứng dụng mã nguồn mở của CLI cho các thiết bị có tài nguyên phần cứng hạn chế.
 .NET Core là một nhánh của.Net Framework, triển khai bởi.Net Foundation sử dụng giấy phép MIT
 Nền tảng phát triển Mono là một bản hiện thực hóa của CLI và các công nghệ đi kèm, được hỗ trợ bởi Xamarin.

 Đọc thêm 
 Thư viện Tiêu chuẩn (CLI)
 Danh sách các ngôn ngữ CLI

 Ghi chú 

Tham khảo




Thể loại:Tiêu chuẩn ISO