셀프호스팅(컴파일러)

Self-hosting (compilers)

컴퓨터 프로그래밍에서 셀프호스팅(self-hosting)은 동일한 프로그램의 새로운 버전을 생성하는 도구 체인 또는 운영 체제의 일부로 프로그램을 사용하는 것입니다. 예를 들어, 자체 소스 코드를 컴파일할 수 있는 컴파일러입니다.셀프 호스팅 소프트웨어는 개인용 컴퓨터 및 대형 시스템에서 일반적입니다.일반적으로 자가 호스팅되는 다른 프로그램에는 커널, 어셈블러, 명령줄 인터프리터리비전 제어 소프트웨어가 있습니다.

운영 체제

운영체제를 구축하기 위한 툴체인이 해당 OS 상에서 실행되면 운영체제가 셀프호스트 됩니다.예를 들어 윈도우즈는 [citation needed]윈도우즈를 실행하는 시스템에서 빌드할 수 있습니다.

그러나 운영체제는 자체 호스팅으로 시작되지 않습니다.새로운 컴퓨터 또는 운영체제를 개발할 때는 개발 소프트웨어를 실행할 시스템이 필요하지만 운영체제를 작성하려면 개발 소프트웨어가 필요합니다.이것은 부트스트랩 문제, 또는 일반적으로 치킨 또는 계란 딜레마라고 불립니다.

이 문제의 해결책은 크로스 컴파일러(어셈블리 언어를 사용하는 경우 크로스 어셈블러)입니다.크로스 컴파일러를 사용하면 하나의 컴퓨터를 사용하여 다른 머신 또는 운영체제용 소프트웨어를 개발할 수 있으며, 아직 존재하지 않는 머신의 운영체제를 작성할 수 있습니다.기입이 완료되면 EPROM, 플로피 디스켓, 플래시 메모리(USB 썸 드라이브 등) 또는 JTAG 디바이스 등 통상적인 수단을 사용하여 타깃시스템에 소프트웨어를 도입할 수 있습니다.이것은 게임 콘솔용 소프트웨어나 휴대폰이나 태블릿과 같은 핸드헬드 기기에 사용되는 방법과 유사하며, 자체 개발 도구를 호스팅하지 않습니다.

소프트웨어가 자체 코드를 컴파일할 수 있을 정도로 성숙하면 교차 개발 의존 관계가 종료됩니다.이 시점에서, operating system은 셀프 호스트라고 불립니다.

컴파일러

컴파일러 또는 인터프리터를 사용한 소프트웨어 개발은 컴파일러가 스스로 [1]컴파일할 수 있는 경우에도 셀프 호스트 할 수 있습니다.

자체 호스팅된 컴파일러는 운영체제와 동일한 부트스트랩 문제를 겪기 때문에 새로운 프로그래밍 언어용 컴파일러는 기존 언어로 작성해야 합니다.따라서 개발자는 컴파일러의 첫 번째 버전을 구축하기 위해 어셈블리 언어, C/C++, 심지어 Python이나 Lua와 같은 스크립트 언어를 사용할 수 있습니다.언어가 충분히 성숙해지면 컴파일러의 개발은 컴파일러의 모국어로 전환되어 컴파일러가 스스로 구축될 수 있게 됩니다.

역사

최초의 셀프호스팅 컴파일러(어셈블러 제외)는 1962년 MIT의 Hart와 Levin에 의해 Lisp용으로 작성되었습니다.Lisp 컴파일러를 Lisp로 작성하여 기존 Lisp 인터프리터 안에서 테스트했습니다.일단 컴파일러가 자체 소스 코드를 컴파일할 수 있을 정도로 개선되면, 그것은 자기 [2]호스팅이 되었습니다.

표준 컴파일러 테이프에 존재하는 컴파일러는 인터프리터를 통해 컴파일러의 S-표현 정의를 스스로 작동시켜 얻은 기계어 프로그램입니다.

--

이 기술은 보통 컴파일되는 동일한 언어에 대해 인터프리터가 이미 존재하는 경우에만 실행할 수 있습니다. 가능한 일이지만 컴파일러를 [3]직접 컴파일하는 것은 극히 드문 일입니다.이 개념은 프로그램 자체를 입력으로 실행하는 광범위한 개념에서 직접 차용한 것이며, 정지 문제가 결정 불가능하다는 증거와 같은 이론 컴퓨터 과학에서의 다양한 증명에서도 사용됩니다.

Ken Thompson은 1968년 GE-635에 프로그램을 작성하고 컴파일하여 테스트를 위해 PDP-7로 가져옴으로써 Unix에 대한 개발을 시작했습니다.초기 Unix 커널, 명령어 인터프리터, 에디터, 어셈블러 및 몇 가지 유틸리티가 완료된 후, Unix 운영체제는 자체 호스팅이 되었습니다. - 프로그램은 PDP-7 [4]자체에서 작성 및 테스트할 수 있었습니다.

Douglas McIlroy는 TMG(컴파일러 겸 컴파일러)를 TMG로 종이에 쓰고 "종이를 자신의 종이 조각에 주기로 결정했다"며 계산을 직접 수행했고, TMG 컴파일러를 조립하여 Ken Thompson의 PDP-7에 [3]타이핑하여 조립했습니다.

GNU 시스템의 개발은 주로 GCC(GNU C 컴파일러)와 GNU Emacs(인기 에디터)에 의존하며, GNU 프로젝트를 위한 자유 소프트웨어의 자기 억제, 유지 및 지속적인 개발을 가능하게 한다.

많은 프로그래밍 언어에는 자체 호스팅된 구현이 있습니다. 즉, 컴파일러는 동일한 언어로 및 동일한 언어로 제공됩니다.이러한 사례 중 일부에서는 초기 구현이 부트스트래핑을 사용하여 개발되었습니다. 즉, 다른 고급 언어, 어셈블러 또는 기계 언어를 사용합니다.

셀프 호스팅 컴파일러가 있는 언어 목록

다음 프로그래밍 언어에는 셀프호스팅 [citation needed]컴파일러가 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Heaton, Robert. "What is a self-hosting compiler?". robertheaton.com/.
  2. ^ a b Tim Hart and Mike Levin. "AI Memo 39-The new compiler" (PDF). Archived from the original (PDF) on 2020-12-13. Retrieved 2008-05-23.
  3. ^ a b Ken Thompson. "VCF East 2019 -- Brian Kernighan interviews Ken Thompson". YouTube. Retrieved 2019-10-28.
  4. ^ 데니스 M.리치."C 언어의 발전"1993.
  5. ^ BASICO 컴파일러 부트스트래핑 예시
  6. ^ ClojureScript 다음
  7. ^ "flat assembler". Retrieved 7 January 2022. The flat assembler is self-hosting and the complete source code is included.
  8. ^ "Haskell Communities and Activities Report".
  9. ^ https://www.pyret.org Wayback Machine에서 2018-04-10 아카이브 완료
  10. ^ "Implement TCL in TCL". Archived from the original on 2017-06-04. Retrieved 2017-09-19.
  11. ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". Archived from the original on 2014-12-28. Retrieved 2015-05-27.