매크로(컴퓨터 사이언스)

Macro (computer science)
jEdit 매크로 에디터

컴퓨터 프로그래밍에서 매크로(macro 명령의 줄임말)[1]는 특정 입력을 대체 출력에 매핑하는 방법을 지정하는 규칙 또는 패턴입니다.입력에 매크로를 적용하는 것을 매크로 확장이라고 합니다.입력 및 출력은 일련의 어휘 토큰 또는 문자 또는 구문 트리일 수 있습니다.문자 매크로는 일반적인 명령어시퀀스를 쉽게 호출할 수 있도록 소프트웨어 어플리케이션에서 지원됩니다.토큰 및 트리 매크로는 일부 프로그래밍 언어에서 지원되며 코드 재사용을 활성화하거나 언어를 확장할 수 있습니다. 경우에 따라 도메인별 언어일 수도 있습니다.

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

키보드 및 마우스 매크로

키보드 매크로와 마우스 매크로를 사용하면 짧은 키 입력 시퀀스와 마우스 동작을 다른 키 입력 시퀀스와 마우스 동작 시퀀스로 변환할 수 있습니다.보통 시간이 많이 걸립니다.이러한 방법으로 자주 사용하거나 반복되는 키 입력 및 마우스 이동을 자동화할 수 있습니다.이러한 매크로를 작성하기 위한 개별 프로그램을 매크로 레코더라고 부릅니다.

1980년대에는 매크로 프로그램(원래 스마트키, 슈퍼키, KeyWorks, Prokey)이 매우 인기가 있었습니다.처음에는 스크린 플레이를 자동으로 포맷하는 수단으로, 그 후 다양한 사용자 입력 태스크용으로 사용되었습니다.이러한 프로그램은 TSR(종단상주) 작동 모드에 기반하여 발생 상황에 관계없이 모든 키보드 입력에 적용되었습니다.마우스 구동식 사용자 인터페이스의 등장과 워드프로세서나 스프레드시트 의 응용 프로그램에서 키보드와 마우스 매크로를 사용할 수 있게 되면서 어느 정도 구식이 되어 애플리케이션에 민감한 키보드 매크로를 만들 수 있게 되었습니다.

키보드 매크로는 대규모 멀티플레이어 온라인 롤플레잉 게임(MMORPG)에서 반복적이지만 수익성이 높은 작업을 수행하기 위해 사용할 수 있으므로 리소스가 축적됩니다.이것은 사람의 노력 없이 이루어지기 때문에 게임의 경제를 왜곡시킬 수 있다.따라서 매크로 사용은 대부분의 MMORPG의 TOS 또는 EULA를 위반하는 것이며 관리자는 매크로 사용을 [4]억제하기 위해 상당한 노력을 기울이고 있습니다.

응용 프로그램 매크로 및 스크립트 작성

애플리케이션의 내장 매크로 기능을 사용해 작성된 키보드 및 마우스 매크로를 애플리케이션 매크로라고 부르기도 합니다.이러한 작업은 시퀀스를 한 번 수행한 후 응용 프로그램이 작업을 기록하도록 함으로써 생성됩니다.어플리케이션의 기능에 직접 접근할 수 있는 기본 매크로 프로그래밍 언어, 가장 일반적인 스크립트 언어도 존재할 수 있습니다.

프로그래머의 텍스트 에디터인 Emacs('매크로 편집'의 줄임말)는 이 아이디어를 끝까지 따라갑니다.실제로 에디터의 대부분은 매크로로 구성되어 있습니다.Emacs는 원래 편집 언어 TECO의 매크로 세트로 고안되었지만 나중에 리스프 방언으로 이식되었습니다.

또 다른 프로그래머의 텍스트 에디터인 Vim(vi의 후손)도 키보드 매크로를 구현하고 있습니다.키보드에 입력된 내용을 레지스터(매크로)에 기록할 수 있으며 Microsoft Office용 VBA 매크로와 마찬가지로 재생 또는 편집할 수 있습니다.Vim에는 매크로를 생성하기 위한 Vimscript라는[5] 스크립트 언어도 있습니다.

VBA(Visual Basic for Applications)는 Office 97부터 Office 2019까지 Microsoft Office에 포함된 프로그래밍 언어입니다(단, Office 97 이전 버전의 Office 일부 컴포넌트에서 사용 가능).그러나 그 기능은 이러한 어플리케이션 중 일부에 원래 포함되어 있던 매크로 언어에서 발전하여 대체되었습니다.

