Ở cấp độ trừu tượng, bạn có thể bao gồm mọi thứ bạn muốn bằng ngôn ngữ bạn đang thiết kế.
Ở cấp độ thực hiện, không thể tránh khỏi việc một số trong những điều đó sẽ đơn giản hơn để thực hiện, một số sẽ phức tạp, một số có thể được thực hiện nhanh chóng, một số bị ràng buộc là chậm hơn, v.v. Để giải thích cho điều này, các nhà thiết kế thường phải đưa ra quyết định khó khăn và thỏa hiệp.
Ở cấp độ triển khai, một trong những cách nhanh nhất chúng tôi đã đưa ra để truy cập vào một biến là tìm ra địa chỉ của nó và tải nội dung của địa chỉ đó. Có các hướng dẫn cụ thể trong hầu hết các CPU để tải dữ liệu từ các địa chỉ và các hướng dẫn đó thường cần biết chúng cần tải bao nhiêu byte (một, hai, bốn, tám, v.v.) và nơi để đặt dữ liệu chúng tải (đăng ký đơn, đăng ký cặp, thanh ghi mở rộng, bộ nhớ khác, vv). Bằng cách biết kích thước của một biến, trình biên dịch có thể biết chính xác hướng dẫn nào sẽ phát ra để sử dụng biến đó. Khi không biết kích thước của một biến, trình biên dịch sẽ cần phải sử dụng đến một thứ phức tạp hơn và có thể chậm hơn.
Ở cấp độ trừu tượng, điểm của phân nhóm là có thể sử dụng các thể hiện của một loại trong đó loại tương đương hoặc chung hơn được mong đợi. Nói cách khác, mã có thể được viết để mong đợi một đối tượng thuộc một loại cụ thể hoặc bất kỳ thứ gì có nguồn gốc hơn, mà không biết trước chính xác điều này sẽ là gì. Và rõ ràng, khi nhiều loại dẫn xuất có thể thêm nhiều thành viên dữ liệu, một loại dẫn xuất không nhất thiết phải có cùng yêu cầu bộ nhớ với các loại cơ sở của nó.
Ở cấp độ triển khai, không có cách đơn giản nào để một biến có kích thước được xác định trước giữ một thể hiện có kích thước không xác định và được truy cập theo cách bạn thường gọi hiệu quả. Nhưng có một cách để di chuyển mọi thứ xung quanh một chút và sử dụng một biến không phải để lưu trữ đối tượng, mà để xác định đối tượng và để đối tượng đó được lưu trữ ở một nơi khác. Cách đó là một tham chiếu (ví dụ: địa chỉ bộ nhớ) - một mức độ bổ sung bổ sung để đảm bảo rằng một biến chỉ cần giữ một số loại thông tin có kích thước cố định, miễn là chúng ta có thể tìm thấy đối tượng thông qua thông tin đó. Để đạt được điều đó, chúng ta chỉ cần tải địa chỉ (kích thước cố định) và sau đó chúng ta có thể làm việc như bình thường bằng cách sử dụng các giá trị bù trừ của đối tượng mà chúng ta biết là hợp lệ, ngay cả khi đối tượng đó có nhiều dữ liệu hơn mà chúng ta không biết. Chúng tôi có thể làm điều đó bởi vì chúng tôi không '
Ở cấp độ trừu tượng, phương pháp này cho phép bạn lưu trữ một (tham chiếu đến a) string
vào một object
biến mà không làm mất thông tin làm cho nó a string
. Tất cả các loại đều hoạt động tốt như thế này và bạn cũng có thể nói nó thanh lịch ở nhiều khía cạnh.
Tuy nhiên, ở cấp độ triển khai, mức độ bổ sung thêm bao gồm nhiều hướng dẫn hơn và trên hầu hết các kiến trúc, nó làm cho mỗi lần truy cập vào đối tượng có phần chậm hơn. Bạn có thể cho phép trình biên dịch giảm hiệu năng ra khỏi chương trình nếu bạn đưa vào ngôn ngữ của mình một số loại thường được sử dụng mà không có mức độ bổ sung (tham chiếu) đó. Nhưng bằng cách loại bỏ mức độ gián tiếp đó, trình biên dịch không thể cho phép bạn phân nhóm theo cách an toàn cho bộ nhớ nữa. Đó là bởi vì nếu bạn thêm nhiều thành viên dữ liệu vào loại của mình và bạn gán cho loại chung hơn, mọi thành viên dữ liệu bổ sung không phù hợp với không gian được phân bổ cho biến mục tiêu sẽ bị cắt đi.