태그 보관물: compiler

compiler

더 나은 구문으로 C로 변환하는 언어가 있습니까? [닫은]

CoffeeScript는 Ruby에서 영감을 얻은 깔끔한 구문으로 JavaScript로 변환하는 언어입니다. C로 변환하는 비슷한 언어가있어 성능 저하없이 더 읽기 쉬운 코드를 사용할 수 있습니까? 이와 같은 것이 존재하지 않는다면 그것을 만들지 않는 좋은 이유가 있습니까?



답변

CoffeeScript는 매우 간단한 이유로 JavaScript로 컴파일하고 JavaScript는 사실상 클라이언트 측 언어이며 브라우저 공급 업체가 CoffeeScript를 기본적으로 지원할 것으로 예상되는 경우 부당한 이유가 될 수 있습니다.

거의 모든 플랫폼과 풍부한 C 라이브러리를위한 C 컴파일러가 있기 때문에 매우 유사한 방식으로 C 번역가에게 고급 언어의 주요 요점은 즉각적인 이식성입니다. 예를 들어 Vala 는 다음과 같이 설계되었습니다 .

  1. 에 대한 컴파일러 될 G 객체 ,
  2. 머신의 C 컴파일러를 통해 네이티브 실행 파일을 빌드하고,
  3. 참조 카운팅 자동화
  4. 그놈 C 프로그래머는 여전히 접근 가능

그놈은 전통적으로 C 중심의 프로젝트이며 GObject는 C로 작성되었으므로 Vala는 친숙한 성격 (및 구문)에 관계없이 기계 코드로 컴파일하면 그놈 개발자들 사이에서 많은 사랑을 얻지 못할 것입니다. 모든 사람이 구문을 좋아하는 것 같지 않은데 , 다른 언어 인 Genie 가 그것을 향상시키기 위해 만들어 졌다는 점입니다 .

C ++ 예제의 경우 Facebook 은 PHP에서 C ++ 로의 번역기 인 HipHop을 개발했습니다 . 그들은 모든 PHP 코드를 교체하고 엔지니어를 다시 훈련시킬 필요없이 (또는 최악의 경우) CPU 사용과 같은 매우 특정한 문제를 해결하려고했습니다. 이것은 Facebook 확장 성 문제가 독특하고 PHP 확장이 C 및 C ++로 작성되므로 중간 C ++ 코드에 다시 액세스하는 것이 유용 할 수 있으므로 훨씬 더 구체적인 예입니다.

따라서 중급 언어에서 다른 언어로 번역하는 것은 중간 코드에 액세스해야 할 때 주로 좋습니다. CoffeeScript의 경우 광범위한 브라우저 채택으로 인해 JavaScript 코드가 필요하며 기존 코드베이스로 인해 Vala, Genie 및 HipHop에 필요합니다. 분명히 중간 코드에 액세스 할 수 있으면 필요할 때 더 최적화 할 수 있습니다.

그러나 일반적으로 말해서 결과 코드를 사용하지 않은 경우 C 또는 다른 언어로 번역되는 언어를 작성하는 것은 좋은 생각이 아닙니다. C에 대처할 수 없다면 다른 언어를 선택하십시오. 우연히도 Bjarne Stroustrup (CFront)이 작성한 최초의 C ++ 컴파일러는 Classes to C 변환기를 사용하는 C 였지만, 주로 새로운 언어로 C를 Classes 로 부트 스트랩 할 수 없었기 때문 입니다.


답변

나는 Yannis Rizos 가 그의 다른 위대한 대답에서하지 않은 몇 가지 사항을 다룰 것입니다.

예, 많은 언어가 존재합니다. C는 컴파일러 백엔드의 일반적인 목표입니다. LLVM의 경우 그다지 중요하지 않지만 매우 이식성이 뛰어나고 최적화되어 있기 때문입니다.

내가 아는 몇 가지 구현은 다음과 같습니다.

  • C ++ (적어도 초기에는)
  • GHC Haskell (주 코드 생성기는 C–이지만)
  • Gambit / Chicken / Bigloo Scheme
  • ECL (공통 리스프)
  • 발라 & 지니

오리지널 C 프로그램만큼 빠름

아니요, C를 중간 언어로 사용한다고해서 속도에 도달하지는 않습니다. C가 빠른 이유는 다른 언어와는 다른 코드 작성 방법 때문입니다. 휴대용 어셈블리 일뿐 특별하지는 않습니다.


답변

Rock 은 C99 소스를 생성 하는 ooc 컴파일러입니다. OOC-LANG은 객체, 일류 기능, 핑크 유니콘과 프로그래밍 언어입니다. OOC는 동적 언어이며 지금까지 멀리 산책. 더 뚱뚱하고 느린 c 코드를 생성합니다. 귀하의 요구 사항에 맞게 수정해야합니다. 그러나 좋은 출발점입니다.


답변

ValaGenie 는 모두 C 로 컴파일되는 언어입니다. haxe 는 C ++로 컴파일하지만 이것이 원하는 것이 확실하지 않습니다.


답변

OCaml은 바이트 코드, 네이티브 코드로 컴파일 하거나 직접 해석하거나 C로 컴파일 할 수 있습니다 .


답변

  • Bjarne Stroustrop의 원래 C ++ 컴파일러 인 “cfront”는 C ++를 C로 컴파일 한 다음 선택적으로 C 컴파일러를 실행하여 개체 코드를 생성합니다. C ++은 “이론적이지 않은”것처럼 얻을 수 있습니다 🙂
  • 유닉스 “yacc”와 GNU “Bison”컴파일러-컴파일러는 입력 언어를 C로 변환합니다. 많은 정교한 시스템이이 언어로 작성되었습니다.

답변