Lập trình meta


10

Tôi vừa bắt đầu hành trình trở thành nhà phát triển C ++ và gần đây tôi đã nghiên cứu một chủ đề gọi là lập trình meta. Cho đến nay, tôi đã trải qua rất nhiều thông tin về chủ đề này, và có vài câu hỏi.

  1. Cách sử dụng Reflection trong c ++: Có thể không? Theo sự hiểu biết của tôi, phản xạ là một kỹ thuật lập trình meta có khả năng điều khiển trạng thái của chương trình và thao tác của nó có thể là hướng nội hoặc hướng nội.

  2. Sự khác biệt giữa kiến ​​trúc phản chiếu và kiến ​​trúc siêu cấp là gì? Kiến trúc lập trình meta thuộc loại nào?

  3. Lập trình meta có hai cấp độ: cấp độ meta và cấp độ cơ sở. Theo hiểu biết của tôi, chương trình đối tượng hoặc hệ thống đang được điều tra là cấp độ cơ sở và chương trình meta sẽ hoạt động trên hệ thống được điều tra là cấp độ meta. Tôi có đúng không?

Cũng giúp tôi bằng cách cung cấp một số hướng dẫn về cách làm việc với siêu lập trình mẫu trong C ++.
Bạn có thể gợi ý cho tôi một số ví dụ khả thi mà tôi có thể tìm kiếm để thực hành kỹ thuật lập trình này không?


2
Câu hỏi này có thể thuộc về nhiều lập trình viên hơn là về stackoverflow. Cái trước là lý thuyết hơn, và sau này thực tế hơn. Một số phần có thể dễ dàng được trả lời từ quan điểm thực tế C ++ không có sự phản chiếu , nhưng những phần khác không liên quan đến mã (ví dụ, sự khác biệt giữa kiến ​​trúc phản chiếu và kim loại)
David Rodríguez - dribeas

Câu trả lời SO này giải quyết lý do tại sao C ++ không có sự phản chiếu: stackoverflow.com/q35389237/120163 và một số kỹ thuật C ++ yếu để mô phỏng nó không tốt.
Ira Baxter

Nếu bạn rất quan tâm đến siêu lập trình, tôi khuyên bạn nên xem ngôn ngữ D, rõ ràng hơn C ++ về điểm này.
deadalnix

Câu trả lời:


10

Siêu lập trình đơn giản có nghĩa là bạn có phương tiện để viết mã viết mã khác (theo nghĩa rộng). C ++ thực hiện điều này thông qua cơ chế mẫu, về cơ bản là ngôn ngữ macro an toàn kiểu. Hoàn toàn có thể chỉ cần áp dụng bước mở rộng mẫu và kết quả sẽ là mã C ++ không có mẫu hợp lệ.

Sự phản chiếu là khả năng của ngôn ngữ lập trình và / hoặc môi trường thời gian chạy để kiểm tra (và thường sửa đổi) các yếu tố ngôn ngữ của chính nó trong thời gian chạy. Thông thường, các ngôn ngữ phản chiếu cung cấp các cấu trúc dữ liệu đại diện cho các thành phần ngôn ngữ như lớp, phương thức, biến, tham số, v.v., cũng như các thói quen hoặc lớp để kiểm tra, sửa đổi và tạo chúng. Khả năng sửa đổi làm cho sự phản chiếu trở thành một loại lập trình meta, vì nó cho phép bạn viết mã tạo mã khác.

Các ví dụ khác về siêu lập trình bao gồm các trình tạo mã, các nhị phân tự sửa đổi (mặc dù chúng không còn phổ biến ngày nay như hai thập kỷ trước), các macro C; người ta có thể lập luận rằng cà ri và các kỹ thuật lập trình chức năng tương tự cũng là một loại siêu lập trình.


+1 Tôi thực sự thích câu trả lời của bạn và tôi muốn hỏi về việc sử dụng trình biên dịch như một dịch vụ như trong C # hoặc sử dụng một công cụ viết kịch bản như trong Java để thực thi mã được xây dựng trong thời gian chạy. Đây cũng không phải là một hình thức siêu lập trình sao?
M.Sameer

Vì vậy, bất cứ ai xây dựng một trình thông dịch Python trong C là siêu lập trình? Còn việc triển khai ORM ánh xạ ngôn ngữ hướng đối tượng sang SQL thì sao? Có phải mọi khung web là một ví dụ về siêu lập trình?
kojiro

1
  1. Không. Không. Các chương trình C ++ được biên dịch thành mã máy và tất cả thông tin về các lớp, v.v. bị mất (trừ khi sử dụng C ++ / CLI cho môi trường .NET, nhưng đó không phải là C ++ thuần túy).

2-3. Tôi không biết - hãy đợi câu trả lời khác giúp với điều đó :-)

Lập trình meta sử dụng các mẫu C ++ rất mạnh mẽ, nhưng cũng phức tạp. Việc mở rộng mẫu yêu cầu kiểu lập trình chức năng thay vì lập trình bắt buộc mà C ++ sử dụng. Nếu bạn không có kinh nghiệm trước đây về lập trình chức năng, tôi sẽ khuyên bạn nên đi đường vòng và học một số lisp, haskell hoặc sơ đồ cơ bản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.