매크로(컴퓨터 과학)

(매크로 언어에서 리디렉션됨)

컴퓨터 공학에서 매크로("매크로 명령"의 줄임말, μακ μα- "긴 길이, 큰"[1] 형식을 결합한 그리스어)는 특정 입력을 대체 출력에 매핑하는 방법을 지정하는 규칙이나 패턴이다. 입력에 매크로를 적용하는 것은 매크로 확장이다. 입력과 출력은 어휘 토큰 또는 문자의 시퀀스일 수도 있고 구문 트리일 수도 있다. 공통 명령어 시퀀스를 쉽게 호출할 수 있도록 소프트웨어 애플리케이션에서 문자 매크로를 지원한다. 토큰과 트리 매크로는 일부 프로그래밍 언어에서 지원되어 코드 재사용을 가능하게 하거나 때로는 도메인별 언어에 대해 언어를 확장한다.

매크로는 프로그래머에게 하나의 프로그램 문장으로서 일련의 컴퓨팅 지시사항을 이용할 수 있게 하는 데 사용되어 프로그래밍 작업이 덜 지루하고 오류 발생 가능성이 적다.[2][3] (따라서, "큰" 코드 블록은 "작은" 문자 시퀀스에서 확장될 수 있기 때문에 "매크로스"라고 불린다.) 매크로는 종종 조건부 조립자 프로그램이 생성하는 것을 지시하는 위치나 키워드 매개변수를 허용하고 운영 체제, 플랫폼 또는 기타 요소와 같은 변수에 따라 전체 프로그램 또는 프로그램 세트를 만드는 데 사용되어 왔다. 이 용어는 "매크로 명령"에서 유래되었으며, 그러한 확장은 원래 어셈블리 언어 코드를 생성하는 데 사용되었다.

키보드 및 마우스 매크로

키보드 매크로마우스 매크로는 키 입력과 마우스 작업의 짧은 시퀀스를 다른, 일반적으로 시간이 더 많이 걸리는 키 입력과 마우스 동작의 시퀀스로 변환할 수 있다. 이러한 방식으로 자주 사용되거나 반복적인 키 입력과 마우스 이동 순서를 자동화할 수 있다. 이러한 매크로를 만들기 위한 별도의 프로그램을 매크로 레코더라고 한다.

1980년대에는 매크로 프로그램(원래 스마트키, 당시 슈퍼키, KeyWorks, Prokey)이 각본을 자동으로 포맷하기 위한 수단으로 처음에는 큰 인기를 끌었고, 그 다음에는 다양한 사용자 입력 작업에 이용되었다. 이 프로그램들은 TSR(종료 체류형) 운영 방식을 기반으로 하여 어떤 맥락에서 발생했든 모든 키보드 입력에 적용되었다. 그들은 마우스 중심 사용자 인터페이스의 출현과 워드프로세서스프레드시트와 같은 어플리케이션에서 키보드와 마우스 매크로의 가용성에 따라 어느 정도 노후화 되어 어플리케이션에 민감한 키보드 매크로를 만들 수 있게 되었다.

키보드 매크로는 대량 멀티플레이어 온라인 롤플레잉 게임(MMORPG)에 활용돼 반복적이지만 수익성이 높은 작업을 수행할 수 있어 자원을 축적할 수 있다. 사람의 노력 없이 이뤄지는 만큼 경기 경제를 왜곡할 수 있다. 이 때문에 매크로 사용은 대부분의 MMORPG의 TOSEULA를 위반하는 것으로, 관리자들은 이를 억제하기 위해 상당한 노력을 기울인다.[4]

애플리케이션 매크로 및 스크립팅

응용 프로그램의 내장 매크로 기능을 사용하여 만든 키보드와 마우스 매크로를 응용 프로그램 매크로라고도 한다. 그들은 순서를 한 번 수행하고 응용 프로그램이 조치를 기록하도록 함으로써 만들어진다. 응용 프로그램의 특징에 직접 액세스할 수 있는 가장 일반적인 스크립팅 언어인 매크로 프로그래밍 언어도 존재할 수 있다.

프로그래머의 텍스트 편집자 Emacs("매크로 편집"의 줄임말)는 이 생각을 따라 결론에 이른다. 사실상 편집자의 대부분은 매크로로 만들어져 있다. Emacs는 원래 편집 언어 TECO의 매크로 세트로 고안되었다. 후에 그것은 Lisp의 방언에 포팅되었다.

