첫 번째 컴파일러는 어떻게 작성 되었습니까?


166

나는 닭고기와 달걀과 부트 스트랩에 대해 들었습니다. 몇 가지 질문이 있습니다.

바이너리 명령어로 변환 한 최초의 컴파일러는 무엇입니까?

어셈블리가 컴파일되거나 이진 명령어로 변환됩니까?

... 컴파일러를 바이너리로 작성했다고 믿기가 어렵다.



@nawfal, 그것은 새로운 프로그래밍 언어와 첫 번째 컴파일러의 차이점이므로 중복되지 않습니다

@PauliSudarshanTerho 차이점은 무엇입니까? 질문의 정신은 동일합니다. 프로그래밍 언어를 작성할 수 없습니다. 그 질문은 차례로 첫 번째 컴파일러에 대해 이야기하는 것입니다.
nawfal

당신의 영적 상상력에서? 실제로는 해당 링크의 첫 번째 컴파일러에 대해 언급 된 내용이 없습니다. 그리고 처음부터 새로운 언어를 쓰는 사람에게 조언해서는 안됩니다. 그렇다면 새로운 언어를 작성하는 데 중요한 경우 첫 번째 컴파일러 작성 방법에 대한 답변을 숨기고 싶은 이유는 무엇입니까?

- 나로부터 학습이 중복 stackoverflow.com/questions/4772768/...

답변:


133

조립 지침은 일반적으로 프로세서가 직접 해석 할 수있는 (멀티 바이트)의 머신 코드 값인 opcode에 대한 직접 매핑입니다. 테이블에서 프로그램을 찾아 직접 opcode로 프로그램을 작성할 수 있습니다 (예 : 6039 마이크로 프로세서의 경우). 일치하는 조립 지침과 함께 나열하고 사물에 대한 메모리 주소 / 오프셋을 직접 나열 경우)을 점프처럼.

첫 번째 프로그램은 정확히 손으로 쓴 opcode와 같은 방식으로 수행되었습니다.

그러나 대부분의 경우 어셈블러를 사용하여 이러한 opcode 조회를 자동으로 수행하는 어셈블리 코드를 "컴파일"하는 것이 더 간단하고 명명 된 점프 레이블 등의 주소 / 오프셋을 계산하는 데 도움이됩니다.

첫 번째 어셈블러는 손으로 작성되었습니다. 그런 다음 이러한 어셈블러를 사용하여보다 복잡한 어셈블러를 어셈블 할 수 있으며,이 어셈블러를 사용하면 고급 언어로 작성된 컴파일러 등을 어셈블 할 수 있습니다. 다음 도구 세트의 작성을 단순화하기 위해 도구를 반복적으로 작성하는이 프로세스를 (David Rabinowitz가 그의 답변에서 언급 한대로) 부트 스트랩이라고 합니다.


18
첫 번째 컴퓨터는 Z80 기반 컴퓨터였습니다. ROM 모니터는 부트 스트랩 로더를 수동으로 조립하여 운영 체제 (CP / M)의 기본 사항을 불러 와서 나머지 운영 체제를 작업 시스템에 조립할 수 있도록했습니다. 디스크 기반 부트 스트랩 로더로 완성됩니다. 즐거운 시간. 예, 손으로 잘 조립할 수 있습니다. 속도가 느리고 고통스럽고 오류가 발생하기 쉬우므로 (사물을 자동화 한 이유) 가능합니다.
저의 정확한 의견 그냥

번째 링크 가 끊어졌습니다.
Luke

손으로 작성. 어떻게? 배선 또는 펀치 카드? 나는 그들이 16 진수 키패드를 가지고 있다고 생각합니다.


36

계란은 닭보다 오래 전에 나왔습니다. 대부분의 "닭과 계란"문제에 대한 답은 동일합니다 : 진화. 어떤 사람들은 생물학적 진화를 믿는 데 어려움을 겪지 만 불신은 논쟁이 아닙니다 (google argumentum ad ignorantiam).

귀하의 질문에 직접 대답하기 위해 : 첫 번째 컴파일러는 (사람에 의해) 어셈블리 언어 로 작성되었습니다. 어셈블러라는 프로그램은 어셈블리 언어를 이진으로 변환합니다. 어셈블리 언어는 숫자 대신 opcode 이름을 사용하고 기호가있는 주소를 나타내는 등 기계 언어의 상징적 형태이기 때문에 컴파일보다 훨씬 간단한 프로세스입니다. 많은 후속 컴파일러도 어셈블리 언어로 작성되었습니다. 그러나 제 C 컴파일러에 기록 된 수정 B 컴파일러이었다 B는 . 첫 번째 B 컴파일러는 TMG 로 작성되었습니다 . TMG 컴파일러는 B 컴파일러가 PDP-7 어셈블리 언어로 작성되었음을 컴파일하는 데 사용되었습니다.


24

Woz는 공개 연설 중 하나에서 시작했을 때 컴파일러를 감당할 수 없어서 종이로 직접 바이너리로 컴파일했다고 말했다. 더 거친 것을보고 싶다면 Bill Gates와 Paul Allen이 Altair 8800의 BASIC을 쓴 조건에 대해 읽으십시오 .

