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


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 프로젝트에서 일반적으로 일관되게 표시되는 경향이 있습니다. 설명 / 통찰력에 대해서는 OnLisp 및 Let Over Lambda 를 확인하십시오 .

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


1

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

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