또 다른 프로그래머의 텍스트 편집자인 Vim(vi의 후손)도 키보드 매크로를 구현하고 있다. 사람이 키보드에서 타이핑하는 것을 레지스터(매크로)에 기록할 수 있고 마이크로소프트 오피스용 VBA 매크로처럼 재생하거나 편집할 수 있다. Vim은 또한 Vimscript라는[5] 스크립팅 언어를 가지고 있어 매크로를 만든다.

VBA(Visual Basic for Applications, VBA)는 Office 97부터 Office 2019까지 Microsoft Office에 포함된 프로그래밍 언어다(Office 97 이전 Office의 일부 구성 요소에서 사용 가능했지만). 그러나, 그것의 기능은 이러한 응용 프로그램들 중 일부에 원래 포함되었던 매크로 언어로부터 발전하여 대체되었다.

VM의 CMS(Communication Monitor System) 구성 요소에서 실행되는 XEDITEXE, EXE2REXX로 작성된 매크로를 지원하며, 일부 CMS 명령은 실제로 XEDIT 매크로 주위에 래퍼되어 있었다. XEDIT의 부분 클론인 헤슬링 편집기(THE)는 레지나와 오픈 오브젝트 REX(oorex)를 이용한 렉스 매크로를 지원한다. 많은 일반적인 애플리케이션과 PC의 일부 애플리케이션은 Rexx를 스크립팅 언어로 사용한다.

매크로바이러스

VBA는 대부분의 마이크로소프트 윈도우즈 시스템 호출에 액세스하고 문서가 열리면 실행한다. 이것은 일반적으로 매크로 바이러스라고 알려진 VBA에서 컴퓨터 바이러스를 쓰는 것을 비교적 쉽게 만든다. 1990년대 중후반, 이것은 컴퓨터 바이러스의 가장 흔한 유형 중 하나가 되었다. 그러나 1990년대 후반부터 현재까지 마이크로소프트는 그들의 프로그램을 패치하고 업데이트해왔다. 게다가, 현재의 안티바이러스 프로그램은 그러한 공격에 즉각적으로 대응한다.

매개 변수화된 매크로

매개변수화된 매크로란 주어진 객체를 그 확장에 삽입할 수 있는 매크로다. 이것은 매크로에 함수의 힘을 준다.

간단한 예로, C 프로그래밍 언어에서, 이것은 매개변수화된 매크로가 아닌 일반적인 매크로:

 #PI 3.14159 정의 

이것이 원인이다. PI 항상 으로 대체되다 3.14159 어디서든 말이야 반면 매개변수화된 매크로의 예는 다음과 같다.

 #nump fard(x) (x)-1) 

이 매크로가 확장되는 것은 어떤 인수 x가 그것에 전달되느냐에 달려 있다. 확장 가능한 몇 가지 사항:

 선행(2) → (2)-1) 선행(y+2) → (y+2) -1) 선행(f(5) → (f(5)-1) 

매개변수화된 매크로는 인라인 확장을 수행하는 데 유용한 소스 레벨 메커니즘이지만, C와 같은 언어에서는 인라인 기능 등 인라인 확장을 수행하는 다른 메커니즘에 비해 여러 가지 심각한 단점이 있다.

반면, Lisp, PL/I, Scheme과 같은 언어에서 사용되는 매개변수화된 매크로는 훨씬 더 강력하며, 그들의 주장에 기초하여 어떤 코드를 생산할지 결정할 수 있기 때문에, 그것들은 런타임 코드 생성을 효과적으로 수행하는 데 사용될 수 있다.

문자 대체 매크로

C와 같은 언어와 일부 조립 언어들은 컴파일러나 조립자에 대한 사전 프로세서로 구현되는 기본적인 매크로 시스템을 가지고 있다. C 전처리기 매크로는 문자 수준이 아닌 토큰에서 간단한 텍스트 대체에 의해 작동된다. 그러나 IBM HLASM(High Level Assembler)과 같은 좀 더 정교한 조립자의 매크로 시설은 전처리기로는 구현할 수 없다.; 명령과 데이터를 조립하는 코드와 매크로 호출의 조립 코드가 혼재되어 있다.

매크로를 주로 사용하는 것은 컴퓨터 타입설정 시스템 TeX와 그 파생상품이며, 대부분의 기능은 매크로를 기반으로 한다.

매크로ML정적 타이핑과 매크로 시스템을 조화시키려는 실험 시스템이다. Nemerle은 구문 매크로를 입력했고, 이러한 구문 매크로를 생각할 수 있는 생산적인 한 가지 방법은 다단계 연산이다.

기타 예:

일부 주요 애플리케이션은 다른 애플리케이션(예: CMS의 XEDIT)에 의해 실행된 텍스트 매크로로 작성되었다.

임베디드어군

PHP와 같은 일부 언어는 자유형 텍스트 또는 다른 언어의 소스 코드에 포함될 수 있다. 코드 조각이 인식되는 메커니즘(예: 코드 조각에 의해 분류됨) <?php 그리고 ?>)는 텍스트 매크로 언어와 유사하지만 훨씬 강력하고, 완전한 피처링 언어다.