XEDITVMConversational Monitor System(CMS) 컴포넌트에서 실행되며 EXEC, EXEC2, REXX작성된 매크로를 지원하며 일부 CMS 명령어는 실제로 XEDIT 매크로를 둘러싼 래퍼였습니다.XEDIT의 부분 클론인 Hessling Editor(THE)는 Regina 및 Open Object REXX(oorexx)를 사용하여 Rexx 매크로를 지원합니다.많은 일반적인 응용 프로그램 및 PC에서 Rexx를 스크립트 언어로 사용합니다.

매크로바이러스

VBA는 대부분의 Microsoft Windows 시스템 호출에 액세스할 수 있으며 문서를 열 때 실행됩니다.이것에 의해, 매크로 바이러스라고 불리는 VBA 에 컴퓨터 바이러스를 쓰는 것이 비교적 용이하게 됩니다.1990년대 중후반, 이것은 컴퓨터 바이러스의 가장 흔한 종류 중 하나가 되었습니다.그러나 1990년대 후반과 현재까지 마이크로소프트는 프로그램[citation needed]패치를 적용하고 업데이트하고 있습니다.게다가 현재의 안티바이러스 프로그램은 이러한 공격에 즉시 대응합니다.

매개 변수화된 매크로

매개 변수화된 매크로는 해당 확장에 지정된 개체를 삽입할 수 있는 매크로입니다.이는 매크로에 함수의 힘을 제공합니다.

간단한 예로서 C 프로그래밍 언어에서는 파라미터화된 매크로가 아닌 일반적인 매크로입니다.

#정의 PI 3.14159

이것이 원인입니다.PI늘 바뀌다3.14159어디에 있든 상관없습니다.한편 파라미터화된 매크로의 예는 다음과 같습니다.

#pread(x)((x)-1)

이 매크로가 확장되는 대상은 x가 전달되는 인수에 따라 달라집니다.다음으로 확장 가능한 몇 가지 예를 제시하겠습니다.

pred(2) → ((2) -1) pred(y+2) → ((y+2) -1) pred(f(5)) → ((f(5)-1))

매개 변수화된 매크로는 인라인 확장을 수행하기 위한 유용한 소스 수준 메커니즘이지만, C와 같이 단순한 텍스트 치환을 사용하는 언어에서는 인라인 함수 등 인라인 확장을 수행하기 위한 다른 메커니즘에 비해 많은 심각한 단점이 있습니다.

한편, Lisp, PL/I, Scheme와 같은 언어에서 사용되는 파라미터화된 매크로는 훨씬 강력하며, 인수에 따라 어떤 코드를 생성할지 결정할 수 있습니다.따라서 런타임 코드 생성에 효과적으로 사용할 수 있습니다.

텍스트 치환 매크로

C와 같은 언어나 일부 어셈블리 언어에는 컴파일러 또는 어셈블러의 프리프로세서로 구현되는 기본적인 매크로 시스템이 있습니다.C 프리프로세서매크로는 문자 레벨이 아닌 토큰에서 단순한 텍스트 치환으로 동작합니다.그러나 IBM HLASM(High Level Assembler)과 같은 보다 정교한 어셈블러의 매크로 기능은 사전 프로세서와 함께 구현할 수 없습니다. 즉, 명령 및 데이터 조립용 코드는 매크로 호출을 조립하기 위한 코드와 함께 사용됩니다.

매크로의 일반적인 용도는 컴퓨터 조판 시스템 TeX 및 그 파생 모델에 있습니다.이 시스템에서는 대부분의 기능이 매크로에 근거하고 있습니다.

매크로ML정적 타이핑과 매크로 시스템을 조화시키는 실험 시스템입니다.Nemerle은 구문 매크로를 입력했습니다.이 구문 매크로를 다단계 연산이라고 생각할 수 있는 생산적인 방법 중 하나입니다.

기타 예:

일부 주요 응용프로그램은 CMS의 XEDIT 등 다른 응용프로그램에 의해 실행되는 텍스트 매크로로 작성되었습니다.

삽입 가능한 언어

PHP와 같은 일부 언어는 자유 형식 텍스트 또는 다른 언어의 소스 코드에 포함될 수 있습니다.코드 fragment가 인식되는 메커니즘(예를 들어 괄호로 묶음)<?php그리고.?>)는 텍스트 매크로 언어와 비슷하지만 훨씬 강력하고 기능이 풍부한 언어입니다.¹¹¹¹¹

프로시저 매크로

