D là một ngôn ngữ lập trình hệ thống hướng đối tượng, dùng câu lệnh, đa mẫu hình do Walter Bright của Digital Mars tạo ra và phát hành năm 2001. Quá trình thiết kế và phát triển ngôn ngữ này trong năm 2007 được Andrei Alexandrescu tham gia đóng góp. Mặc dù nó có nguồn gốc như là một bản phát triển kỹ thuật của C++, D là một ngôn ngữ riêng biệt, đã thiết kế lại một số tính năng cốt lõi của C++ trong khi cũng lấy cảm hứng từ các ngôn ngữ khác, đáng chú ý là các ngôn ngữ Java, Python, Ruby, C#, và Eiffel.
Mục tiêu thiết kế của D cố gắng kết hợp hiệu suất và sự an toàn của các ngôn ngữ biên dịch với sức mạnh biểu đạt của các ngôn ngữ năng động hiện đại. Mã D sau khi dịch thường nhanh như mã C++ tương đương, trong khi ngắn hơn và an toàn hơn về mặt bộ nhớ.
Các tính năng định kiểu biến, quản lý bộ nhớ tự động và cú pháp đặc biệt cho các kiểu thường dùng cho phép phát triển phần mềm nhanh hơn, trong khi việc kiểm tra giới hạn, thiết kế theo các tính năng của hợp đồng và hệ thống kiểu nhận thức tương tranh đồng thời giúp giảm sự xuất hiện của các lỗi phần mềm.
Tính năng
D được thiết kế với các bài học kinh nghiệm từ việc sử dụng C++ thực tế hơn là từ một quan điểm hoàn toàn lý thuyết. Mặc dù nó sử dụng nhiều khái niệm C và C++ nhưng nó cũng loại bỏ một số, và như vậy mã nguồn của nó không tương thích với mã nguồn C và C++. Tuy nhiên D đã bị hạn chế trong thiết kế của nó bởi quy tắc rằng bất kỳ mã nào là hợp pháp trong cả C và D sẽ hoạt động theo cùng một cách. D đã đạt được một số tính năng trước khi C++ đã làm, ví dụ bao đóng, các hàm ẩn danh, và biên dịch thực thi hàm thời gian. D thêm vào chức năng của C++ bằng cách thực hiện thiết kế theo hợp đồng, kiểm thử đơn vị, lập modul thực, thu gom rác, mảng hạng nhất, mảng kết hợp, mảng động, mảng cắt, hàm lồng nhau, tính toán biểu thức khi nó được gọi, và một cú pháp tổng quát được thiết kế lại. D giữ lại tính năng của C++ để thực hiện các lệnh ngôn ngữ lập trình bậc thấp và thêm hợp ngữ trong dòng lệnh. Tính kế thừa đa mức của C++ được thay thế bằng kế thừa đơn kiểu Java với các giao diện và các mixin. Mặt khác, cú pháp khai báo, khai báo và biểu thức của D gần giống với C++.
Trình biên dịch trên dòng lệnh đánh dấu sự khác biệt giữa D và các ngôn ngữ ứng dụng như Java và C#. Một bộ giải mã hợp ngữ trên dòng lệnh cho phép các lập trình viên nhập mã máy cụ thể trong mã lệnh D chuẩn, một phương thức thường được các lập trình viên hệ thống sử dụng để truy cập các tính năng cấp thấp của bộ xử lý cần thiết để chạy các chương trình giao diện trực tiếp với phần cứng, chẳng hạn như hệ điều hành và trình điều khiển thiết bị.
D đã tích hợp sẵn hỗ trợ cho các nhận xét, cho phép tạo tài liệu bình luận trong mã nguồn một cách tự động.
Mẫu hình lập trình
D hỗ trợ 5 mẫu hình lập trình: dùng lệnh, hướng đối tượng, lập trình meta, lập trình hàm và lập trình đồng thời (mô hình diễn viên).
Dùng câu lệnh
Lập trình dùng lệnh trong D gần giống với C. Hàm, dữ liệu, câu lệnh, khai báo và biểu thức hoạt động giống như trong C và có thể dùng trực tiếp thư viện của C. Mặt khác, một số khác biệt đáng chú ý giữa D và C trong lĩnh vực lập trình dùng lệnh bao gồm xây dựng vòng lặp for của D, cho phép lặp qua một danh sách, và các hàm lồng nhau, là các hàm được khai báo bên trong và có thể có các biến cục bộ bên trong hàm.
Hướng đối tượng
Lập trình hướng đối tượng trong D được dựa trên một hệ thống phân cấp thừa kế đơn mức, với tất cả các lớp bắt nguồn từ lớp Object. D không hỗ trợ đa thừa kế; thay vào đó, nó sử dụng các giao diện kiểu Java, có thể so sánh với các lớp trừu tượng thuần túy của C ++ và các mixin, phân tách các chức năng phổ biến từ hệ thống phân cấp thừa kế. D cũng cho phép định nghĩa các phương thức tĩnh và cuối cùng (không phải ảo) trong các giao diện.
Lập trình meta
Lập trình meta được hỗ trợ bởi sự kết hợp của các mẫu, biên dịch thực thi hàm thời gian, các bộ dữ liệu và các chuỗi hỗn hợp. Các ví dụ sau đây minh họa một số tính năng biên dịch theo thời gian của D.
Các mẫu trong D có thể được viết theo phong cách dòng lệnh hơn so với phong cách hàm của C++ cho các mẫu. Đây là một hàm thông thường tính toán giai thừa của một số:
ulong factorial(ulong n)
{
if (n<2)
return 1;
else
return n * factorial(n-1);
}
Ở đây, với việc dùng
static if
, cấu trúc điều kiện biên dịch thời gian của D, được dùng để mô tả việc xây dựng một khuôn mẫu thực hiện cùng một phép tính bằng cách sử dụng mã tương tự như của hàm ở trên:
template Factorial(ulong n)
{
static if (n<2)
enum Factorial = 1;
else
enum Factorial = n * Factorial!(n-1);
}
Trong hai ví dụ sau, mẫu và hàm được định nghĩa ở trên được sử dụng để tính giai thừa. Các loại hằng số không cần phải được chỉ định rõ ràng khi trình biên dịch nhập các loại của chúng từ phía bên phải khi gán kết quả:
enum fact_7 = Factorial!(7);
Đây là một ví dụ về việc thực hiện hàm khi biên dịch. Các hàm bình thường có thể được sử dụng trong các biểu thức biên dịch có thời gian không đổi, miễn là chúng thỏa mãn các tiêu chí nhất định:
enum fact_9 = factorial(9);
Hàm
std.string.format
thực hiện các định dạng chuỗi giống hàm
printf
(cũng tại thời gian biên dịch, thông qua CTFE), và pragma "msg" hiển thị kết quả tại thời gian biên dịch:
import std.string: format;
pragma(msg, format("7! = %s", fact_7));
pragma(msg, format("9! = %s", fact_9));
Các kết hợp chuỗi, kết hợp với thực thi hàm biên dịch, cho phép tạo mã nguồn D bằng cách sử dụng các phép toán chuỗi tại thời gian biên dịch. Điều này có thể được sử dụng để phân tích các ngôn ngữ cụ thể theo miền thành mã nguồn D, sẽ được biên dịch như một phần của chương trình:
import FooToD; // hypothetical module which contains a function that parses Foo source code
// and returns equivalent D code
void main()
{
mixin(fooToD(import("example.foo")));
}
Lập trình hàm
D hỗ trợ các tính năng lập trình làm như chức năng hàm ẩn danh, hàm đóng, đối tượng đệ quy và sử dụng các hàm bậc cao hơn. Có hai cú pháp cho các hàm ẩn danh, bao gồm một biểu mẫu nhiều câu lệnh và ký hiệu một biểu thức "viết tắt": Tài liệu hướng dẫn đưa ra nhiều ví dụ về cách triển khai các lược đồ quản lý bộ nhớ được tối ưu hóa khác nhau khi thu gom rác không đầy đủ trong một chương trình.
👁️
123 | ⌚2025-09-16 22:44:47.839