절차 매크로

PL/I 언어의 매크로는 PL/I 자체의 하위 집합으로 작성된다. 컴파일러는 컴파일러 시간에 "프로세서 문"을 실행하고, 이 실행의 출력은 컴파일되는 코드의 일부를 형성한다. 친숙한 절차 언어를 매크로 언어로 사용하는 능력은 더 크고 느린 컴파일러를 희생시키면서 텍스트 대체 매크로보다 훨씬 더 큰 힘을 준다.

프레임 기술의 프레임 매크로에는 자체 명령 구문이 있지만 어떤 언어로도 텍스트를 포함할 수 있다. 각 프레임은 내포된 횡단구성요소의 계층 구조에서 일반적인 구성요소인 동시에, 그 횡단구성요소의 프레임과 자신을 통합하는 절차(더 높은 수준의 횡단구성요소에 유리한 통합 충돌을 해결하는 재귀적 과정)이다. 출력물은 사용자 정의 문서로, 일반적으로 컴파일 가능한 소스 모듈이다. 프레임 기술은 유사하지만 미묘하게 다른 요소들의 확산을 피할 수 있는데, 매크로와 서브루틴의 발명 이후 소프트웨어 개발을 괴롭혀온 사안이다.

대부분의 어셈블리 언어는 루프가 풀리는 경우 코드 블록을 N번 반복할 수 있도록 하는 등 절차상 매크로 설비가 덜 강력하지만, 실제 어셈블리 언어와는 구문이 완전히 다르다.

통사성 매크로

앞에서 설명한 C 전처리와 같은 매크로 시스템은 어휘 토큰 수준에서 작동하는 어휘 구조를 신뢰성 있게 보존할 수 없다. 통사적 매크로 시스템은 대신 추상적 구문 나무 수준에서 작동하며, 원래 프로그램의 어휘 구조를 보존한다. 가장 널리 사용되는 통사적 매크로 시스템 구현은 Lisp와 유사한 언어로 나타난다. 이러한 언어는 균일하고 괄호화된 구문(S-expression) 때문에 특히 이러한 매크로 스타일에 적합하다. 특히 균일한 구문을 통해 매크로의 호출 여부를 쉽게 판단할 수 있다. 리스프 매크로는 프로그램 구조 자체를 변형시키며, 그러한 변형을 표현하는데 사용할 수 있는 완전한 언어를 사용한다. 통사성 매크로는 종종 리스프 같은 언어에서 발견되지만, 프롤로그,[6] 에를랑,[7] 딜란,[8] 스칼라,[9] 네메를,[10] 러스트,[11] 엘리시르,[12] 님,[13] 하쉬,[14] 줄리아 등의 다른 언어로도 이용 가능하다.[15] JavaScript,[16] C#[17]Python에 대한 타사 확장으로도 사용할 수 있다.[18]

얼리 리스프 매크로

Lisp이 매크로를 갖기 전에는 FEXPR이라고 불리는 기능적 연산자를 가지고 있었는데, 이들의 입력은 인수에 의해 계산된 값이 아니라 오히려 인수의 통사적 형식이며, 그 출력은 계산에 사용될 값이었다. 즉, FEXPR을 EAL과 같은 수준으로 구현하여 메타평가 계층에 대한 창을 제공하였다. 이것은 일반적으로 효과적으로 추론하기 어려운 모델인 것으로 밝혀졌다.[19]

