Làm thế nào phổ biến là lập trình meta? [đóng cửa]


10

Bạn có thường xuyên hoặc bạn đã thấy lập trình meta được sử dụng trong các dự án không? Trong uni tôi chưa bao giờ thấy điều này được áp dụng, nhưng tôi đã thấy điều này trong công việc trước đây của tôi (khi tôi thấy nó tôi đã bị thổi phồng về hiệu quả của nó).

Nhưng nó phổ biến như thế nào? Nó được sử dụng tất cả các thời gian, hoặc chỉ thỉnh thoảng?


5
Nó có thể không phổ biến; mặc dù khá phổ biến ở Lisp, Lisp không phổ biến - thậm chí không phổ biến Lisp.
paul

rõ ràng hay ngầm? Ở một thái cực sử dụng Java và C # được cho là lập trình meta do trình biên dịch của chúng tạo ra các tệp ngôn ngữ sau đó được biên dịch hoặc giải thích. Mặt khác, không có ai viết mã để tạo mã bằng ngôn ngữ mà họ đã xây dựng trình biên dịch.
Móż

Metaprogramming là phổ biến. Bất kỳ dự án mã nguồn mở nào dựa vào Autotools đều sử dụng siêu lập trình. MOC trong thế giới Qt, tblgen trong LLVM, T4 trong nhiều dự án .NET, gần như bất kỳ dự án web nào tạo JavaScript, v.v.
SK-logic

Câu trả lời:


5

Nếu bạn coi sự phản chiếu là một loại lập trình meta, thì nó tương đối phổ biến. Đối với một số người, ngay cả lập trình chung (mẫu và khái quát) là một dạng lập trình meta, vì vậy điều đó thậm chí còn phổ biến hơn.

Tuy nhiên, theo tôi, lập trình meta là một cái gì đó phức tạp hơn, liên quan đến việc tạo mã thực tế và do đó khá hiếm, ngay cả trong các ngôn ngữ kịch bản.


Tại sao siêu lập trình mẫu không phải là "tạo mã thực tế"?!? Các mẫu C ++ là Turing-Complete và bạn có thể tạo mã phức tạp tùy ý.
SK-logic

@ SK-logic: Ý tôi là mã mới được tạo theo yêu cầu khi chạy. Các mẫu được xử lý bởi trình biên dịch, bạn có thể xem chúng như một loại macro tiền biên dịch mạnh mẽ.
Wizard79

Tại sao bạn muốn tạo mã trong thời gian chạy? Các hình thức siêu lập trình mạnh mẽ nhất (như trong Common Lisp, Vợt, Template Haskell, v.v.) đang trong thời gian biên dịch.
SK-logic

3

Tôi nghĩ rằng nó phụ thuộc mạnh mẽ vào ngôn ngữ bạn sử dụng. Những người Lisp thông thường có thể sử dụng hợp lý nó - Giao thức Meta-Object cho phép những thứ gọn gàng trong suốt / trực giao, chẳng hạn - và Smalltalker sử dụng nó thường xuyên.


2

Nó có xu hướng hiển thị phổ biến và nhất quán trong các dự án Common Lisp. Kiểm tra OnLispLet Over Lambda để biết một số giải thích / cái nhìn sâu sắc.

Nếu bạn chỉ sau các ví dụ (và biết CL), hãy xem kho lưu trữ Antiweb ; có rất nhiều chương trình meta đang diễn ra dưới vỏ bọc.


1

Trong hai năm qua, bit lập trình đầu tiên cho một nhiệm vụ mới hầu như luôn luôn là viết mã để viết mã. Có hàng tấn nồi hơi liên quan đến tương tác với cơ sở dữ liệu có thể được đơn giản hóa để tạo tập lệnh tự động. Hãy nghĩ về những thứ mà bạn cần truy vấn 3 bảng để tạo thành một đối tượng hoặc một số như vậy. Tại sao lại tự viết nếu có 10 điều này có thể thay đổi trong tương lai?

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.