나는 닭고기와 달걀과 부트 스트랩에 대해 들었습니다. 몇 가지 질문이 있습니다.
바이너리 명령어로 변환 한 최초의 컴파일러는 무엇입니까?
어셈블리가 컴파일되거나 이진 명령어로 변환됩니까?
... 컴파일러를 바이너리로 작성했다고 믿기가 어렵다.
나는 닭고기와 달걀과 부트 스트랩에 대해 들었습니다. 몇 가지 질문이 있습니다.
바이너리 명령어로 변환 한 최초의 컴파일러는 무엇입니까?
어셈블리가 컴파일되거나 이진 명령어로 변환됩니까?
... 컴파일러를 바이너리로 작성했다고 믿기가 어렵다.
답변:
조립 지침은 일반적으로 프로세서가 직접 해석 할 수있는 (멀티 바이트)의 머신 코드 값인 opcode에 대한 직접 매핑입니다. 테이블에서 프로그램을 찾아 직접 opcode로 프로그램을 작성할 수 있습니다 (예 : 6039 마이크로 프로세서의 경우). 일치하는 조립 지침과 함께 나열하고 사물에 대한 메모리 주소 / 오프셋을 직접 나열 경우)을 점프처럼.
첫 번째 프로그램은 정확히 손으로 쓴 opcode와 같은 방식으로 수행되었습니다.
그러나 대부분의 경우 어셈블러를 사용하여 이러한 opcode 조회를 자동으로 수행하는 어셈블리 코드를 "컴파일"하는 것이 더 간단하고 명명 된 점프 레이블 등의 주소 / 오프셋을 계산하는 데 도움이됩니다.
첫 번째 어셈블러는 손으로 작성되었습니다. 그런 다음 이러한 어셈블러를 사용하여보다 복잡한 어셈블러를 어셈블 할 수 있으며,이 어셈블러를 사용하면 고급 언어로 작성된 컴파일러 등을 어셈블 할 수 있습니다. 다음 도구 세트의 작성을 단순화하기 위해 도구를 반복적으로 작성하는이 프로세스를 (David Rabinowitz가 그의 답변에서 언급 한대로) 부트 스트랩이라고 합니다.
컴파일러 부트 스트랩 및 컴파일러 작성 이력에 대해 읽으십시오
아이디어는 머신 코드로 직접 매우 간단한 컴파일러를 작성하고, 더 복잡한 컴파일러를 작성하는 데 사용하고, 두 번째 컴파일러를 사용하여 세 번째 컴파일러를 작성하는 등 완전한 기능을 갖춘 컴파일러를 가질 수있을 때까지하는 것입니다.
계란은 닭보다 오래 전에 나왔습니다. 대부분의 "닭과 계란"문제에 대한 답은 동일합니다 : 진화. 어떤 사람들은 생물학적 진화를 믿는 데 어려움을 겪지 만 불신은 논쟁이 아닙니다 (google argumentum ad ignorantiam).
귀하의 질문에 직접 대답하기 위해 : 첫 번째 컴파일러는 (사람에 의해) 어셈블리 언어 로 작성되었습니다. 어셈블러라는 프로그램은 어셈블리 언어를 이진으로 변환합니다. 어셈블리 언어는 숫자 대신 opcode 이름을 사용하고 기호가있는 주소를 나타내는 등 기계 언어의 상징적 형태이기 때문에 컴파일보다 훨씬 간단한 프로세스입니다. 많은 후속 컴파일러도 어셈블리 언어로 작성되었습니다. 그러나 제 C 컴파일러에 기록 된 수정 B 컴파일러이었다 B는 . 첫 번째 B 컴파일러는 TMG 로 작성되었습니다 . TMG 컴파일러는 B 컴파일러가 PDP-7 어셈블리 언어로 작성되었음을 컴파일하는 데 사용되었습니다.
Woz는 공개 연설 중 하나에서 시작했을 때 컴파일러를 감당할 수 없어서 종이로 직접 바이너리로 컴파일했다고 말했다. 더 거친 것을보고 싶다면 Bill Gates와 Paul Allen이 Altair 8800의 BASIC을 쓴 조건에 대해 읽으십시오 .
"바이너리로 컴퓨터 쓰기"에 관하여-프로그래머가 아닌 한 걸음 물러서서 초기 컴퓨터가 무엇인지 생각해보십시오. 높은 수준의 물건은 아직 존재하지 않았습니다. 낮은 수준의 모든 것에 대해 생각했습니다. 기계 코드를 통해 조작 할 수있는 기본 논리 및 산술을 수행 할 수있는 하드웨어가있었습니다 (단지 컴파일 된 어셈블리 인 Amber는이 부분을 직접 작성하기 어려운 이유를 설명합니다). 존재하지 않는 운영 체제에 대해 걱정하지 않고 하드웨어 (조립품)에 공급하는 숫자를 조작하는 방법을 알려주었습니다. 그냥 큰 계산기였습니다. 오늘날의 컴퓨터는 한 번에 하나의 추상화로 만들어졌습니다.
당신이 마법 같은 느낌 컴퓨터 유지 장벽을 무너 뜨리는하려면, 내가보기 엔 읽어 보시기 바랍니다 찰스 페 졸드하여 코드 및 / 또는 The Elements of Computing Systems의 . 프로그래밍에 대한 기본 지식만으로도 접근성이 뛰어난이 책을 통해 컴퓨터를 처음부터 끝까지 이해할 수 있습니다. 분명히, comp를 얻을 수는 없습니다. 공상 과학 단 2 권의 책을 읽은 후 EE 학위를 받았지만 공식 교육을 놓친 독학 프로그래머라고 할 수 있습니다.
바이너리 명령어로 변환 한 최초의 컴파일러는 무엇입니까?
인간이했다. A-0 시스템 에 대해 읽으십시오 .
Grace Hopper는 1952 년에 S-0을위한 첫 번째 컴파일러 인 A-0을 완성했습니다. A-0 시스템은 기호 수학 코드를 기계 언어로 번역 할 수있는 일련의 지침이었습니다. A-0을 생산할 때, 그녀는 수년 동안 수집 해 온 모든 서브 루틴을 테이프로 가져갔습니다. 각 루틴에는 호출 번호가 지정되어있어 기계가 테이프에서 찾을 수 있습니다. "내가해야 할 일은 일련의 전화 번호를 기록하고 컴퓨터가 테이프에서 전화 번호를 찾아서 가져 와서 추가 작업을 수행하는 것이 었습니다. Grace가 설명한 첫 번째 컴파일러였습니다."
첫 번째 프로그램은 기계어 코드 (조립 언어 아님)로 작성되었습니다. 실제 숫자는 스위치를 사용하여 컴퓨터 메모리에 연결되었습니다. 우리는 먼 길을 왔습니다 ...
때때로 이것은 여전히 작은 부분의 코드를 패치하거나 썽크를 생성하기 위해 발생합니다. 나는 기본 스트링에 숫자를 펀칭 한 다음 초기 마이크로에서 작고 빠른 서브 루틴으로 실행 된 것을 기억합니다. 또한 PDP-11의 전면 패널에서 스위치를 전환하여 대학 과정을 위해 부트 로더 프로그램을 메모리에 입력하는 것을 기억합니다.
이러한 프로그램은 텍스트 파일을 처리하여 다른 프로그램을 작성하는 데 사용될 수 있으며, voila 프로그래밍 언어가 작성되었습니다.