1963년 티모시 하트(Timothy Hart)는 AI 메모 57: LISP를 위한 매크로 정의(MACRO Definitions for LISP)에서 Lisp 1.5에 매크로 추가를 제안했다.[20]

아나포릭 매크로

아나포닉 매크로(anaphoric macro)는 매크로에 공급되는 어떤 형태를 의도적으로 포착하는 프로그래밍 매크로의 한 유형으로, 아나포르(anaphor)가 참조할 수 있다. 아나포리틱 매크로는 폴 그레이엄의 On Lisp에 처음 등장했으며, 그 이름은 언어 아나포라에 대한 언급이다. 즉, 단어들을 선행 단어의 대용으로 사용하는 말이다.

위생 매크로

80년대 중반, 다수의 논문에서[21][22] 위생적인 거시적 팽창의 개념을 도입하였다.macro expansion) 개념을 도입하였다.syntax-rules매크로 정의와 매크로 사용의 통사적 환경이 구별되어 매크로 정의자와 사용자가 의도치 않은 변수 캡처(cf. 참조 투명성)에 대해 걱정하지 않아도 되는 패턴 기반 시스템이다. 위생 매크로는 R5RS, R6RSR7RS 표준에서 Scheme에 대해 표준화되었다. 다음과 같은 다수의 경쟁적인 위생 매크로 구현이 존재한다. syntax-rules, syntax-case, 명시적 명칭 변경 및 통사적 폐쇄. 둘 다 syntax-rules 그리고 syntax-case 계획 표준으로 작성되었다.

최근 라켓은 위생적인 매크로의 개념과 '평가자의 탑'을 결합하여 하나의 매크로 시스템의 구문 확장 시간이 다른 코드 블록의 통상적인 런타임으로,[23] 인터리브 확장 및 파싱을 비부모화 언어로 적용하는 방법을 보여 주었다.[24]

Scheme 이외의 여러 언어는 위생적인 매크로를 구현하거나 부분적으로 위생적인 시스템을 구현한다. 스칼라, 러스트, 엘리시르, 줄리아, 딜런, , 네메를 예로 들 수 있다.

적용들

평가순서
매크로 시스템에는 다양한 용도가 있다. 평가 순서를 선택할 수 있으면(게을러 평가 및 엄격하지 않은 기능 참조) 언어에 내장된 구성과 구별할 수 없는 새로운 구문 구조(예: 제어 구조)를 만들 수 있다. 예를 들어, Lisp 사투리에서 cond 그러나 부족하다 if매크로를 사용하는 전자의 관점에서 후자를 정의할 수 있다. 예를 들어, Scheme은 연속성과 위생적인 매크로를 둘 다 가지고 있는데, 이것은 프로그래머가 언어에 그것들을 빌드할 필요 없이 루프나 초기 출구 구성과 같은 그들 자신의 통제 추상화를 설계할 수 있게 해준다.
데이터 하위 언어 및 도메인별 언어
다음으로, 매크로는 즉시 코드로 컴파일되는 데이터 언어를 정의할 수 있게 하는데, 이것은 상태 기계와 같은 구조가 자연스럽고 효율적인 방식으로 구현될 수 있다는 것을 의미한다.[25]
바인딩 구조
매크로는 또한 새로운 바인딩 구조를 도입하는 데 사용될 수 있다. 가장 잘 알려진 예는 의 변혁이다. let 일련의 논쟁에 함수를 적용하기 위해.

펠레리센은 이 세 가지 범주가 그러한 시스템에서 매크로를 합법적으로 사용하는 주된 방법을 구성하고 있다고 추측한다[26]. 다른 이들은 매크로가 비위생적이거나 선택적 비위생적 변환을 허용하는 매크로의 대체 사용을 제안했다.