"바이너리로 컴퓨터 쓰기"에 관하여-프로그래머가 아닌 한 걸음 물러서서 초기 컴퓨터가 무엇인지 생각해보십시오. 높은 수준의 물건은 아직 존재하지 않았습니다. 낮은 수준의 모든 것에 대해 생각했습니다. 기계 코드를 통해 조작 할 수있는 기본 논리 및 산술을 수행 할 수있는 하드웨어가있었습니다 (단지 컴파일 된 어셈블리 인 Amber는이 부분을 직접 작성하기 어려운 이유를 설명합니다). 존재하지 않는 운영 체제에 대해 걱정하지 않고 하드웨어 (조립품)에 공급하는 숫자를 조작하는 방법을 알려주었습니다. 그냥 큰 계산기였습니다. 오늘날의 컴퓨터는 한 번에 하나의 추상화로 만들어졌습니다.

당신이 마법 같은 느낌 컴퓨터 유지 장벽을 무너 뜨리는하려면, 내가보기 엔 읽어 보시기 바랍니다 찰스 페 졸드하여 코드 및 / 또는 The Elements of Computing Systems의 . 프로그래밍에 대한 기본 지식만으로도 접근성이 뛰어난이 책을 통해 컴퓨터를 처음부터 끝까지 이해할 수 있습니다. 분명히, comp를 얻을 수는 없습니다. 공상 과학 단 2 권의 책을 읽은 후 EE 학위를 받았지만 공식 교육을 놓친 독학 프로그래머라고 할 수 있습니다.


2
판매 피치를 만든 후 Altair BASIC 통역사를 작성하십니까? 비행기에서 부트 스트 래퍼를 코딩하여 앨 버커 키로 가십니까? 그건 말도 안되는 소리입니다. 그리고 재미.
Ehtesh Choudhury

2
@Shurane : 하! 그 요점도 관련이 있지만 BASIC 통역사를 어떻게 만들었고 그룹이 그것을 작은 공간으로 몰아 넣는 방법에 대한 핵심은 미묘하고 놀라운 프로그래밍 능력 / 해커입니다.
Dinah

10

바이너리 명령어로 변환 한 최초의 컴파일러는 무엇입니까?

인간이했다. A-0 시스템 에 대해 읽으십시오 .

Grace Hopper는 1952 년에 S-0을위한 첫 번째 컴파일러 인 A-0을 완성했습니다. A-0 시스템은 기호 수학 코드를 기계 언어로 번역 할 수있는 일련의 지침이었습니다. A-0을 생산할 때, 그녀는 수년 동안 수집 해 온 모든 서브 루틴을 테이프로 가져갔습니다. 각 루틴에는 호출 번호가 지정되어있어 기계가 테이프에서 찾을 수 있습니다. "내가해야 할 일은 일련의 전화 번호를 기록하고 컴퓨터가 테이프에서 전화 번호를 찾아서 가져 와서 추가 작업을 수행하는 것이 었습니다. Grace가 설명한 첫 번째 컴파일러였습니다."


1
링크는 현재 404로 보입니다. 어쨌든 위의 "Grace"는 Grace Hopper입니다.
Volker Stolz

2
Hopper가 첫 번째 컴파일러를 작성했다고 들었지만 위의 설명은 컴파일러보다 링커처럼 들립니다. 그래도 좋은 이야기. 컴퓨터 과학자들이 컴파일러의 아이디어에 대해 회의적이었다고 생각하는 것은 놀랍습니다 ...
Mark E. Haase

1
@mehaase 이것이 "컴파일러"라고하는 이유입니다. 루틴을 편집하며, 각 루틴은 (잠재적으로) 기계 언어로 직접 작성됩니다.
Elazar

@ MarkE.Haase 여기에서 호퍼가 언급 한 사람들은 특정 계산 작업을 위해 컴퓨터를 사용하는 응용 엔지니어 및 과학자들입니다. 그들은 "컴퓨터 과학자"가 아니었다. 1952 년경에 소수의 사이버네틱스 트가 있었지만, 그녀가 그들 중 누구와도 이야기 한 것은 의심 스럽다.
짐 발터

9

첫 번째 프로그램은 기계어 코드 (조립 언어 아님)로 작성되었습니다. 실제 숫자는 스위치를 사용하여 컴퓨터 메모리에 연결되었습니다. 우리는 먼 길을 왔습니다 ...

때때로 이것은 여전히 ​​작은 부분의 코드를 패치하거나 썽크를 생성하기 위해 발생합니다. 나는 기본 스트링에 숫자를 펀칭 한 다음 초기 마이크로에서 작고 빠른 서브 루틴으로 실행 된 것을 기억합니다. 또한 PDP-11의 전면 패널에서 스위치를 전환하여 대학 과정을 위해 부트 로더 프로그램을 메모리에 입력하는 것을 기억합니다.

이러한 프로그램은 텍스트 파일을 처리하여 다른 프로그램을 작성하는 데 사용될 수 있으며, voila 프로그래밍 언어가 작성되었습니다.


문제는 프로그램이 때때로 컴파일러 임에도 불구하고 일반적으로 첫 번째 프로그램이 아니라 첫 번째 컴파일러에 관한 것입니다. 두 사람의 역사는 같지 않습니다. (비유 : 첫 번째 동물이 지구에 나타날 때의 질문에 대한 답은 고양이가 동물 임에도 불구하고 첫 번째 고양이가 지구에 언제 등장했는지에 대한 답이 아닙니다.)
Jim Balter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.