메타 프로그래밍은 얼마나 흔합니까? [닫은]


10

프로젝트에서 메타 프로그래밍이 얼마나 자주 사용되는지 보셨습니까? uni에서 나는 이것이 적용되는 것을 보지 못했지만, 나는 나의 이전 직업에서 이것을 보았습니다.

그러나 얼마나 흔한가요? 항상 또는 가끔 사용됩니까?


5
그렇게 일반적이지 않을 수도 있습니다. Lisp에서는 매우 흔하지 만 Lisp는 일반적인 것이 아니며 일반적인 Lisp도 아닙니다.
paul

명시 적 또는 암시 적? Java와 C #을 사용하는 극단적 인 경우에는 컴파일러가 언어 파일을 출력 한 다음 컴파일하거나 해석하기 때문에 메타 프로그래밍이 가능합니다. 다른 사람은 컴파일러를 구축 한 언어로 코드를 생성하는 코드를 아무도 작성하지 않습니다.
Móż

메타 프로그래밍은 어디에나 있습니다. Autotools에 의존하는 모든 오픈 소스 프로젝트는 메타 프로그래밍을 사용하고 있습니다. Qt 세계의 MOC, LLVM의 tblgen, 수많은 .NET 프로젝트의 T4, JavaScript를 생성하는 거의 모든 웹 프로젝트 등.
SK-logic

답변:


5

리플렉션을 일종의 메타 프로그래밍이라고 생각하면 비교적 일반적입니다. 일부 사람들에게는 일반 프로그래밍 (템플릿 및 일반)도 메타 프로그래밍의 한 형태이므로 훨씬 더 일반적입니다.

그러나 제 생각에는 메타 프로그래밍은 좀 더 복잡합니다. 실제 코드 생성과 관련이 있기 때문에 스크립팅 언어에서도 흔하지 않습니다.


템플릿 메타 프로그래밍이 "실제 코드 생성"이 아닌 이유는 무엇입니까?! C ++ 템플릿은 Turing-complete이며 임의의 복잡한 코드를 생성 할 수 있습니다.
SK-logic

@ SK-logic : 런타임시 요청시 새로운 코드가 생성되는 것을 의미합니다. 템플릿은 컴파일러에서 처리되며 강력한 프리 컴파일러 매크로로 볼 수 있습니다.
Wizard79

왜 런타임에 코드를 생성하고 싶습니까? 가장 강력한 메타 프로그래밍 형식 (Common Lisp, Racket, Template Haskell 등)은 컴파일 타임에 있습니다.
SK-logic

3

사용하는 언어에 따라 크게 달라집니다. 일반적인 Lisp 사람들은 아마도 그것을 공정하게 사용합니다. Meta-Object Protocol은 예를 들어 투명 / 직교 지속성 같은 깔끔한 것들을 허용하며 Smalltalker는 그것을 자주 사용합니다.


2

Common Lisp 프로젝트에서 일반적으로 일관되게 표시되는 경향이 있습니다. 설명 / 통찰력에 대해서는 OnLispLet Over Lambda 를 확인하십시오 .

예를 들어 보면 (그리고 CL을 알고 있다면) 안티 웹 저장소를 확인하십시오 . 엄청나게 많은 메타 프로그래밍이 진행되고 있습니다.


1

지난 2 년 동안 새로운 작업에 대한 첫 프로그래밍 비트는 거의 항상 코드를 작성하기위한 코드를 작성해 왔습니다. 자동 스크립트 생성으로 단순화 할 수있는 데이터베이스와의 상호 작용과 관련된 많은 상용구가 있습니다. 3 개의 테이블을 쿼리하여 객체 또는 이와 같은 것을 형성 해야하는 것을 생각하십시오. 앞으로 변경 될 수있는 10 가지가 있다면 왜 직접 작성해야합니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.