프로그래밍 언어 설계 및 구현

Programming language design and implementation

프로그래밍 언어는 일반적으로 컴퓨터 프로그램의 표현 형태를 설계하고 개발된 개념, 보통은 인터프리터 또는 컴파일러를 위한 구현체를 작성함으로써 생성됩니다.인터프리터는 일반적으로 텍스트 형식의 일부 변형으로 프로그램을 읽고 읽은 내용을 기반으로 작업을 수행하도록 설계된 반면 컴파일러는 코드를 하위 [2]수준으로 변환합니다.

설계.

프로그래밍 언어 설계에서 고려해야 할 요소는 매우 다양합니다.일부 요소는 상호 배타적일 수 있습니다(예: 보안 대 속도).프로그래밍 언어가 동적 또는 정적으로 입력되어야 하는지, 상속이 언어로 이루어지는지, [3]언어의 일반적인 구문으로 이루어지는지, 또는 프로그래밍 언어가 더 나은 해석 또는 컴파일을 수행하는지를 고려해야 할 수도 있습니다.언어의 디자인과 관련된 많은 요소들은 그 언어 뒤의 목표에 의해 결정될 수 있습니다.언어의 대상자, 언어의 독특한 특징과 [4]목적을 고려하는 것이 중요합니다.어떤 언어가 어떤 목적에 도움이 되는지 확인하기 위해 기존의 언어가 부족하거나 어렵게 만드는 것이 무엇인지 살펴보는 것은 좋은 연습입니다.

여러 전문가들이 유용한 설계 원칙을 제시했습니다.

  • 1972년에 발표된 기사의 마지막 단락으로, Tony Hoare는 모든 소프트웨어 프로젝트에 대해 다음과 [5]같은 일반적인 조언을 제공했습니다.
"따라서 미래의 소프트웨어 설계자와 구현자에게 제가 한 조언은 한마디로 다음과 같습니다.
방법을 알기 전에는 정확히 무엇을 할 것인지 결정하지 마십시오.
그리고 당신의 계획을 모든 원하는 품질 기준과 비교하여 평가하기 전까지는 그것을 어떻게 할 것인지 결정하지 마십시오.
만약 그렇게 할 수 없다면, 할 수 있을 때까지 설계를 단순화하세요."
  • 1973년 SIGPLAN 심포지엄에서 토니 호는 다양한 언어적 측면을 [6]몇 가지 세부적으로 논의했습니다.그는 또한 현재 프로그래밍 언어에서 여러 가지 단점을 발견합니다.
"프로그래밍 언어는 프로그래머가 그의 예술에서 가장 어려운 측면을 도와주는 도구입니다.
즉, 프로그램 설계, 문서화, 디버깅이 가능합니다."
"좋은 언어 디자인을 위한 다양한 기준은 다음과 같은 다섯 가지 캐치프레이즈로 요약될 수 있습니다.
단순성, 보안, 빠른 번역, 효율적인 객체 코드 및 가독성을 제공합니다."
"결과에 신뢰를 주지 않을 때 디버깅 실행에 대해 정교한 보안 검사를 수행한 다음 잘못된 결과가 비용이 많이 들거나 재앙이 될 수 있는 경우 프로덕션 실행에서 제거하는 것은 어리석은 일입니다.마른 땅에서 훈련할 때는 구명조끼를 입고 바다에 가자마자 벗는 항해광을 우리가 어떻게 생각하겠습니까?"
  • IFIP Congress 1974에서 파스칼의 디자이너 Niklaus Wirth는 "프로그래밍 [7]언어의 디자인에 관하여"라는 논문을 발표했습니다.Wirth는 여러 가지 상충되는 제안들을 열거했는데, 특히 언어는 배우기 쉽고 사용하기 쉬워야 하며, 새로운 기능이 추가되지 않고 사용할 수 있어야 하며, 컴파일러는 효율적인 코드를 생성해야 하며, 컴파일러는 빨라야 하며, 언어는 라이브러리, 언어가 실행 중인 시스템과 호환되어야 한다는 것이 가장 주목할 만합니다.다른 언어로 쓰여진 프로그램들도 있습니다.

실행

통역사

인터프리터는 [2]파이썬과 같은 언어에서 볼 수 있는 다른 프로그램, 일반적으로 텍스트로 읽는 프로그램입니다.인터프리터는 코드를 읽고 직접 [8]결과를 생성합니다.인터프리터는 일반적으로 코드를 한 줄씩 읽고, 이를 구문 분석하여 코드를 연산 [9]및 동작으로 변환하고 실행합니다.