PL/I 언어의 매크로는 PL/I 자체의 서브셋으로 작성됩니다.컴파일러는 컴파일 시에 "프리프로세서 스테이트먼트"를 실행하고, 이 실행의 출력은 컴파일되는 코드의 일부를 형성합니다.익숙한 절차 언어를 매크로 언어로 사용할 수 있기 때문에 더 크고 느린 컴파일러를 희생하면서 텍스트 대체 매크로보다 훨씬 더 큰 힘을 얻을 수 있습니다.

프레임 테크놀로지의 프레임 매크로에는 독자적인 명령어 구문이 있지만, 임의의 언어로 된 텍스트를 포함할 수도 있습니다.각 프레임은 중첩된 하위 어셈블리의 계층에서 일반 컴포넌트인 동시에 해당 하위 어셈블리 프레임과 자신을 통합하기 위한 절차(높은 수준의 하위 어셈블리에 유리하게 통합 충돌을 해결하는 재귀 프로세스)입니다.출력은 커스텀 문서(일반적으로 컴파일 가능한 소스 모듈)입니다.프레임 테크놀로지는 유사하지만 미묘하게 다른 컴포넌트의 확산을 막을 수 있습니다.이것은 매크로와 서브루틴의 발명 이후 소프트웨어 개발에 골머리를 앓아온 문제입니다.

대부분의 어셈블리 언어에는 예를 들어 루프 롤링을 위해 코드 블록을 N회 반복할 수 있는 절차 매크로 기능이 있지만 실제 어셈블리 언어와는 구문이 완전히 다릅니다.

구문 매크로

앞에서 설명한 C 프리프로세서 등 어휘 토큰 수준에서 동작하는 매크로시스템은 어휘 구조를 확실하게 유지할 수 없습니다.구문 매크로 시스템은 대신 추상 구문 트리 수준에서 작동하며 원래 프로그램의 어휘 구조를 보존합니다.통사 매크로 시스템의 가장 널리 사용되는 구현은 리스프와 같은 언어에서 찾을 수 있습니다.이 언어들은 한결같은 괄호로 둘러싸인 구문(S-표현식이라고 함)으로 인해 이러한 유형의 매크로에 특히 적합합니다.특히 구문이 통일되어 있기 때문에 매크로의 기동 판별이 용이합니다.lisp 매크로는 프로그램 구조 자체를 변환하며, 이러한 변환을 표현하기 위해 완전한 언어를 사용할 수 있습니다.통사 매크로는 리스프어족 언어에서 자주 볼 수 있지만 프롤로그,[6] 얼랑,[7] [8]딜란, 스칼라,[9] 네메를,[10] 러스트,[11] Elixir,[12] ,[13] Haxe,[14] Julia [15]등의 다른 언어에서도 사용할 수 있습니다.또한 JavaScript,[16] C#[17] [18]Python에 대한 서드파티 확장으로도 사용할 수 있습니다.

초기 리스프 매크로

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

1963년 티모시 하트는 AI 메모 57: MACRO Definitions for LISP에서 [20]Lisp 1.5에 매크로를 추가할 것을 제안했다.

아나포릭 매크로

아나포릭 매크로란, 아나포(anaphor, 다른 것을 가리키는 표현)에 의해서 참조될 가능성이 있는 매크로에 공급되는 형태를 의도적으로 캡처하는 프로그래밍 매크로의 일종입니다.아나포릭 매크로는 Paul Graham의 On Lisp에서 처음 등장했고, 그 이름은 언어 아나포라(앞의 단어 대신 단어를 사용하는 것)에 대한 언급이다.

위생 매크로

80년대 중반, 많은[21][22] 논문이 위생적인 매크로 확장 개념을 소개했습니다.syntax-rules매크로 정의의 구문 환경과 매크로 사용이 다른 패턴 기반 시스템. 매크로 정의자와 사용자가 의도하지 않은 변수 캡처에 대해 걱정할 필요가 없습니다(참조 투명도 참조).위생 매크로는 R5RS, R6RSR7RS 규격의 스킴에 대해 표준화되어 있습니다.다음과 같은 위생 매크로의 여러 경쟁적인 구현이 존재합니다.syntax-rules,syntax-case, 명시적 이름 변경 및 구문 폐쇄.둘다요.syntax-rules그리고.syntax-case는 Scheme 표준으로 표준화 되어 있습니다.

최근 Racket은 한 매크로 시스템의 구문 확장 시간이 다른 코드 [23]블록의 일반적인 실행 시간이 되도록 위생 매크로의 개념을 "평가자의 탑"과 결합하여 부모화되지 않은 [24]언어로 인터리브 확장과 파싱을 적용하는 방법을 보여주고 있다.

