C-
C--패러다임 | 명령적 |
---|---|
설계자 | 사이먼 페이튼 존스와 노먼 램지 |
첫 등장 | 1997 |
타이핑 규율 | 정적인 |
웹사이트 | https://www.cs.tufts.edu/~nr/c--/index.properties |
영향을 받은 | |
C |
C-- (C 마이너스 마이너스라고 발음됨)는 C와 같은 프로그래밍 언어다.그것의 창조자인 기능 프로그래밍 연구자 사이먼 페이튼 존스와 노먼 램지는 그것을 주로 인간 프로그래머가 쓴 것이 아니라 매우 높은 수준의 언어를 위한 컴파일러에 의해 생성되도록 설계했다.다른 많은 중간 언어와 달리, 그것의 표현은 바이트 코드나 다른 이진 형식이 아닌 일반 ASCII 텍스트다.[1][2]null
크게 두 가지 가지가 있다.
- C--, 2005년[3] 5월에 최종 버전 2.0이 발매된 오리지널 지점
- Cmm, Glasgow Haskell Compiler(GHC)[4][5]에서 중간 표현(IR)으로 능동적으로 사용되는 포크
디자인
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
참고 항목
참조
- ^ a b Nordin, Thomas; Jones, Simon Peyton; Iglesias, Pablo Nogueira; Oliva, Dino (1998-04-23). "The C– Language Reference Manual".
{{cite journal}}
:Cite 저널은 필요로 한다.journal=
(도움말) - ^ 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=
(도움말) - ^ a b c d Ramsey, Norman; Jones, Simon Peyton. "The C-- Language Specification, Version 2.0" (PDF). Retrieved 11 December 2019.
- ^ a b GHC 해설:도대체 .cmm 파일이 뭐야?
- ^ "An improved LLVM backend".
- ^ Nordin, Thomas; Jones, Simon Peyton; Iglesias, Pablo Nogueira; Oliva, Dino (1999-05-23). "The C– Language Reference Manual".
- ^ "C-- Downloads". www.cs.tufts.edu. Retrieved 11 December 2019.
- ^ GHC 백엔드
- ^ 최적화 연료를 사용하는 컴파일러 디버깅
외부 링크
- 구 공식 웹사이트 아카이브(cminusminus.org)
- 빠른 C-- 코드 보관(참조 구현)