확장 가능한 프로그래밍

Extensible programming

확장형 프로그래밍은 프로그래밍 언어, 컴파일러 및 런타임 환경을 확장하는 메커니즘에 초점을 맞춘 컴퓨터 프로그래밍 스타일을 설명하기 위해 컴퓨터 과학에서 사용되는 용어입니다.확장 가능한 프로그래밍 언어는 1960년대에는 이러한 프로그래밍 방식을 지원했지만 1970년대에는 [1]그 움직임이 미약해졌다.확장 가능한 프로그래밍은 21세기에 [2]새로운 관심사가 되었다.

역사 운동

확장 가능한 프로그래밍 언어 이동과 관련된 첫 번째 논문은[1][3] M입니다. 더글라스 맥일로이의 1960년 고급 프로그래밍 [4]언어 매크로에 관한 논문.확장성의 원리에 대한 또 다른 초기 설명은 브루커와 모리스의 컴파일러[5]관한 1960년 논문에서 나타난다.그 운동의 정점은 1969년과 1971년 [6][7]두 번의 학술 심포지엄으로 특징지어졌다.1975년까지 토마스 A의 운동에 대한 조사 기사.스탠디쉬는[1] 본질적으로 사후 살생부였다.Fourth 프로그래밍 언어는 예외였지만, 기본적으로는 알아차리지 못했습니다.

역사 운동의 특징

일반적으로 생각하듯이 확장 가능한 프로그래밍 언어는 기본 컴퓨팅 기능을 제공하는 기본 언어와 기본 언어를 수정할 수 있는 메타 언어로 구성됩니다.그 후 프로그램은 메타 언어 수정과 변경된 기본 언어의 코드로 구성되었습니다.

그 운동에 사용된 가장 두드러진 언어 확장 기법은 거시적 정의였다.문법 수정은 또한 운동과 밀접하게 연관되어 있었고, 결과적으로 적응 문법 형식주의의 발전을 가져왔다.리스프 언어 공동체는 확장 가능한 언어 공동체와 분리되어 있었다. 한 연구자가 관찰한 것처럼 분명히,

프로그램과 데이터가 본질적으로 교환 가능한 모든 프로그래밍 언어는 확장 가능한 [sic] 언어로 간주될 수 있습니다.[8] 이것은 Lisp가 몇 년 동안 확장 가능한 언어로 사용되어 왔다는 사실에서 매우 쉽게 알 수 있습니다.

1969년 컨퍼런스에서 Simula는 확장 가능한 프로그래밍 언어로 발표되었습니다.

스탠디쉬는 언어 확장의 세 가지 클래스를 설명했는데, 그는 그것을 가역법, 오르토프라즈, 그리고 은유법이라고 불렀다.

  • parprase는 이전에 정의된(또는 정의될) 무언가와 교환하는 방법을 보여줌으로써 기능을 정의합니다.예를 들어 매크로 정의, 일반 절차 정의, 문법 확장, 데이터 정의, 연산자 정의 및 제어 구조 확장을 언급합니다.
  • Orthphrase는 기본 언어를 사용하여 달성할 수 없었던 언어에 기능을 추가합니다.예를 들어, 이전에는 i/o 프리미티브가 없었던 기본 언어에 i/o 시스템을 추가하는 것입니다.기본 언어에서 정의되지 않은 기능은 다른 언어로 정의되어야 하므로 확장자는 특정 기본 언어에 상대적인 정형 언어로 이해해야 합니다.Orthoprase는 플러그인의 현대적인 개념에 해당합니다.
  • 은유법은 기존 표현에 사용되는 해석 규칙을 수정합니다.그것은 성찰의 현대적 개념과 일치한다.

역사 운동의 죽음

Standish는 확장성 운동의 실패는 연속적인 확장을 프로그래밍하는 것의 어려움 때문이라고 말했다.일반 프로그래머는 기본 언어 주위에 매크로의 단일 셸을 구축할 수 있지만, 그 주위에 매크로의 두 번째 셸을 구축하려면 기본 언어와 첫 번째 셸 모두에 정통해야 합니다. 세 번째 셸은 기본 및 첫 번째 셸과 두 번째 셸 모두에 정통해야 합니다.(프로그래머를 하위 레벨의 디테일로부터 보호하는 것은 확장성 이동을 대체한 추상화 움직임의 의도입니다.)

