컴파일러의 탄생이 궁금합니다. 프로그래밍은 어떻게 시작 되었습니까? 사람들이 먼저 특정 명령 세트를 인식하는 하드웨어를 구축 했습니까, 아니면 언어를 정의한 다음 그 주변에 하드웨어를 구축 했습니까? 관련 메모에서 첫 번째 프로그래밍 언어는 무엇입니까?
컴파일러의 탄생이 궁금합니다. 프로그래밍은 어떻게 시작 되었습니까? 사람들이 먼저 특정 명령 세트를 인식하는 하드웨어를 구축 했습니까, 아니면 언어를 정의한 다음 그 주변에 하드웨어를 구축 했습니까? 관련 메모에서 첫 번째 프로그래밍 언어는 무엇입니까?
답변:
실제로 매우 명확한 답이 있습니다. 소스 코드가 가장 먼저 나왔습니다 .
기술적 세부 사항을 제공하기 전에 약간의 관점을 제시하십시오.
첫 번째 프로그래밍 언어는 모두 수동 으로 기계어 또는 어셈블러로 번역되었습니다 . 컴파일러 나 평가자를 통해이 번역을 자동화하기 위해 소프트웨어를 사용한다는 아이디어는 항상 나 왔으며 직관적이지 않았습니다.
FORTRAN 에 대한 Wikipedia 기사의 인용문을 고려하십시오 .
… 1957 년 4 월에 최초의 FORTRAN 컴파일러가 제공되었습니다. 이는 컴파일러가 성능이 수작업으로 코딩 된 어셈블리 언어와 비슷한 코드를 생성 할 수 없다면 고객이 고급 프로그래밍 언어를 사용하기를 꺼려 했기 때문에 최초의 최적화 컴파일러 였습니다. . [강조 광산]
=> FORTRAN 컴파일러가 시장에 출시 될 때 (1957), 사람들은 이미 어셈블리 언어와 FORTRAN으로 모두 행복하게 프로그래밍하고있었습니다.
이 사례는 LISP ( Hackers & Painters의 ) 와 유사합니다 .
스티브 러셀 (Steve Russell)은“이 평가를 프로그래밍하지 않는 이유는… 그러나 그는 계속해서 해냈습니다. 즉, 그는 내 논문의 eval을 IBM 704 기계 코드로 컴파일하여 버그를 수정 한 다음이를 Lisp 인터프리터로 광고했습니다. 그래서 그 시점에서 Lisp는 본질적으로 오늘날의 형태를 가졌습니다 ... "
다시 한 번, (LISP의) 소스 코드가 인터프리터보다 선행 할뿐만 아니라 후자는 전자에게도 암시 적이 지 않았습니다.
그러나 이러한 개발은 비교적 늦습니다. Charles Babbage의 Analytical Engine 과 Ada Lovelace의 관련 첫 번째 프로그램을 고려하지 않더라도 20 세기에는 컴파일러를 포괄하는 프로그래밍 언어가있었습니다.
Konrad Zuse의 Plankalkül 과 Alonzo Church에 의해 도입 된 λ- 미적분 의 수학적 구성 . 이 둘은 형식적으로 지정된 프로그래밍 언어이지만, 당시에는 컴파일러가 없었습니다.
λ- 미적분은 1930 년대부터 시작되었고 Plankalkül은 1945 년경에 개발되었습니다. 반면에 최초의 FORTRAN 컴파일러는 1957 년에 나왔습니다 (그러나 FORTRAN이 지정된 후 3 년이 지났습니다 ).
프로그래밍은 기계 코드를 메모리, 펀치 카드 및 종이 테이프 또는 패치 패널의 단락 링크에 직접 쓰는 사람들로 시작되었습니다. 하드웨어가 소프트웨어의 요구를 중심으로 구축되었는지 또는 그 반대인지는 말하기 어렵다. 튜링 완전한 프로그램 가능 컴퓨터를 위한 초기 디자인 인 Babbage의 Analytical 엔진 은 Ada Lovelace의 첫 번째 문서화 된 프로그램 입니다.
첫 번째 프로그래밍 언어에 관해서는 그것이 Babbage의 분석 엔진의 기계 언어라고 주장 했습니다 ( 컴퓨터에서 작성된 첫 번째 프로그래밍 언어는 무엇입니까? )
어셈블리 언어 는 소스 코드 이고 어셈블리 언어 는 어셈블러로 컴파일 될 수있는 고급 언어보다 먼저 사용 되므로 질문 제목의 질문에 대답하기 위해 소스 코드가 먼저 나왔습니다.
또한 컴파일러 는 결코 필요 하지 않았으며 편리합니다.
적절한 op 코드 테이블을 기억 한 경우 소프트웨어를 메모리에 직접 쓸 수 있습니다 . 실제로 일부 초기 컴퓨터에서는 사용자가 전면 패널 16 진수 키패드 의 부트 스트랩 코드를 입력하여 부팅하도록 요구했지만 원하는 코드를 탭하면 실행할 수 있습니다.
CPU가 더 복잡 해짐에 따라, 이것은 더 어려워 지지만 6809 또는 Z80 과 같은 간단한 명령어 세트 는 모든 이상한 인덱스 모드를 무시하고 어셈블러 없이도 쉽게 프로그래밍 할 수 있으며 고급 언어의 컴파일러는 물론입니다.
만약 Babbage의 분석 엔진이 만들어 졌다면, 스팀 펑크 Mel 이 있었을 것 입니다. 직기 카드에 직접 최적화 된 프로그램을 작성합니다.
movl $0, -20(%rbp)
반면, 기계 코드 이며 C745EC00000000
, 그것은 후자이다 (물론, 그것과 같은)를 먼저 수동으로 입력 또는 종이 테이프에서 읽었습니다. 기계 코드 가 소스 코드 로 계산 되는지 여부에 관해서 는 "무엇이든 보트를 떠 다니는 것"이라고 말하고 싶습니다. 수동으로 전환하면 그렇습니다.
컴파일러가 처음 이었습니다 . 컴파일러없이 소스를 컴파일 할 수 없으므로 머신 코드로 직접 작성되었습니다.
같은 위키 백과 기사 이 하나 대부분의 질문에 대답 할 수 컴퓨터 언어에 대해. 아니, 그냥 같은 타넨 바움에 의해 책 중 하나를 선택 구조화 컴퓨터기구 당신도 질문 할 수있는 것보다 더 많은 질문에 대답 할 수 :)
귀하의 질문이 너무 광범위하여 더 구체적으로 말할 수는 없습니다.
이 질문은 '소스 코드'의 의미 론적 해석에 강력하게 중점을 둡니다. '컴파일 된 텍스트 기반 컴퓨터 명령어'로 정의하면 아마도 컴파일러가 먼저 나왔을 것입니다.
나는 소스 코드 분석 및 조작 에 관한 제 10 회 IEEE 국제 실무 회의에서 발표 된 Mark Harman의 논문 "소스 코드 분석 및 조작이 항상 중요한 이유" 와 같이보다 권위있는 일을하는 경향이 있습니다.
정의 1 (소스 코드) : 명확성을 위해 '소스 코드'는 소프트웨어 시스템에 대한 완전한 실행 가능한 설명을 의미합니다. 따라서 기계 코드, 매우 높은 수준의 언어 및 시스템의 실행 가능한 그래픽 표현을 포함하는 것으로 해석됩니다.
그리고 당신의 대답은 그 정의에 내재되어 있다고 생각합니다. 가장 확실하게 소스 코드가 처음입니다.
알고리즘을 종이에 정리 한 후, 알루스를 물리적 / 기계적으로 연결했습니다 (이동 와이어). 프로그램을 변경하려면 와이어를 이동하고 다시 실행하십시오.
나중에 조립 언어가 종이에 정리되어 수동으로 기계 코드로 번역 된 다음 스위치 등을 사용하여 램에 공급합니다. 또는 펀치 카드 등. 결국에는 어셈블러를 만들 수 있으며 기계 코드가 아닌 어셈블리로 프로그래밍 한 다음 컴파일러를 만들 수 있습니다. 결국 해당 컴파일러를 부트 스트랩 할 수 있습니다. 그리고 새로운 언어와 새로운 컴파일러 등을 만드십시오.
첫 번째 언어는 언어가 아니었고 나중에 첫 번째 언어는 어셈블리 언어였습니다. 모든 프로세서에서 첫 번째 언어는 어셈블리 언어입니다 (기계 코드에서 파생). 인스트럭션 세트는 먼저 하드웨어를 설계 한 후이를 구현 한 다음 어셈블러, 컴파일러를 구현합니다.