컴파일러

컴파일러는 일반적으로 텍스트 형식으로 프로그램을 읽고 하위 수준의 기계 코드 또는 [4]연산으로 코드를 변환하는 프로그램입니다.컴파일러에서 생성된 컴파일된 형식은 하위 수준 작업을 파일로 저장합니다.[2] 기계 코드로 변환된 컴파일된 언어는 하위 수준의 연산이 더 쉽게 실행되고 결과를 미리 예측하고 컴파일할 수 있기 때문에 훨씬 더 빠른 경향이 있습니다.

과정

프로그래밍 언어를 만드는 과정은 개발자마다 다를 수 있지만, 여기에는 일반적인 개념을 포함한 프로그래밍 언어를 만드는 방법에 대한 일반적인 과정이 있습니다.

  • 디자인 : [10]언어를 개발하기 위한 유형, 구문, 의미론, 라이브러리 사용 등 디자인 측면이 고려됩니다.
  • 고려 사항:구문, 구현 및 기타 요소가 고려됩니다.파이썬과 같은 언어는 런타임에 코드를 해석하는 반면, C++와 같은 언어는 C의 [11]컴파일러를 기반으로 하는 접근 방식을 따릅니다.
  • 구현 만들기:첫 번째 구현이 작성됩니다.컴파일러는 다른 형식으로 변환되며, 보통 어셈블리처럼 낮은 수준, 심지어 [12]이진법으로 변환됩니다.
  • 구현 개선:구현을 개선해야 합니다.프로그래밍 언어가 스스로 구현을 작성할 수 있는 부트스트랩에 충분한 기능을 갖추는 것을 목표로 프로그래밍 언어를 확장합니다.
  • 부트스트래핑:컴파일러를 사용하는 경우, 개발자는 프로그래밍 언어가 다시 [13]작성되는 부트스트래핑 프로세스를 사용할 수 있습니다.이것은 버그를 확인하고 [14]그 능력을 증명하는 데 좋습니다.부트스트래핑은 언어 자체를 다시 실행할 때만 프로그래밍하면 된다는 장점도 있습니다.

참고문헌

  1. ^ Tomassetti, Federico (8 May 2019). "How would I go about creating a programming language?". Strumenta. Retrieved 3 March 2023.
  2. ^ a b c "Compiler vs Interpreter". Geeks For Geeks. 17 January 2022. Retrieved 3 March 2023.
  3. ^ "Programming Languages and Learning". Washington EDU. University of Washington. Retrieved 2 March 2023.
  4. ^ a b c d "How are Programming Languages created". GoNoCode. 8 December 2021. Retrieved 2 March 2023.
  5. ^ Hoare, C. A. R. (1972). "The Quality of Software". Software: Practice and Experience. 2 (2): 103–105. doi:10.1002/spe.4380020202. S2CID 62662609.
  6. ^ "Hints on Programming Language Design" (PDF). 1973. Retrieved 7 March 2023.
  7. ^ "On the design of programming languages" (PDF). 1974. Retrieved 9 March 2023.
  8. ^ Diver, Laurence (7 December 2021). "Published on Dec 07, 2021 Interpreting the Rule(s) of Code: Performance, Performativity, and Production". MIT Computational Law Report.
  9. ^ a b Rathi, Mukul (31 March 2017). "How I wrote my own "proper" programming language". mukulrathi. Retrieved 2 March 2023.
  10. ^ Chouchanian, Vic. "Programming Languages". California State University Northridge. Retrieved 2 March 2023.
  11. ^ Stroustrup, Bjarne. "A History of C ++ : 1979− 1991" (PDF). Archived (PDF) from the original on 2 February 2019. Retrieved 18 July 2013.
  12. ^ Ferguson, Andrew. "A History of Computer Programming Languages". Brown University. Retrieved 2 March 2023.
  13. ^ Glück, Robert (2012). "Bootstrapping compiler generators from partial evaluators". In Clarke, Edmund; Virbitskaite, Irina; Voronkov, Andrei (eds.). Perspectives of Systems Informatics: 8th International Andrei Ershov Memorial Conference, PSI 2011, Novosibirsk, Russia, June 27 – July 1, 2011, Revised Selected Papers. Lecture Notes in Computer Science. Vol. 7162. Springer. pp. 125–141. doi:10.1007/978-3-642-29709-0_13. Getting started presents the chicken-and-egg problem familiar from compiler construction: one needs a compiler to bootstrap a compiler, and bootstrapping compiler generators is no exception.
  14. ^ "Installing GCC: Building". GNU Project - Free Software Foundation (FSF).