Scheme 이외의 많은 언어는 위생 매크로를 구현하거나 부분적으로 위생적인 시스템을 구현합니다.예를 들어 Scala, Rust, Elixir, Julia, Dylan, NimNemerle있습니다.

적용들

평가순서
매크로 시스템에는 다양한 용도가 있습니다.평가 순서를 선택할 수 있는 능력(느린 평가 및 비엄격 기능 참조)은 언어에 내장된 구문과 구별되지 않는 새로운 구문 구조(예: 제어 구조)를 생성할 수 있다.예를 들어, 리스프 방언에서는cond부족하지만if매크로를 사용하여 전자의 관점에서 후자를 정의할 수 있습니다.예를 들어 Scheme는 연속 매크로와 위생 매크로를 모두 갖추고 있어 프로그래머는 언어로 작성할 필요 없이 자체 제어 추상화(루핑 및 조기 종료 구성 등)를 설계할 수 있습니다.
데이터 하위 언어 및 도메인별 언어
다음으로 매크로를 사용하면 즉시 코드로 컴파일되는 데이터 언어를 정의할 수 있습니다.즉, 스테이트 머신 등의 구조는 자연스럽고 [25]효율적인 방법으로 구현될 수 있습니다.
바인딩 구성
매크로를 사용하여 새로운 바인딩 구조를 도입할 수도 있습니다.가장 잘 알려진 예는 의 변환입니다.let함수를 일련의 인수에 적용할 수 있습니다.

Felleisen은 이 세 가지 범주가 이러한 시스템에서 매크로의 주요 합법적 사용을 구성한다고 추측한다[26].다른 사람들은 비위생적이거나 선택적 비위생적 변환을 허용하는 매크로 시스템의 아나포릭 매크로와 같은 매크로의 대체 사용을 제안했다.

매크로와 그 외의 언어 기능의 상호작용은, 연구의 생산적인 영역이 되어 왔습니다.예를 들어, 컴포넌트와 모듈은 대규모 프로그래밍에 유용하지만 매크로와 이러한 다른 구조의 상호작용은 함께 사용할 수 있도록 정의되어야 합니다.매크로와 상호작용할 수 있는 모듈 및 컴포넌트 시스템은 매크로가 있는 스킴 및 기타 언어에 대해 제안되고 있습니다.예를 들어, Racket 언어는 매크로 시스템의 개념을 구문 타워로 확장합니다.여기서는 매크로를 포함한 언어로 매크로를 작성할 수 있으며, 구문 레이어가 구별되고 모듈이 다른 모듈로 매크로를 내보낼 수 있도록 위생 기능을 사용합니다.

머신에 의존하지 않는 소프트웨어용 매크로

매크로는 보통 짧은 문자열(매크로 호출)을 긴 시퀀스의 명령에 매핑하기 위해 사용됩니다.매크로의 또 다른 일반적인 용도는 일련의 명령을 매크로 문자열에 매핑하는 것입니다.이것은 STAGE2 모바일 프로그래밍 시스템이 채택한 접근법입니다.이 접근법은 기본적인 매크로 컴파일러(SIMCMP)를 사용하여 특정 컴퓨터의 특정 명령 세트를 머신에 의존하지 않는 매크로에 매핑하는 것입니다.이러한 머신에 의존하지 않는 매크로로 작성된 애플리케이션(특히 컴파일러)은 기본적인 매크로 컴파일러를 탑재한 컴퓨터 상에서 변경하지 않고 실행할 수 있습니다.이러한 맥락에서 실행되는 첫 번째 애플리케이션은 머신에 의존하지 않는 매크로 언어로 작성된 보다 정교하고 강력한 매크로 컴파일러입니다.이 매크로 컴파일러는 부트스트랩 방식으로 그 자체에 적용되어 컴파일되고 훨씬 더 효율적인 버전을 생성합니다.이 접근방식의 장점은 복잡한 애플리케이션을 하나의 컴퓨터에서 매우 다른 컴퓨터로 쉽게 이식할 수 있다는 것입니다(각 타깃 머신 아키텍처에 대해 기본적인 매크로 [27][28]컴파일러를 쓰는 것만으로).거의 모든 컴퓨터에서 컴파일러를 사용할 수 있는 현대 프로그래밍 언어, 특히 C의 출현은 이러한 접근 방식을 불필요하게 만들었습니다.그러나 이것은 컴파일러 부트스트래핑의 첫 번째 인스턴스 중 하나였습니다.

