대부분 이것은 우연의 일치입니다.
프로그래밍 언어는 시간이 지남에 따라 발전했으며 컴파일러와 인터프리터의 기술이 향상되었습니다. 기본 처리 플랫폼의 성능이 향상됨에 따라 기본 처리의 효율성 (예 : 컴파일 시간, 해석 오버 헤드, 실행 시간 등)도 덜 중요합니다.
언어 구문 은 영향을 미칩니다. 예를 들어, Pascal은 매우 신중하게 디자인되어 단일 패스 컴파일러를 사용할 수 있습니다. 즉, 소스를 통과하는 패스와 실행 가능한 머신 코드가 있습니다. 반면에 Ada는 이것에주의를 기울이지 않았으며, Ada 컴파일러는 쓰기 어려운 것으로 악명 높으며, 대부분 하나 이상의 패스가 필요합니다. (수년 전에 사용했던 아주 좋은 Ada 컴파일러는 8 패스 컴파일러였습니다. 상상할 수 있듯이 매우 느 렸습니다.)
Fortran (컴파일) 및 BASIC (통역 또는 컴파일)과 같은 오래된 언어를 보면 매우 엄격한 구문과 의미 규칙이 있습니다. [BASIC의 경우, Bills old BASIC이 아니라면, 그 전에 원래로 돌아 가야합니다.]
반면에 APL (재미 있음)과 같은 다른 오래된 것들을 살펴보면 역동적 인 타이핑이있었습니다. 또한 일반적으로 해석되었지만 컴파일 될 수도 있습니다.
관용구 문은 어려운 표현입니다. 만약 선택 사항이거나 추론 할 수있는 것들이 있다면 언어가 다듬을 수있을만큼 풍부함을 의미합니다. 그리고 다시, 베이직은 몇 년 전에 "LET"문장이 선택 사항이되었을 때였습니다!
현재보고있는 많은 아이디어 (예 : 무형식 또는 동적 타이핑)는 실제로 매우 오래되었습니다. 1970 년대 또는 1980 년대 초에 처음 등장했습니다. 그것들이 사용되는 방식과 이러한 아이디어가 사용되는 언어가 바뀌고 성장했습니다. 그러나 근본적으로 새로운 것의 많은 부분은 실제로 새로운 옷을 입은 오래된 것들입니다.
내 머리 꼭대기에 몇 가지 예가 있습니다.
- APL : 동적 타이핑. 일반적으로 해석됩니다. 1960 년대와 1970 년대에왔다.
- 기본 : 강력하거나 동적 인 타이핑. 해석되거나 컴파일되었습니다. 1970 년대와 그 이후의 많은 사람들.
- 포트란 : 강력한 타이핑. 컴파일되었습니다. 1960 년대 또는 그 이전
- Algol68 : 강력한 타이핑. 컴파일되었습니다. 1960 년대
- PL / 1 : 강력한 타이핑. 컴파일되었습니다. 1960 년대
- 파스칼 : 강력한 타이핑. 컴파일되었습니다. 1970 년대 (하지만 1980 년대에는 JIT 컴파일러와 매우 유사한 P- 시스템 컴파일러가있었습니다!)
- 초기에 DEC에 의한 일부 포트란 및 일부 구현은 부분적으로 컴파일되고 부분적으로 해석되었다.
- 스몰 토크 : 동적 타이핑. 해석되는 바이트 코드로 컴파일되었습니다. 1980 년대
- 프롤로그 : 더 이상합니다. 기능의. 컴파일 (터보 프롤로그, 누구?). 1980 년대
- C : 강한 (ha ha) 타이핑. 컴파일되었습니다. 1960 년대 .. 오늘.
- 에이다 : 엄청나게 강한 타이핑. 컴파일되었습니다. 1980 년대
- Perl : 동적 타이핑. (강한 구문). 해석되었습니다. 1990 년대 (?)
계속할 수있었습니다.
- Nitpickers 코너 : 많은 인터프리터 언어는 소스를로드 / 읽을 때 토큰 화되거나 "바이트 컴파일"됩니다. 따라서 인터프리터의 후속 작업이 훨씬 간단 해집니다. 때로는 바이트 컴파일 버전의 코드를 저장할 수 있습니다. 때때로 당신은 할 수 없습니다. 여전히 해석됩니다.
업데이트 : 내가 명확하지 않았기 때문에.
타이핑은 크게 다를 수 있습니다.
컴파일 타임 고정 정적 타이핑이 일반적입니다 (예 : C, Ada, C ++, Fortan 등). 여기에서 TYPE의 THING을 선언하고 영원히 그렇게합니다.
할당 된 유형을 선택하는 동적 입력이 가능합니다. 예를 들어, PHP와 초기 BASIC 및 APL은 정수를 변수에 할당 한 다음 정수 유형이었습니다. 나중에 문자열을 할당 한 경우 문자열 유형입니다. 등등.
그런 다음 느슨한 입력 (예 : PHP)을 사용하여 변수에 숫자 정수 (따옴표로 묶은 문자열)를 할당 한 다음 숫자를 추가하는 것과 같은 기괴한 작업을 수행 할 수 있습니다. (예 : '5'+ 5는 10이됩니다). 이것은 기괴한 땅이지만 때로는 매우 유용합니다.
그러나 이것들은 언어로 설계된 기능입니다. 구현만으로도 가능합니다.