매크로와 다른 언어 특징들의 상호 작용은 연구의 생산적인 영역이었다. 예를 들어, 구성 요소와 모듈은 대규모 프로그래밍에 유용하지만 매크로와 이러한 다른 구성물의 상호 작용은 함께 사용하기 위해 정의되어야 한다. 매크로와 상호작용할 수 있는 모듈 및 컴포넌트 시스템은 Scheme 및 매크로를 사용하는 다른 언어용으로 제안되었다. 예를 들어 라켓 언어는 매크로(macro)를 포함한 언어로 매크로(macro)를 쓸 수 있는 통사탑까지 매크로(macro)의 개념을 확장하여, 통사적 층이 구별되도록 하고 모듈이 매크로(macro)를 다른 모듈로 내보낼 수 있도록 한다.

기계 독립 소프트웨어용 매크로

매크로는 일반적으로 짧은 문자열(매크로 호출)을 더 긴 명령 순서에 매핑하는 데 사용된다. 매크로의 또 다른 흔하지 않은 사용은 반대로 하는 것이다: 일련의 명령을 매크로 문자열에 매핑하는 것이다. 이것은 STEGE2 Mobile Programming System이 취한 접근방식이었는데, 이 접근방식은 기본적인 매크로 컴파일러(SIMCMP라고 함)를 사용하여 주어진 컴퓨터의 특정 명령어 세트를 상대적인 기계 독립 매크로에 매핑했다. 이러한 기계에 독립적인 매크로에서 작성된 애플리케이션(비록 컴파일러)은 초보적인 매크로 컴파일러가 장착된 어떤 컴퓨터에서도 변경 없이 실행될 수 있다. 그러한 맥락에서 첫 번째 응용 프로그램 실행은 기계에 독립적인 매크로 언어로 쓰여진 보다 정교하고 강력한 매크로 컴파일러다. 이 매크로 컴파일러는 그 자체에 부스트랩 방식으로 적용되어 컴파일되고 훨씬 더 효율적인 버전의 컴파일러를 생산한다. 이 접근방식의 장점은 복잡한 응용프로그램을 거의 노력하지 않고 하나의 컴퓨터에서 매우 다른 컴퓨터로 포팅할 수 있다는 것이다(각 대상 기계 아키텍처의 경우, 초보적인 매크로 컴파일러의 쓰기만을 위해).[27][28] 현대 프로그래밍 언어, 특히 C의 등장은 거의 모든 컴퓨터에서 컴파일러를 사용할 수 있는 접근법을 불필요하게 만들었다. 그러나 이는 컴파일러 부트스트래핑의 첫 번째 예 중 하나였다.

어셈블리 언어