어셈블리 언어

매크로 명령어는 프로그래머에 의해 네이티브 어셈블러 프로그램 명령어 세트에 대해 정의될 수 있지만, 일반적으로 매크로들은 운영체제와 함께 제공되는 매크로 라이브러리와 관련지어져 다음과 같은 운영체제 기능에 접근할 수 있습니다.

  • 액세스 방법에 의한 페리페럴 액세스(OPEN, CLOSE, READ, WRITE 등 매크로 포함)
  • 하위 작업 생성 및 [29]동기화를 위한 ATCH, WAIT 및 POST와 같은 운영 체제 기능.일반적으로 이러한 매크로는 EX의 경우 실행 가능한 코드로 확장됩니다.IT 매크로 명령,
  • 예를 들어 DCB 매크로용[30] 상수 명령 목록(DTF(Define The File) 또는 코드와 상수의 조합) 또는 매크로 명령의 파라미터에 따른 확장 세부사항(예: 파일 참조 및 읽기 명령의 데이터 영역)
  • 보통 브랜치 및 링크 레지스터 명령으로 종료되는 실행 가능 코드 또는 운영체제 함수를 직접 호출하는 슈퍼바이저 호출 명령 중 하나입니다.
  • OS/360 등에서의 시스템 생성을 위한 스테이지2 작업 스트림 생성일반적인 매크로와 달리 sysgen stage 1 매크로는 스토리지에 로드되는 데이터나 코드를 생성하는 것이 아니라 PUNCH 을 사용하여 JCL 및 관련 데이터를 출력합니다.

IBM 메인프레임에서 사용되는 운영 체제와 같은 이전 운영 체제에서는 표준 매크로 명령이 항상 하이레브에서 사용할 수 있는 루틴을 가지고 있지 않았기 때문에 전체 운영 체제 기능은 어셈블러 언어 프로그램에서만 사용할 수 있었고 고급 언어 프로그램(물론 어셈블리 언어 서브루틴이 사용되지 않은 경우)에는 사용할 수 없었습니다.언어

역사

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

1950년대 후반에는 매크로 언어가 매크로 어셈블러에 의해 이어졌다.이것은 하나의 프로그램이 두 가지 기능을 모두 제공하는 경우, 매크로 프리프로세서와 어셈블러의 두 가지 기능을 동일한 [32][failed verification]패키지에 결합한 것입니다.

1959년, 더글러스 E.Bell LabsEastwood와 Douglas McIlroy는 조건부 매크로와 재귀 매크로를 인기 있는 SAP 어셈블러에 [33]도입하여 매크로 [34]SAP을 만들었습니다.McIlroy의 1960년 논문은 매크로 [35][33]프로세서를 통해 모든 프로그래밍 언어(고급 포함)를 확장하는 분야에서 중요한 역할을 했습니다.

매크로 어셈블러는 어셈블리 언어 프로그래머가 그들만의 매크로 언어를 구현할 수 있도록 했으며 MSDOS와 CPM-86의 초기 버전 등 CPU는 동일하지만 운영체제는 다른 두 머신 간에 제한된 코드 이식성을 허용했다.매크로 라이브러리는 각 타깃 머신에 대해 작성되어야 하지만 전체 어셈블리 언어 프로그램은 작성되지 않습니다.보다 강력한 매크로 어셈블러는 다른 머신 또는 다른 운영 체제에서 다른 코드를 생성할 수 있는 매크로 명령에서 조건부 어셈블리 구조를 사용할 수 있게 되어 여러 [citation needed]라이브러리의 필요성이 감소합니다.

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

Unix 및 그 파생 제품과 같은 최신 운영 체제에서 운영 체제 액세스는 서브루틴을 통해 제공되며, 일반적으로 동적 라이브러리에 의해 제공됩니다.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). "MACRO Definitions for LISP". AI Memos. hdl:1721.1/6111. AIM-057.
  21. ^ Kohlbecker, Eugene; Friedman, Daniel; Felleisen, Matthias; Duba, Bruce (1986). "Hygienic Macro Expansion". LFP '86: Proceedings of the 1986 ACM conference on LISP and functional programming. pp. 151–161. doi:10.1145/319838.319859. ISBN 0897912004.
  22. ^ [1] 클링거, 리스"Macros that work"
  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)". IBM.
  31. ^ "IBM Knowledge Center". IBM Knowledge Center. 16 August 2013.
  32. ^ a b "Assembler Language Macro Instructions". Cisco.
  33. ^ a b 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.

외부 링크