CoffeeScript는 Ruby에서 영감을 얻은 깔끔한 구문으로 JavaScript로 변환하는 언어입니다. C로 변환하는 비슷한 언어가있어 성능 저하없이 더 읽기 쉬운 코드를 사용할 수 있습니까? 이와 같은 것이 존재하지 않는다면 그것을 만들지 않는 좋은 이유가 있습니까?
CoffeeScript는 Ruby에서 영감을 얻은 깔끔한 구문으로 JavaScript로 변환하는 언어입니다. C로 변환하는 비슷한 언어가있어 성능 저하없이 더 읽기 쉬운 코드를 사용할 수 있습니까? 이와 같은 것이 존재하지 않는다면 그것을 만들지 않는 좋은 이유가 있습니까?
답변:
CoffeeScript는 매우 간단한 이유로 JavaScript로 컴파일하고 JavaScript는 사실상 클라이언트 측 언어이며 브라우저 공급 업체가 CoffeeScript를 기본적으로 지원할 것으로 예상되는 경우 부당한 이유가 될 수 있습니다.
거의 모든 플랫폼과 풍부한 C 라이브러리를위한 C 컴파일러가 있기 때문에 매우 유사한 방식으로 C 번역가에게 고급 언어의 주요 요점은 즉각적인 이식성입니다. 예를 들어 Vala 는 다음과 같이 설계되었습니다 .
그놈은 전통적으로 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 프로그램만큼 빠름
아니요, C를 중간 언어로 사용한다고해서 속도에 도달하지는 않습니다. C가 빠른 이유는 다른 언어와는 다른 코드 작성 방법 때문입니다. 휴대용 어셈블리 일뿐 특별하지는 않습니다.
OCaml은 바이트 코드, 네이티브 코드로 컴파일 하거나 직접 해석하거나 C로 컴파일 할 수 있습니다 .