매크로 명령은 프로그래머에 의해 정의될 수 있지만, 일반적으로 매크로는 운영 체제와 함께 제공되는 매크로 라이브러리와 연결되어 운영 체제 기능에 대한 액세스를 허용한다.

  • 액세스 방법에 의한 주변 액세스(OPEN, CLOSE, READ 및 WRITE와 같은 매크로 포함)
  • 하위 작업 생성 및 동기화를 위한 ACT, WAIT 및 POST와 같은 운영 체제 기능.[29] 일반적으로 그러한 매크로는 실행 가능한 코드(예: EX)로 확장된다.IT 매크로 인스톨레이션,
  • 를 들어, DCB 매크로에 대한[30] 정의 상수 지침 목록(예: DOS용 DTF(Define The File) 또는 코드와 상수의 조합, 그리고 매크로 명령의 매개변수에 따른 확장 세부 정보(예: 파일 참조 및 READ 명령의 데이터 영역)
  • 실행 가능한 코드는 종종 일상적으로 호출하기 위한 지점과 링크 레지스터 명령 또는 운영 체제 기능을 직접 호출하기 위한 감독자 호출 명령으로 종료된다.
  • 시스템 생성을 위한 2단계 작업 스트림 생성(예: OS/360). sysgen 1단계 매크로는 일반적인 매크로와 달리 저장소에 로드할 데이터나 코드를 생성하지 않고 오히려 펀치 문을 사용하여 JCL 및 관련 데이터를 출력한다.

IBM 메인프레임에서 사용되는 것과 같은 구형 운영 체제에서는 표준 매크로 지침이 항상 하이레브에 사용할 수 있는 루틴에 있는 것을 포함하지 않았기 때문에 (물론 어셈블리 언어 하위 루틴을 사용하지 않는 한) 고급 언어 프로그램이 아닌 어셈블러 언어 프로그램에만 완전한 운영 체제 기능을 사용할 수 있었다.엘리트 언어

역사

1950년대 중반 디지털 컴퓨터용 프로그램 작성에 어셈블리 언어 프로그래밍이 보편적으로 사용되었을 때, 하나의 매크로 명령에서 여러 개의 어셈블리 언어문을 생성하여 작성해야 하는 프로그램 코딩의 양을 줄이고 프로그램 쓰기를 강제하는 두 가지 주된 목적으로 매크로 명령어의 사용이 시작되었다. 표준(예: 입력/출력 명령어를 표준 방식으로 지정)[31] 매크로 지침은 조립 언어 프로그래밍과 FORTRANCOBOL과 같이 뒤따르는 고급 프로그래밍 언어 사이의 중간 단계였다. IBM 705 컴퓨터의 "매크로 언어"를 개발하기 위한 가장 초기 프로그래밍 설비 중 두 곳은 델라웨어의 다우 케미칼사와 캘리포니아의 탄도 미사일 물류 사무소의 항공 재료 사령부에 있었다. 대상 조립 언어의 형식으로 작성된 매크로 명령은 조립자에 대한 사전 프로세서였던 매크로 컴파일러에 의해 처리되어 조립 언어 지침을 기계 언어 지침으로 변환하는 조립자 프로그램에서 다음에 처리할 하나 이상의 조립 언어 지침을 생성할 것이다..[32]

1950년대 후반까지 매크로 언어가 그 뒤를 이었다. 이것은 하나의 프로그램이 매크로 프리프로세서와 동일한 패키지에 있는 조립자의 두 기능을 모두 제공하는 두 프로그램의 조합이었다.[32][failed verification]

1959년, 더글러스 E. Bell Labs의 Eastwood와 Douglas McIlroy는 인기 있는 SAP 조립업체에 조건부 매크로와 재귀 매크로를 도입하여 매크로 SAP라고 알려진 것을 만들었다.[33][34] 매킬로이의 1960년 논문은 매크로 프로세서를 통해 모든 (고급 포함) 프로그래밍 언어를 확장하는 분야에서 핵심이었다.[35][33]

매크로 조립자는 조립 언어 프로그래머들이 그들 자신의 매크로 언어를 구현할 수 있도록 허용했고 MSDOS와 CPM-86의 초기 버전과 같은 동일한 CPU를 실행하지만 서로 다른 운영 체제를 실행하는 두 컴퓨터 간에 제한된 코드 이식성을 허용했다. 매크로 라이브러리는 각 대상 시스템에 대해 작성되어야 하지만 전체 어셈블리 언어 프로그램은 작성되지 않아야 한다. 보다 강력한 매크로 조립자는 서로 다른 기계나 다른 운영 체제에서 서로 다른 코드를 생성할 수 있는 매크로 지침에서 조건부 조립 구성을 사용할 수 있도록 허용하여 다중 라이브러리의 필요성을 줄였다는 점에 유의하십시오.[citation needed]

1980년대와 1990년대 초에는 데스크톱 PC가 몇 MHz에서만 실행되고 있었고 조립 언어 루틴은 C, Fortran, Pascal 등으로 작성된 프로그램 속도를 높이기 위해 일반적으로 사용되었다. 이 언어들은, 그 당시, 서로 다른 호출 규약을 사용했다. 매크로는 조립 언어로 작성된 루틴과 거의 모든 언어로 작성된 애플리케이션의 앞쪽 끝을 연결하는 데 사용될 수 있다. 다시 말하지만, 기본 어셈블리 언어 코드는 그대로 유지되었고, 각 대상 언어에 대해 매크로 라이브러리만 작성하면 되었다.[citation needed]

유닉스 및 그 파생상품과 같은 현대의 운영체제에서는 운영체제 접속이 서브루틴을 통해 제공되며, 대개 동적 라이브러리에 의해 제공된다. C와 같은 고급 언어는 운영체제 기능에 대한 포괄적인 접근을 제공하므로 그러한 기능을 위한 조립자 언어 프로그램의 필요성이 없어진다.[citation needed]

참고 항목

참조

  1. ^ 옥스퍼드 영어 사전, s.v. 매크로, 매크로-지식매크로-
  2. ^ Greenwald, Irwin D.; Maureen Kane (April 1959). "The Share 709 System: Programming and Modification". Journal of the ACM. New York, NY, USA: ACM. 6 (2): 128–133. doi:10.1145/320964.320967. S2CID 27424222. One of the important uses of programmer macros is to save time and clerical-type errors in writing sequence of instructions which are often repeated in the course of a program.
  3. ^ Strachey, Christopher (October 1965). "A General Purpose Macrogenerator". Computer Journal. 8 (3): 225–241. doi:10.1093/comjnl/8.3.225.
  4. ^ "Runescape: The Massive Online Adventure Game by Jagex Ltd". Retrieved 2008-04-03.
  5. ^ "scripts : vim online". www.vim.org.
  6. ^ "Prolog Macros". www.metalevel.at. Retrieved 2021-04-05.
  7. ^ "Erlang -- Preprocessor". erlang.org. Retrieved 2021-05-24.
  8. ^ "The Dylan Macro System — Open Dylan". opendylan.org. Retrieved 2021-04-05.
  9. ^ "Def Macros". Scala Documentation. Retrieved 2021-04-05.
  10. ^ "About - Nemerle programming language official site". nemerle.org. Retrieved 2021-04-05.
  11. ^ "Macros - The Rust Programming Language". doc.rust-lang.org. Retrieved 2021-04-05.
  12. ^ "Macros". elixir-lang.github.com. Retrieved 2021-04-05.
  13. ^ "macros". nim-lang.org. Retrieved 2021-04-05.
  14. ^ "Macros". Haxe - The Cross-platform Toolkit.
  15. ^ "Metaprogramming · The Julia Language". docs.julialang.org. Retrieved 2021-04-05.
  16. ^ "Sweet.js - Hygienic Macros for JavaScript". www.sweetjs.org.
  17. ^ "LeMP Home Page · Enhanced C#". ecsharp.net.
  18. ^ "Macros in Python: quasiquotes, case classes, LINQ and more!: lihaoyi/macropy". 7 February 2019 – via GitHub.
  19. ^ Marshall, Joe. "untitled email". Retrieved May 3, 2012.
  20. ^ Hart, Timothy P. (October 1963). "AIM-057, MACRO Definitions for LISP, Timothy P. Hart". hdl:1721.1/6111. Cite 저널은 필요로 한다. journal= (도움말)
  21. ^ Kohlbecker, Eugene; Friedman, Daniel; Felleisen, Matthias; Duba, Bruce. "Hygienic Macro Expansion". doi:10.1145/319838.319859.
  22. ^ [1] 클린저, 리스. "일하는 매크로스"
  23. ^ Flatt, Matthew. "Composable and compilable macros: you want it when?" (PDF).
  24. ^ Rafkind, Jon; Flatt, Matthew. "Honu: Syntactic Extension for Algebraic Notation through Enforestation" (PDF).
  25. ^ "Automata via Macros". cs.brown.edu.
  26. ^ [2], Matthias Felleisen, LL1 메일링 리스트 게시
  27. ^ Orgass, Richard J.; William M. Waite (September 1969). "A base for a mobile programming system". Communications of the ACM. New York, NY, USA: ACM. 12 (9): 507–510. doi:10.1145/363219.363226. S2CID 8164996.
  28. ^ Waite, William M. (July 1970). "The mobile programming system: STAGE2". Communications of the ACM. New York, NY, USA: ACM. 13 (7): 415–421. doi:10.1145/362686.362691. S2CID 11733598.
  29. ^ "University of North Florida" (PDF).
  30. ^ "DTF (DOS/VSE)".
  31. ^ "IBM Knowledge Center". IBM Knowledge Center. 16 August 2013.
  32. ^ 위로 이동: "Assembler Language Macro Instructions". Cisco.
  33. ^ 위로 이동: Holbrook, Bernard D.; Brown, W. Stanley. "Computing Science Technical Report No. 99 – A History of Computing Research at Bell Laboratories (1937–1975)". Bell Labs. Archived from the original on September 2, 2014. Retrieved February 2, 2020.
  34. ^ "Macro SAP – Macro compiler modification of SAP". HOPL: Online Historical Encyclopaedia of Programming Languages. Archived from the original on August 13, 2008.
  35. ^ Layzell, P. (1985). "The History of Macro Processors in Programming Language Extensibility". The Computer Journal. 28 (1): 29–33. doi:10.1093/comjnl/28.1.29.

외부 링크