Simula가 확장 가능한 것으로 이전에 발표되었음에도 불구하고, 1975년까지 스탠디쉬의 설문조사는 새로운 추상화 기반 기술을 포함하지는 않은 것으로 보입니다(기술적으로 포함할 수 있는 확장성에 대한 매우 일반적인 정의를 사용함).1978년 컴퓨터의 발명에서 오늘날까지 추상 프로그래밍의 역사는 매크로에 대한 언급을 하지 않았고 확장 가능한 언어 운동이 일어난 [9]적이 없다는 것을 암시하지 않았다.매크로는 1980년대 후반(아마도 위생적인 매크로의 등장으로)까지 구문 [10]추상화라는 필명을 부여받아 추상화 운동에 잠정적으로 참여하게 되었다.

근대 운동

현대적 의미에서 확장 가능한 프로그래밍을 지원하는 시스템은 아래에 설명된[citation needed] 모든 기능을 제공합니다.

확장 가능한 구문

이는 단순히 컴파일되는 소스 언어가 닫힘, 고정 또는 정적인 것이 아님을 의미합니다.소스 언어에 새로운 키워드, 개념 및 구조를 추가할 수 있어야 합니다.사용자 정의 구문을 사용하여 구성을 추가할 수 있는 언어로는 Racket, Camlp4, OpenC++, Seed7,[11] Red, Rebol Felix가 있습니다.일부 기본적이고 본질적인 언어 특성이 불변하는 것은 허용되지만, 시스템은 이러한 언어 특징에만 의존해서는 안 됩니다.새로 추가할 수 있어야 합니다.

확장 컴파일러

확장 가능한 프로그래밍에서 컴파일러는 소스 코드 입력을 이진 실행 가능 출력으로 변환하는 단일 프로그램이 아닙니다.컴파일러 자체는 소스 언어 입력을 임의의 으로 변환하는 데 도움이 되는 플러그인의 집합이라는 점에서 확장할 수 있어야 합니다.예를 들어 확장 가능한 컴파일러는 객체 코드, 코드 문서, 포맷된 소스 코드 또는 기타 원하는 출력의 생성을 지원합니다.컴파일러의 아키텍처는 컴파일 프로세스의 모든 합리적인 단계에서 사용자가 컴파일 프로세스의 "내부"에 들어가 대체 처리 태스크를 제공할 수 있도록 허용해야 합니다.

확장 가능한 컴파일러는 소스 코드를 컴퓨터에서 실행할 수 있는 것으로 변환하는 작업만 수행할 경우 다음을 수행해야 합니다.

  • 그 기능의 거의 모든 측면에 플러그인 또는 컴포넌트 아키텍처를 사용한다.
  • 컴파일 대상 언어 또는 언어 변형을 특정하고 해당 언어를 인식하고 검증하기 위한 적절한 플러그인을 찾습니다.
  • 형식 언어 사양을 사용하여 임의의 소스 언어를 구문 및 구조적으로 검증한다.
  • 적절한 검증 플러그인을 호출하여 임의의 소스 언어의 의미 검증을 지원하다
  • 사용자는 다양한 종류의 코드 생성기에서 결과 실행 파일을 선택하여 다양한 프로세서, 운영 체제, 가상 시스템 또는 기타 실행 환경을 대상으로 할 수 있습니다.
  • 에러 발생 및 에러 확장을 위한 설비를 제공한다.
  • 추상 구문 트리(AST)에서 새로운 종류의 노드를 허용합니다.
  • AST의 노드에서 새로운 값을 허용합니다.
  • 노드 간에 새로운 종류의 에지를 허용합니다.
  • 외부 "통과"를 통해 입력 AST 또는 그 일부의 변환을 지원한다.
  • 입력 AST 또는 그 일부를 외부 "통과"에 의해 다른 형태로 변환하는 것을 지원한다.
  • AST를 변환하고 새로운 AST 또는 기타 표현으로 변환하기 때문에 내부 경로와 외부 경로 사이의 정보 흐름을 지원한다.

확장 가능한 런타임

실행 시 확장 가능한 프로그래밍 시스템은 언어가 허용하는 일련의 작업을 확장할 수 있도록 허용해야 합니다.예를 들어 시스템이 바이트 코드인터프리터를 사용하는 경우 새로운 바이트 코드 값을 정의할 수 있어야 합니다.확장 가능한 구문과 마찬가지로 불변의 기본 또는 본질적인 작업 집합이 있는 것은 허용됩니다.단, 새로운 동작 또는 추가 동작을 지원할 수 있도록 이러한 본질적인 동작을 오버로드 또는 증강할 수 있어야 합니다.

양식과 구분된 내용

