Seberapa umumkah meta-programming? [Tutup]

10

Seberapa sering Anda atau Anda pernah melihat meta-pemrograman digunakan dalam proyek? Di uni saya belum pernah melihat ini diterapkan, tetapi saya sudah melihat ini pada pekerjaan saya sebelumnya (ketika saya melihatnya saya terpesona betapa efektifnya itu).

Tapi seberapa umum itu? Apakah ini digunakan sepanjang waktu, atau hanya sesekali?

Gablin
sumber
5
Mungkin tidak begitu umum; meskipun cukup umum di Lisp, Lisp tidak umum - bahkan Lisp umum.
paul
eksplisit atau implisit? Pada satu ekstrim menggunakan Java dan C # bisa dibilang meta-pemrograman karena kompiler mereka menghasilkan file bahasa yang kemudian dikompilasi atau ditafsirkan. Di sisi lain hampir tidak ada yang menulis kode untuk menghasilkan kode dalam bahasa yang mereka buat kompiler.
Móż
Metaprogramming ada di mana-mana. Setiap proyek opensource yang mengandalkan Autotools menggunakan metaprogramming. MOC di dunia Qt, tblgen di LLVM, T4 di banyak proyek .NET, hampir semua proyek web yang menghasilkan JavaScript, dan sebagainya.
SK-logic

Jawaban:

5

Jika Anda menganggap refleksi semacam meta-pemrograman, itu relatif umum. Bagi sebagian orang bahkan pemrograman generik (templat dan generik) adalah bentuk meta-pemrograman, jadi itu bahkan lebih umum.

Namun, menurut saya, meta-pemrograman adalah sesuatu yang lebih kompleks, yang melibatkan pembuatan kode aktual, dan karenanya sangat jarang, bahkan dalam bahasa scripting.

Wizard79
sumber
Mengapa metaprogramming template bukan "pembuatan kode aktual"?!? Templat C ++ sudah selesai Turing, dan Anda bisa membuat kode kompleks yang berubah-ubah.
SK-logic
@ SK-logic: Maksud saya kode baru dibuat berdasarkan permintaan saat runtime. Template diproses oleh kompiler, Anda dapat melihatnya sebagai jenis precompiler makro yang kuat.
Wizard79
mengapa Anda ingin membuat kode di runtime? Bentuk-bentuk metaprogramming yang paling kuat (seperti dalam Common Lisp, Racket, Template Haskell, dll.) Ada dalam waktu kompilasi.
SK-logic
3

Saya pikir ini sangat tergantung pada bahasa apa yang Anda gunakan. Orang umum Lisp mungkin memanfaatkannya secara adil - Meta-Object Protocol memungkinkan untuk hal-hal yang rapi, transparan / kegigihan ortogonal, misalnya - dan Smalltalkers sering menggunakannya.

Frank Shearar
sumber
2

Itu cenderung muncul secara umum dan konsisten dalam proyek-proyek Common Lisp. Lihat OnLisp dan Let Over Lambda untuk penjelasan / wawasan.

Jika Anda hanya mencari contoh (dan tahu CL), periksa repositori Antiweb ; ada banyak pemrograman meta terjadi di bawah selimut.

Inaimathi
sumber
1

Selama dua tahun terakhir, bit pertama pemrograman pada tugas baru hampir selalu menulis kode untuk menulis kode. Ada satu ton boiler yang terkait dengan interaksi dengan database yang dapat disederhanakan menjadi pembuatan skrip otomatis. Pikirkan hal-hal di mana Anda perlu kueri 3 tabel untuk membentuk objek atau semacamnya. Mengapa menulis sendiri jika ada 10 hal yang mungkin berubah di masa depan?

wheaties
sumber