**D** là một ngôn ngữ lập trình hệ thống hướng đối tượng, dùng câu lệnh, đa mẫu hình do Walter Bright của Digital Mars tạo ra và phát hành năm 2001. Quá trình thiết kế
**D** là một ngôn ngữ lập trình hệ thống hướng đối tượng, dùng câu lệnh, đa mẫu hình do Walter Bright của Digital Mars tạo ra và phát hành năm 2001. Quá trình thiết kế
**D** là một ngôn ngữ lập trình hệ thống hướng đối tượng, dùng câu lệnh, đa mẫu hình do Walter Bright của Digital Mars tạo ra và phát hành năm 2001. Quá trình thiết kế
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
phải|nhỏ|402x402px|[[Mã nguồn của một chương trình máy tính đơn giản được viết bằng ngôn ngữ lập trình C. Khi được biên dịch và chạy, nó sẽ cho kết quả "Hello, world!".]] **Ngôn ngữ lập trình**
phải|nhỏ|402x402px|[[Mã nguồn của một chương trình máy tính đơn giản được viết bằng ngôn ngữ lập trình C. Khi được biên dịch và chạy, nó sẽ cho kết quả "Hello, world!".]] **Ngôn ngữ lập trình**
Đây là danh sách các ngôn ngữ lập trình đáng chú ý, được nhóm theo loại. Vì không có sơ đồ phân loại bao quát cho các ngôn ngữ lập trình, nên trong nhiều trường
Đây là danh sách các ngôn ngữ lập trình đáng chú ý, được nhóm theo loại. Vì không có sơ đồ phân loại bao quát cho các ngôn ngữ lập trình, nên trong nhiều trường
Đây là danh sách các ngôn ngữ lập trình đáng chú ý, được nhóm theo loại. Vì không có sơ đồ phân loại bao quát cho các ngôn ngữ lập trình, nên trong nhiều trường
**Go** là một ngôn ngữ lập trình mới do Google thiết kế và phát triển. Nó được kỳ vọng sẽ giúp ngành công nghiệp phần mềm khai thác tối đa nền tảng đa lõi của
**Go** là một ngôn ngữ lập trình mới do Google thiết kế và phát triển. Nó được kỳ vọng sẽ giúp ngành công nghiệp phần mềm khai thác tối đa nền tảng đa lõi của
Mục đích của **danh sách các ngôn ngữ lập trình** này là bao gồm tất cả các ngôn ngữ lập trình hiện tại đáng chú ý, được sử dụng hiện tại và những ngôn ngữ
Mục đích của **danh sách các ngôn ngữ lập trình** này là bao gồm tất cả các ngôn ngữ lập trình hiện tại đáng chú ý, được sử dụng hiện tại và những ngôn ngữ
Mục đích của **danh sách các ngôn ngữ lập trình** này là bao gồm tất cả các ngôn ngữ lập trình hiện tại đáng chú ý, được sử dụng hiện tại và những ngôn ngữ
Trong phần mềm máy tính, **lập trình đa năng** (tiếng Anh: **general-purpose programming language**) là ngôn ngữ lập trình được thiết kế để sử dụng cho việc Các ngôn ngữ lập trình ban đầu được
Trong phần mềm máy tính, **lập trình đa năng** (tiếng Anh: **general-purpose programming language**) là ngôn ngữ lập trình được thiết kế để sử dụng cho việc Các ngôn ngữ lập trình ban đầu được
Trong phần mềm máy tính, **lập trình đa năng** (tiếng Anh: **general-purpose programming language**) là ngôn ngữ lập trình được thiết kế để sử dụng cho việc Các ngôn ngữ lập trình ban đầu được
**Batch** là một ngôn ngữ lập trình được dựa trên các tập tin thực thi batch (*.bat, *.cmd,...) để chạy. Chúng sẽ được thực thi dưới dạng một cửa sổ **Command Prompt** để chạy những
**Batch** là một ngôn ngữ lập trình được dựa trên các tập tin thực thi batch (*.bat, *.cmd,...) để chạy. Chúng sẽ được thực thi dưới dạng một cửa sổ **Command Prompt** để chạy những
**Batch** là một ngôn ngữ lập trình được dựa trên các tập tin thực thi batch (*.bat, *.cmd,...) để chạy. Chúng sẽ được thực thi dưới dạng một cửa sổ **Command Prompt** để chạy những
**Cú pháp ngôn ngữ (lập trình) C** là tập hợp các quy tắc nhằm xác định cách thức để viết và dịch trong ngôn ngữ lập trình C. :Thí dụ:
// Dòng này sẽ
**Cú pháp ngôn ngữ (lập trình) C** là tập hợp các quy tắc nhằm xác định cách thức để viết và dịch trong ngôn ngữ lập trình C. :Thí dụ:
// Dòng này sẽ
**Ngôn ngữ biên dịch** (tiếng Anh: _compiled language_) là ngôn ngữ lập trình có triển khai thường là trình biên dịch (bộ dịch tạo ra mã máy từ mã nguồn), chứ không phải trình thông
**Ngôn ngữ biên dịch** (tiếng Anh: _compiled language_) là ngôn ngữ lập trình có triển khai thường là trình biên dịch (bộ dịch tạo ra mã máy từ mã nguồn), chứ không phải trình thông
**Ngôn ngữ biên dịch** (tiếng Anh: _compiled language_) là ngôn ngữ lập trình có triển khai thường là trình biên dịch (bộ dịch tạo ra mã máy từ mã nguồn), chứ không phải trình thông
LabVIEW là một ngôn ngữ lập trình đồ họa đa năng được phát triển bởi National Instrument. có cấu trúc dữ liệu cấp cao mạnh mẽ và hệ thống thư viện lớn giúp phát triển
LabVIEW là một ngôn ngữ lập trình đồ họa đa năng được phát triển bởi National Instrument. có cấu trúc dữ liệu cấp cao mạnh mẽ và hệ thống thư viện lớn giúp phát triển
Trong ngành khoa học máy tính, **lập trình hàm** (**lập trình chức năng**) là một mô hình lập trình xem việc tính toán là sự đánh giá các hàm toán học và tránh sử dụng
Trong ngành khoa học máy tính, **lập trình hàm** (**lập trình chức năng**) là một mô hình lập trình xem việc tính toán là sự đánh giá các hàm toán học và tránh sử dụng
Trong ngành khoa học máy tính, **lập trình hàm** (**lập trình chức năng**) là một mô hình lập trình xem việc tính toán là sự đánh giá các hàm toán học và tránh sử dụng
**Đặc tính** (tiếng Anh: _property_), trong một số ngôn ngữ lập trình hướng đối tượng, là một loại đặc biệt của thành viên lớp, trung gian chức năng giữa một trường (hay thành viên dữ
**Đặc tính** (tiếng Anh: _property_), trong một số ngôn ngữ lập trình hướng đối tượng, là một loại đặc biệt của thành viên lớp, trung gian chức năng giữa một trường (hay thành viên dữ
**Đặc tính** (tiếng Anh: _property_), trong một số ngôn ngữ lập trình hướng đối tượng, là một loại đặc biệt của thành viên lớp, trung gian chức năng giữa một trường (hay thành viên dữ
**Bộ trình dịch GNU** ( - thường được viết tắt thành **GCC**) là một tập hợp các trình biên dịch được thiết kế cho nhiều ngôn ngữ lập trình khác nhau. GCC là một thành
**Bộ trình dịch GNU** ( - thường được viết tắt thành **GCC**) là một tập hợp các trình biên dịch được thiết kế cho nhiều ngôn ngữ lập trình khác nhau. GCC là một thành
**Bộ trình dịch GNU** ( - thường được viết tắt thành **GCC**) là một tập hợp các trình biên dịch được thiết kế cho nhiều ngôn ngữ lập trình khác nhau. GCC là một thành
Trong lập trình hướng đối tượng, **giao thức** (tiếng Anh: _protocol_) hay **giao diện** (_interface_) là một phương tiện phổ biến để các đối tượng không liên quan giao tiếp với nhau. Đây là định
Trong lập trình hướng đối tượng, **giao thức** (tiếng Anh: _protocol_) hay **giao diện** (_interface_) là một phương tiện phổ biến để các đối tượng không liên quan giao tiếp với nhau. Đây là định
Trong lập trình hướng đối tượng, **giao thức** (tiếng Anh: _protocol_) hay **giao diện** (_interface_) là một phương tiện phổ biến để các đối tượng không liên quan giao tiếp với nhau. Đây là định
Lập trình ngày nay không còn là một công việc đặc thù mà chỉ có những chuyên gia mới có thể làm được, bất kỳ ai có một chiếc máy tính đều có thể trở
Lập trình ngày nay không còn là một công việc đặc thù mà chỉ có những chuyên gia mới có thể làm được, bất kỳ ai có một chiếc máy tính đều có thể trở
**Lập trình tổng quát** (tiếng Anh: _generic programming_) là một dạng lập trình máy tính mà trong đó thuật toán được viết theo cách kiểu _được-xác-định-sau_ và sau đó được _khởi tạo_ (_instantiate_) nếu cần
**Lập trình tổng quát** (tiếng Anh: _generic programming_) là một dạng lập trình máy tính mà trong đó thuật toán được viết theo cách kiểu _được-xác-định-sau_ và sau đó được _khởi tạo_ (_instantiate_) nếu cần
**Lập trình tổng quát** (tiếng Anh: _generic programming_) là một dạng lập trình máy tính mà trong đó thuật toán được viết theo cách kiểu _được-xác-định-sau_ và sau đó được _khởi tạo_ (_instantiate_) nếu cần