확장 가능한 프로그래밍 시스템은 프로그램을 처리할 데이터로 간주해야 합니다.이러한 프로그램에는 포맷 정보가 전혀 포함되어 있지 않아야 합니다.사용자에게 프로그램을 시각적으로 표시 및 편집하는 기능은 확장 가능한 컴파일러가 지원하는 번역 기능으로 프로그램 데이터를 표시 또는 편집에 적합한 형식으로 변환해야 합니다.당연히 이것은 쌍방향 번역이 되어야 합니다.확장 가능한 프로그램을 다양한 방법으로 쉽게 처리할 수 있어야 하기 때문에 이는 중요합니다.소스 언어 입력의 유일한 용도는 기계 코드 편집, 표시 및 번역뿐입니다.프로그램의 임의 처리는 소스 입력을 처리하는 방법(포맷, 저장, 표시, 편집 등)의 사양에서 분리함으로써 쉬워집니다.

소스 언어 디버깅 지원

확장 가능한 프로그래밍 시스템은 프로그램을 실행 가능하게 하기 위해 프로그램의 확장 또는 변환에 관계없이 원본 소스 언어의 구조를 사용하여 프로그램의 디버깅을 지원해야 합니다.특히 런타임 데이터를 표시하는 유일한 방법은 구조 또는 배열이라고 가정할 수 없습니다.디버거, 또는 보다 정확하게는 '프로그램 검사기'는 소스 언어에 적합한 형식으로 런타임 데이터를 표시할 수 있도록 허용해야 합니다.예를 들어 언어가 비즈니스 프로세스 또는 워크플로우에 대한 데이터 구조를 지원하는 경우 디버거는 해당 데이터 구조를 플러그인에 의해 제공되는 피시본 차트 또는 기타 형식으로 표시할 수 있어야 합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c Standish, Thomas A., "프로그래밍 언어 설계의 확장성", SIGPLAN 공지사항 10no. 7(1975년 7월), 페이지 18-21.
  2. ^ 그레고리 5세Wilson, "21세기를 위한 확장 가능프로그래밍", ACM 큐 2 no. 9 (2004년 12월/1월–2005년)
  3. ^ Sammet, Jean E., 프로그래밍 언어: 역사와 기초, 프렌티스홀, 1969, 섹션 III.7.2
  4. ^ McIlroy, M.D., "Macro Instruction Extensions of Compiler Languages", ACM 3no.4 통신(1960년 4월), 페이지 214–220).
  5. ^ 브루커, R.A.와 모리스, D., ACM 9 no. 1(1962년 1월), 1-10페이지, "문구 구조 언어를 위한 일반 번역 프로그램"그 논문은 1960년에 접수되었다.
  6. ^ Christensen, C. 및 Shaw, Ed., SIGPLAN Notice 4 no. 8(1969년 8월).
  7. ^ Schuman, S.A., ed., SIGPLAN Notice 6 no. 12(1971년 12월).
  8. ^ 1969년 심포지엄 53-54페이지 "확장성의 개념에 관한 패널"에서 해리슨, M.C.
  9. ^ 과리노, L.R., "프로그래밍[dead link] 언어에서의 추상화의 진화", CMU-CS-78-120, 펜실베니아 카네기멜론 대학교 컴퓨터과학부, 1978년 5월 22일.
  10. ^ Gabriel, Richard P. ed., "공통 프로토타이핑 시스템의 요건에 관한 보고서 초안", SIGPLAN Notice 24 no. 3(1989년 3월), 페이지 93ff.
  11. ^ Zingaro, Daniel, "Modern Extensible Languages", SQRL Report 47 McMaster University (2007년 10월), 16페이지.

외부 링크

일반

  1. ACM 큐에 게재된 Greg Wilson의 기사
  2. 슬래시닷 토론
  3. 현대 확장 언어 - Daniel Zingaro의 논문

도구들

  1. MetaL - 확장 가능한 프로그래밍 컴파일러 엔진 구현
  2. XPS - eXtensible 프로그래밍 시스템 (개발 중)
  3. MPS - JetBrains 메타프로그래밍 시스템

확장 가능한 구문을 사용하는 프로그래밍 언어

  1. 오픈ZZ
  2. xtc : eXTensible C
  3. 영어 스크립트
  4. Nemerle 매크로
  5. Boo 구문 매크로
  6. 스탠퍼드 대학교 중급 포맷 컴파일러
  7. Seed7 - 확장 가능한 프로그래밍 언어
  8. Katahdin - 실행 시 변경 가능한 구문과 의미를 가진 프로그래밍 언어
  9. § - Earley 파서를 사용하여 구현되는 확장 가능한 구문을 가진 다른 프로그래밍 언어