C-

C--
C-
패러다임명령적
설계자사이먼 페이튼 존스노먼 램지
첫 등장1997
타이핑 규율정적인
웹사이트https://www.cs.tufts.edu/~nr/c--/index.properties
영향을 받은
C

C-- (C 마이너스 마이너스라고 발음됨)는 C와 같은 프로그래밍 언어다.그것의 창조자인 기능 프로그래밍 연구자 사이먼 페이튼 존스와 노먼 램지는 그것을 주로 인간 프로그래머가 쓴 것이 아니라 매우 높은 수준의 언어를 위한 컴파일러에 의해 생성되도록 설계했다.다른 많은 중간 언어와 달리, 그것의 표현은 바이트 코드나 다른 이진 형식이 아닌 일반 ASCII 텍스트다.[1][2]null

크게 두 가지 가지가 있다.

디자인

C--는 고품질 기계 코드를 생산하는 컴파일러의 구현을 용이하게 하기 위해 고안된 "휴대용 조립 언어"이다.이는 낮은 수준의 코드 생성프로그램 최적화를 C- 컴파일러에 위임함으로써 이루어진다.언어의 구문은 C-의 본질적 특징과 코드 생성의 용이성을 저해하기 때문에 가변적 기능, 포인터 구문, C형 시스템의 측면과 같은 표준 C 형상을 생략하거나 변경하는 동안 C로부터 크게 차용된다.null

언어의 이름은 인조크(in-joke)로, C--는 C의 축소된 형태라는 것을 나타내며, C++는 기본적으로 C의 확장된 형태라는 것과 같다. (--그리고++각각 "교화"와 "교화"를 의미한다.)null

C에 대한 작업은 1990년대 후반에 시작되었다.사용자 정의 코드 생성기 작성은 그 자체로 난제가 되고, 컴파일러는 그 당시 연구자들이 이용할 수 있는 백업은 복잡하고 문서화가 미흡했기 때문에, 여러 프로젝트에서 C 코드를 생성하는 컴파일러(예: 원본 Modula-3 컴파일러)가 작성되었다.그러나 C는 기능 언어의 경우 좋지 않은 선택이다. 즉, 꼬리호출 최적화를 보장하지 않거나, 정확한 쓰레기 수거효율적인 예외 처리를 지원하지 않는다.C--는 이 모든 것을 지원하는 C에 대해 엄밀하게 정의된 간단한 대안이다.이것의 가장 혁신적인 기능은 휴대용 가비지 수집기, 예외 처리 시스템 및 C- 컴파일러와 함께 작동하는 기타 런타임 기능을 쓸 수 있는 런타임 인터페이스다.null

C-의 첫 번째 버전은 MSRA 논문으로 1998년 4월에 발표되었으며,[1] 1999년 1월 쓰레기 수거에 관한 논문이 첨부되었다.[2]1999년 5월에 수정된 매뉴얼이 HTML 형태로 게시되었다.[6]노먼 램지("Proposed Changes")와 크리스티안 린디그("A New Gramery")가 2000년에 제안한 두 세트의 주요 변경사항은 C-- 버전 2로 이어졌고, 2004년경에 확정되어 2005년에 정식 출시되었다.[3]null

유형 시스템

C형 시스템은 상위 언어에 의해 부과되는 규약보다는 하드웨어에 의해 부과되는 제약조건을 반영하도록 설계되었다.레지스터 또는 메모리에 저장된 값은 비트 벡터라는 한 가지 유형만 가질 수 있다.그러나 비트 벡터는 예를 들어 여러 의 다형체 유형이다.비트 8, 비트32 또는 비트64.별도의 32비트 또는 64비트 부동 소수점 유형이 지원된다.비트 벡터 유형 외에도 C-는 표현식으로 계산하여 제어 흐름에 사용할 수 있지만 레지스터나 메모리에 저장할 수 없는 부울 유형 bool을 제공한다.조립 언어에서와 같이, 서명된, 서명되지 않은, 플로트 및 포인터 사이의 구별과 같은 더 높은 유형의 규율은 C- 연산자 또는 다른 통사적 구조에 의해 부과된다.C--는 유형 체크되지 않았으며, 호출 규칙을 시행하거나 확인하지도 않는다.[3]: 28

C-- 버전 2는 비트 벡터와 부동 소수점 유형의 구분을 제거한다.이러한 유형은 문자열 "종류" 태그로 주석을 달 수 있으며, 무엇보다도 변수의 정수 대 부동 타이핑과 저장 동작(글로벌 또는 로컬)을 구별할 수 있다.전자는 정수 값과 부동 소수점 값에 대한 별도의 레지스터가 있는 표적에 유용하다.대상 종속 길이의 비트 벡터에 매핑되지만 포인터와 고유어에 대한 특수 유형이 도입되었다.[3]: 10 null

구현

C의 사양 페이지에는 C의 구현이 몇 가지 나열되어 있다."가장 활발하게 개발된" 컴파일러 퀵 C--는 2013년에 폐기되었다.[7]null

하스켈

사이먼 페이튼 존스, 주앙 디아스, 노먼 램지를 포함한 C의 일부 개발자들은 GHC를 연구하거나 연구했는데, GHC의 발전으로 인해 C 언어의 연장이 이루어졌으며, Cmm 사투리를 인간공학에 사용한다.[4]null

GHC 백엔드는 C-를 실행 가능한 코드로 추가 변환하거나 LLVM IR, 느린 C 또는 내장된 네이티브 백엔드를 통해 직접 변환할 책임이 있다.[8]원래 의도에도 불구하고 GHC는 C-에서 많은 일반적인 최적화를 수행한다. 다른 컴파일러 IR과 마찬가지로 C-표현은 디버깅을 위해 덤프될 수 있다.[9]대상별 최적화는 물론 나중에 백엔드에 의해 수행된다.null

참고 항목

참조

  1. ^ a b Nordin, Thomas; Jones, Simon Peyton; Iglesias, Pablo Nogueira; Oliva, Dino (1998-04-23). "The C– Language Reference Manual". {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  2. ^ a b Reig, Fermin; Ramsey, Norman; Jones, Simon Peyton (1999-01-01). "C–: a portable assembly language that supports garbage collection". {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  3. ^ a b c d Ramsey, Norman; Jones, Simon Peyton. "The C-- Language Specification, Version 2.0" (PDF). Retrieved 11 December 2019.
  4. ^ a b GHC 해설:도대체 .cmm 파일이 뭐야?
  5. ^ "An improved LLVM backend".
  6. ^ Nordin, Thomas; Jones, Simon Peyton; Iglesias, Pablo Nogueira; Oliva, Dino (1999-05-23). "The C– Language Reference Manual".
  7. ^ "C-- Downloads". www.cs.tufts.edu. Retrieved 11 December 2019.
  8. ^ GHC 백엔드
  9. ^ 최적화 연료를 사용하는 컴파일러 디버깅

외부 링크