셀프호스팅(컴파일러)
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]컴파일러가 있습니다.
- 아다
- ALGOL(버러스 B5000)
- 기본의[5]
- BCPL
- C
- C++(비주얼 C++, 클랭크, gcc 4.8)
- C#(Microsoft Roslyn, Mono)
- ClojureScript[6]
- 커피 스크립트
- 크리스탈
- 카레시
- D
- 다트
- 델파이
- 딜런
- 에펠
- 엘릭시르
- F#
- FASM[7]
- 요인
- 넷째
- 감바스
- 가세요
- 하스켈[8]
- 이드리스
- 자바
- 코틀린
- 리스프(공통 리스프)
- 라이브 스크립트
- 수성.
- 네메루
- 님
- 오베론
- 오브젝트 파스칼(프리 파스칼)
- OCaml
- Pascal (프리 파스칼)
- 피레토[9]
- Python (PyPy)
- 라쿠도(라쿠도)
- 녹
- 스칼라
- 스킴
- 스몰토크
- 표준 ML(MLTON)
- TCL[10]
- TMG
- 타입 스크립트
- 바라
- 버질[11]
- Visual Basic.NET(Microsoft Roslyn, Mono)
「 」를 참조해 주세요.
레퍼런스
- ^ Heaton, Robert. "What is a self-hosting compiler?". robertheaton.com/.
- ^ 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.
- ^ a b Ken Thompson. "VCF East 2019 -- Brian Kernighan interviews Ken Thompson". YouTube. Retrieved 2019-10-28.
- ^ 데니스 M.리치."C 언어의 발전"1993.
- ^ BASICO 컴파일러 부트스트래핑 예시
- ^ ClojureScript 다음
- ^ "flat assembler". Retrieved 7 January 2022.
The flat assembler is self-hosting and the complete source code is included.
- ^ "Haskell Communities and Activities Report".
- ^ https://www.pyret.org Wayback Machine에서 2018-04-10 아카이브 완료
- ^ "Implement TCL in TCL". Archived from the original on 2017-06-04. Retrieved 2017-09-19.
- ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". Archived from the original on 2014-12-28. Retrieved 2015-05-27.