Jak powszechne jest metaprogramowanie? [Zamknięte]

10

Jak często lub kiedykolwiek widziałeś metaprogramowanie w projektach? Na uniwersytecie nigdy nie widziałem, żeby się to stosowało, ale widziałem to w mojej poprzedniej pracy (kiedy to zobaczyłem, byłem pod wrażeniem skuteczności).

Ale jak często to jest? Czy jest używany cały czas, czy tylko sporadycznie?

gablin
źródło
5
To może nie być tak powszechne; chociaż dość powszechne w Lisp, Lisp nie jest tak powszechne - nawet Common Lisp.
Paul
wyraźne czy dorozumiane? Z jednej strony używanie Java i C # jest prawdopodobnie metaprogramowaniem, ponieważ ich kompilatory generują pliki językowe, które są następnie kompilowane lub interpretowane. Z drugiej strony prawie nikt nie pisze kodu, aby wygenerować kod w języku, dla którego zbudował kompilator.
Móż
Metaprogramowanie jest wszechobecne. Każdy projekt opensource oparty na Autotools korzysta z metaprogramowania. MOC w świecie Qt, tblgen w LLVM, T4 w wielu projektach .NET, prawie każdy projekt internetowy generujący JavaScript i tak dalej.
SK-logic

Odpowiedzi:

5

Jeśli uważasz, że odbicie jest rodzajem metaprogramowania, jest ono stosunkowo powszechne. Dla niektórych osób nawet ogólne programowanie (szablony i ogólne) jest formą metaprogramowania, więc jest to jeszcze bardziej powszechne.

Moim zdaniem jednak metaprogramowanie jest czymś bardziej złożonym, co wiąże się z faktycznym generowaniem kodu, a zatem jest dość rzadkie, nawet w językach skryptowych.

Wizard79
źródło
Dlaczego metaprogramowanie szablonów nie jest „faktycznym generowaniem kodu”?!? Szablony C ++ są kompletne Turinga i można generować dowolny złożony kod.
SK-logic
@ SK-logic: Mam na myśli generowanie nowego kodu na żądanie w czasie wykonywania. Szablony są przetwarzane przez kompilator, możesz zobaczyć je jako potężny rodzaj makra prekompilatora.
Wizard79
dlaczego chcesz generować kod w czasie wykonywania? Najpotężniejsze formy metaprogramowania (jak w Common Lisp, Racket, Template Haskell itp.) Znajdują się w czasie kompilacji.
SK-logic
3

Myślę, że zależy to silnie od używanego języka. Zwykli ludzie Lisp prawdopodobnie używają go w uczciwy sposób - na przykład Protokół Meta-Object pozwala na przejrzyste / ortogonalne uporczywość - na przykład Smalltalkers często go używają.

Frank Shearar
źródło
2

Zazwyczaj pojawia się często i konsekwentnie w projektach Common Lisp. Sprawdź OnLisp i Let Over Lambda, aby uzyskać wyjaśnienia / informacje.

Jeśli szukasz przykładów (i znasz CL), sprawdź repozytorium Antiweb ; pod przykryciem dzieje się sporo metaprogramowania.

Inaimathi
źródło
1

Przez ostatnie dwa lata pierwszą częścią programowania nowego zadania było prawie zawsze pisanie kodu do pisania kodu. Istnieje mnóstwo schematów powiązanych z interakcjami z bazą danych, które można uprościć do automatycznego generowania skryptów. Pomyśl o rzeczach, w których musisz wykonać zapytanie do 3 tabel, aby utworzyć obiekt lub coś takiego. Po co pisać, jeśli jest 10 takich rzeczy, które mogą się zmienić w przyszłości?

pszenica
źródło