nói dối e blog

Tối Ưu Hóa Cấu Trúc Dữ Liệu Tag Set

Trong thư viện ECS vừa được triển khai, cấu trúc Tag đóng vai trò then chốt. Đây là loại Component đặc biệt không chứa dữ liệu nhưng vẫn được liên kết với Entity, chủ yếu dùng cho mục đích lọc chọn. Khi thiết kế cấu trúc dữ liệu Component, tôi chọn phương pháp sử dụng mảng liên tục trong bộ nhớ với Entity ID được sắp xếp theo thứ tự. Thuật toán truy vấn được cải tiến giúp thời gian tìm kiếm đa số trường hợp đạt gần mức hằng số O(1), thấp hơn Log(N).

Thuật Toán Tìm Kiếm Nhị Phân Có Dự Đoán

Trong quá trình xây dựng framework ECS tối ưu bộ nhớ bằng ngôn ngữ C, tôi hướng đến việc thiết kế cấu trúc dữ liệu đơn giản nhưng hiệu quả để quản lý lượng lớn đối tượng. Giải pháp tôi chọn là mỗi component được biểu diễn dưới dạng struct thuần không chứa tham chiếu, đi kèm với một định danh 32-bit. Tập hợp các component này được lưu trữ trong một vùng nhớ liên tục.

Tối Ưu Hóa Bộ Nhớ Thông Qua Cơ Chế Cache Bảng Cấu Hình Trong Lua

Trong quá trình phát triển prototype game mô phỏng kiểu Factorio, tôi nhận ra vấn đề then chốt là làm thế nào để sử dụng bộ nhớ một cách hiệu quả khi triển khai trên thiết bị di động có giới hạn tài nguyên. Khi chơi Factorio với nhiều mod mở rộng, tôi quan sát thấy lượng RAM tiêu thụ thường vượt quá 10GB - phần lớn là dữ liệu logic chứ không phải tài nguyên đồ họa. Chỉ tính riêng các mod phức tạp đã có thể chứa hàng trăm nghìn đến hàng triệu đối tượng game.

Hành Trình Chuyển Đổi Công Cụ Xây Dựng Từ Make Sang Ninja

Trong những tháng gần đây, nhóm phát triển engine game nội bộ của chúng tôi đã thực hiện một cuộc cải tổ quan trọng khi chuyển đổi hệ thống xây dựng dự án từ GNU Make sang Ninja. Quyết định này xuất phát từ nhu cầu phát triển đa nền tảng ngày càng phức tạp và đòi hỏi hiệu suất cao hơn trong quy trình làm việc.

Bối Cảnh Dẫn Đến Sự Thay Đổi

Hành trình bắt đầu với việc tôi thiết kế bộ Makefile đầu tiên cho engine. Bộ công cụ này hoạt động ổn định trên các nền tảng MinGW, MacOSX và iOS, tạo nên một khung xương vững chắc cho hệ thống xây dựng. Tuy nhiên, khi đội ngũ phát triển mở rộng, nhu cầu sử dụng MSVC (Microsoft Visual C++) từ các thành viên trở nên cấp thiết hơn bao giờ hết. Trong khi chúng tôi vẫn chưa kịp tích hợp hỗ trợ MSVC vào hệ thống Makefile, một số kỹ sư đã phải duy trì thủ công các project MSVC riêng biệt.

Khám Phá ANSI Escape Code Và Cách Đóng Gói Trong Lua

Gần đây, tôi nảy ra một ý tưởng thú vị và quyết định xây dựng một bản prototype đơn giản. Vì dự án liên quan đến tương tác người-máy, tôi cần vẽ một số yếu tố đồ họa cơ bản trên màn hình. Dù hiện nay có rất nhiều công cụ hỗ trợ, nhưng tôi muốn thử nghiệm một cách tiếp cận hoài cổ hơn: sử dụng các ký tự ASCII trong môi trường console.

Mở Rộng Kiểu Hằng Số Trong Lua

Gần đây mình có một vài ý tưởng còn khá non nớt liên quan đến Lua.

Hiện tại bảng hằng số trong nguyên mẫu hàm của Lua chỉ hỗ trợ ba kiểu dữ liệu cơ bản là boolean, số học và chuỗi ký tự. Các kiểu phức tạp như hàm hoặc bảng hoàn toàn không thể xuất hiện trong vùng lưu trữ hằng số này.

Mình nghĩ nếu chúng ta có thể vượt qua giới hạn này, cho phép nhiều kiểu giá trị hơn trở thành hằng số, thì sẽ rất hữu ích. Chẳng hạn, một kỹ thuật lập trình thường thấy là viết dòng lệnh:

0%