로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!{{+1|부트스트랩 / Bootstrap}} [[컴파일러]] 분야에서 '''부트스트랩'''은 특정 언어의 컴파일러를 작성하고자 할 때, 컴파일러의 코드를 그 언어로 작성하는 것을 말한다. 컴파일러 분야에서는 널리 사용되는 기법으로, 자칫 보기에는 '''닭이 먼저냐 달걀이 먼저냐''' 하는 문제로 보이지만, 많은 장점을 가지고 있다. 주요 환경에서는 많은 언어들이 컴파일러를 제공하고 있어, 어렵지 않게 부트스트랩 할 수 있지만, 새로 명령어 셋을 정의하고 새로운 아키텍처를 만들어 낸다면, 어셈블러부터 부트스트랩을 거쳐 C 언어 등으로 넘어가는 절차를 거친다. == 장점 == ; 미리 언어에 대해서 테스트를 해볼 수 있다. : 해당 언어로 컴파일러 작성을 하는 것 역시 해당 언어로 프로그램을 만들어보는 것이고, 부트스트랩은 이를 테스트하는 과정까지를 이르기 때문에, 새로 만든 언어가 적합하게 만들어졌는지 확인할 수 있는 아주 좋은 기회가 된다. ; 생산성적인 측면 : [[C언어|C 언어]]는 [[어셈블리]]에 비해 생산성이 높다. C 언어 컴파일러를 어셈블리로 짠다면 C 언어로 짜는 것보다 배 이상의 시간과 노력이 든다. 하물며 C 언어도 그러한데, C 언어보다 생산성이 높다는 언어들은 더 심각한 문제일 것이다. 만약 파이썬을 기준으로 한다면, 파이썬으로 파이썬 컴파일러(인터프리터)를 만드는 것이 C로 만드는 것보다 더 생산성이 높을 가능성이 많다. 게다가 한 번 복잡한 절차를 거치고 나면, 그 이후에는 해당 언어로 다시 컴파일러를 작성하여 반복할 수 있기 때문에, 사람이 관여하는 절차에선 최적화된 솔루션을 찾기 쉽게 만들어준다. == 절차 == 처음 절차 이후의 개발에 있어서는 해당 언어의 수정이 있으면 그 전의 규격을 가지고 컴파일러를 만들어내면 될 뿐이지만, 처음 만든 언어의 컴파일러가 있을리가 없으므로, 첫 절차만큼은 복잡하다. 첫 절차는 대개 다음 방법 등이 사용된다. * 만들고자 하는 언어를 최대한 간략화(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을 만드는 식으로 이 방법을 사용하였다(엄밀하게는 컴파일러는 아니지만...). * 아예 처음부터 다른 고생산성 언어(인터프리터 포함)로 작성한다. 파스칼 컴파일러의 최초 버전은 포트란으로 작성되었다. [[분류:컴퓨터 프로그래밍]] 요약: 리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다. 취소 편집 도움말 (새 창에서 열림) | () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |} {{lang|}} · {{llang||}} · {{인용문|}} · {{인용문2|}} · {{유튜브|}} · {{다음팟|}} · {{니코|}} · {{토막글}} {{삭제|}} · {{특정판삭제|}}(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.) {{#expr:}} · {{#if:}} · {{#ifeq:}} · {{#iferror:}} · {{#ifexist:}} · {{#switch:}} · {{#time:}} · {{#timel:}} · {{#titleparts:}} __NOTOC__ · __FORCETOC__ · __TOC__ · {{PAGENAME}} · {{SITENAME}} · {{localurl:}} · {{fullurl:}} · {{ns:}} –(대시) ‘’(작은따옴표) “”(큰따옴표) ·(가운뎃점) …(말줄임표) ‽(물음느낌표) 〈〉(홑화살괄호) 《》(겹화살괄호) ± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ(마이크로) Å °(도) ′(분) ″(초) Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ(뮤) Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω · Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ · Ϊ ϊ Ϋ ϋ · ΐ ΰ Æ æ Đ(D with stroke) đ Ð(eth) ð ı Ł ł Ø ø Œ œ ß Þ þ · Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź · À à È è Ì ì Ǹ ǹ Ò ò Ù ù · İ Ż ż ·  â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û · Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ · ǘ ǜ ǚ ǖ · caron/háček: Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž · breve: Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ · Ā ā Ē ē Ī ī Ō ō Ū ū · à ã Ñ ñ Õ õ · Å å Ů ů · Ą ą Ę ę · Ç ç Ş ş Ţ ţ · Ő ő Ű ű · Ș ș Ț ț 이 문서에서 사용한 틀: 틀:+1 (원본 보기) (준보호됨)