부트스트랩 (컴파일러): 두 판 사이의 차이

(자동 찾아 바꾸기: 「할 수록」(을)를 「할수록」(으)로)
잔글 (오류 수정 (빈칸))
 
13번째 줄: 13번째 줄:
== 절차 ==
== 절차 ==
처음 절차 이후의 개발에 있어서는 해당 언어의 수정이 있으면 그 전의 규격을 가지고 컴파일러를 만들어내면 될 뿐이지만, 처음 만든 언어의 컴파일러가 있을리가 없으므로, 첫 절차만큼은 복잡하다. 첫 절차는 대개 다음 방법 등이 사용된다.
처음 절차 이후의 개발에 있어서는 해당 언어의 수정이 있으면 그 전의 규격을 가지고 컴파일러를 만들어내면 될 뿐이지만, 처음 만든 언어의 컴파일러가 있을리가 없으므로, 첫 절차만큼은 복잡하다. 첫 절차는 대개 다음 방법 등이 사용된다.
* 만들고자 하는 언어를 최대한 간략화(Abstract)한다. <span style="color: red;">간략화된 언어</span>로 <span style="color: blue;">원래 언어의 컴파일러</span>를 작성한 뒤, 컴파일러가 있는 언어로 <span style="color: red;">간략화된 언어의 컴파일러</span>를 작성한다. 그 후 <span style="color: red;">간략화된 언어의 컴파일러</span>로  <span style="color: blue;">원래 언어의 컴파일러</span>를 컴파일한다. 처음에는 생산성이 나빠 최적화가 부실하지만, 반복할수록 최적화된 컴파일러를 얻는다. [[PyPy]]가 RPython을 만드는 식으로 이 방법을 사용하였다(엄밀하게는 컴파일러는 아니지만...).
* 만들고자 하는 언어를 최대한 간략화(Abstract)한다. <span style="color: red;">간략화된 언어</span>로 <span style="color: blue;">원래 언어의 컴파일러</span>를 작성한 뒤, 컴파일러가 있는 언어로 <span style="color: red;">간략화된 언어의 컴파일러</span>를 작성한다. 그 후 <span style="color: red;">간략화된 언어의 컴파일러</span>로  <span style="color: blue;">원래 언어의 컴파일러</span>를 컴파일한다. 처음에는 생산성이 나빠 최적화가 부실하지만, 반복할수록 최적화된 컴파일러를 얻는다. [[PyPy]]가 RPython을 만드는 식으로 이 방법을 사용하였다(엄밀하게는 컴파일러는 아니지만...).
* 아예 처음부터 다른 고생산성 언어(인터프리터 포함)로 작성한다. 파스칼 컴파일러의 최초 버전은 포트란으로 작성되었다.
* 아예 처음부터 다른 고생산성 언어(인터프리터 포함)로 작성한다. 파스칼 컴파일러의 최초 버전은 포트란으로 작성되었다.
[[분류:컴퓨터 프로그래밍]]
[[분류:컴퓨터 프로그래밍]]

2021년 6월 19일 (토) 23:57 기준 최신판

부트스트랩 / Bootstrap

컴파일러 분야에서 부트스트랩은 특정 언어의 컴파일러를 작성하고자 할 때, 컴파일러의 코드를 그 언어로 작성하는 것을 말한다. 컴파일러 분야에서는 널리 사용되는 기법으로, 자칫 보기에는 닭이 먼저냐 달걀이 먼저냐 하는 문제로 보이지만, 많은 장점을 가지고 있다.

주요 환경에서는 많은 언어들이 컴파일러를 제공하고 있어, 어렵지 않게 부트스트랩 할 수 있지만, 새로 명령어 셋을 정의하고 새로운 아키텍처를 만들어 낸다면, 어셈블러부터 부트스트랩을 거쳐 C 언어 등으로 넘어가는 절차를 거친다.

장점[편집 | 원본 편집]

미리 언어에 대해서 테스트를 해볼 수 있다.
해당 언어로 컴파일러 작성을 하는 것 역시 해당 언어로 프로그램을 만들어보는 것이고, 부트스트랩은 이를 테스트하는 과정까지를 이르기 때문에, 새로 만든 언어가 적합하게 만들어졌는지 확인할 수 있는 아주 좋은 기회가 된다.
생산성적인 측면
C 언어어셈블리에 비해 생산성이 높다. C 언어 컴파일러를 어셈블리로 짠다면 C 언어로 짜는 것보다 배 이상의 시간과 노력이 든다. 하물며 C 언어도 그러한데, C 언어보다 생산성이 높다는 언어들은 더 심각한 문제일 것이다. 만약 파이썬을 기준으로 한다면, 파이썬으로 파이썬 컴파일러(인터프리터)를 만드는 것이 C로 만드는 것보다 더 생산성이 높을 가능성이 많다. 게다가 한 번 복잡한 절차를 거치고 나면, 그 이후에는 해당 언어로 다시 컴파일러를 작성하여 반복할 수 있기 때문에, 사람이 관여하는 절차에선 최적화된 솔루션을 찾기 쉽게 만들어준다.

절차[편집 | 원본 편집]

처음 절차 이후의 개발에 있어서는 해당 언어의 수정이 있으면 그 전의 규격을 가지고 컴파일러를 만들어내면 될 뿐이지만, 처음 만든 언어의 컴파일러가 있을리가 없으므로, 첫 절차만큼은 복잡하다. 첫 절차는 대개 다음 방법 등이 사용된다.

  • 만들고자 하는 언어를 최대한 간략화(Abstract)한다. 간략화된 언어원래 언어의 컴파일러를 작성한 뒤, 컴파일러가 있는 언어로 간략화된 언어의 컴파일러를 작성한다. 그 후 간략화된 언어의 컴파일러원래 언어의 컴파일러를 컴파일한다. 처음에는 생산성이 나빠 최적화가 부실하지만, 반복할수록 최적화된 컴파일러를 얻는다. PyPy가 RPython을 만드는 식으로 이 방법을 사용하였다(엄밀하게는 컴파일러는 아니지만...).
  • 아예 처음부터 다른 고생산성 언어(인터프리터 포함)로 작성한다. 파스칼 컴파일러의 최초 버전은 포트란으로 작성되었다.