it-swarm-ko.tech

컴파일러가 아닌 C ++ 인터프리터를 사용 했습니까?

UnderC, Cint, Cling, Ch 또는 다른 C++ 인터프리터를 사용하고 경험을 공유 할 수 있는지 궁금합니다.

67
Allan Wind

참고 : 다음은 CINT에 따라 다르지만 아마도 가장 많이 사용되는 광범위하게 사용됨 그들 모두.

CINT를 광범위하게 사용한 입자 물리학의 대학원생으로서 나는 당신에게 경고해야합니다. "작동"하는 동안 단계적으로 폐지되는 과정에 있음 이며, 입자 물리학에서 1 년 이상을 보낸 사람들은 일반적으로 몇 가지 이유로 피하는 법을 배웁니다.

  1. C 인터프리터의 근본으로 인해 C++의 가장 중요한 구성 요소 중 일부를 해석하지 못합니다. 예를 들어 템플릿이 항상 작동하는 것은 아니므로 C++을 유연하고 사용하기 쉽게 만드는 것을 사용하지 않는 것이 좋습니다.

  2. 최소로 최적화 된 C++보다 속도가 느립니다 (최소한 5 배).

  3. 디버깅 메시지는 g ++에서 생성 된 것보다 훨씬 암호화되어 있습니다.

  4. 범위 지정은 컴파일 된 C++과 일치하지 않습니다. 형식의 코드를 보는 것이 일반적입니다.

    if (energy > 30) { 
        float correction = 2.4;
    }
    else {
        float correction = 6.3;
    }
    
    somevalue += correction; 
    

    작동하는 모든 C++ 컴파일러는 correcton이 범위를 벗어났다고 불평하지만 CINT는이를 허용합니다. 결과적으로 CINT 코드는 실제로 C++이 아니라 모양과 비슷합니다.

간단히 말해 CINT에는 C++의 장점이 없으며 모든 단점과 함께 몇 가지 단점이 있습니다.

CINT가 여전히 사용된다는 사실은 ROOT 프레임 워크에 포함되어있어 역사적인 사고 일 가능성이 높습니다. 이 책이 쓰여졌을 때 (20 년 전), 대화식 플로팅/피팅을 위해 통역 된 언어가 실제로 필요했습니다. 이제 그 역할을 수행하는 패키지가 많이 있으며, 수백 명의 활동중인 개발자가 있습니다.

이들 중 어느 것도 C++로 작성되지 않았습니다. 왜? 간단히 말해서 C++은 해석되지 않습니다. 예를 들어 정적 타이핑은 컴파일하는 동안 최적화를 크게 향상 시키지만 컴퓨터가 런타임에 코드를 볼 수만 있다면 코드를 어수선하게 만들고 과도하게 구속합니다. 통역 언어를 사용할 수있는 고급 스러우면 Python 또는 Ruby를 배우십시오. 이미 배우더라도 CINT에 대한 걸림돌보다 시간이 덜 걸립니다. C++을 아십시오.

내 경험상 ROOT (CINT를 실행하기 위해 설치 해야하는 패키지)로 작업하는 오래된 연구원들은 CINT를 피하기 위해 ROOT 라이브러리를 일반 C++ 실행 파일로 컴파일합니다. 젊은 세대의 사람들은이 리드를 따르거나 Python 스크립팅에 사용합니다.

또한 ROOT (및 CINT)는 상당히 현대적인 컴퓨터에서 컴파일하는 데 약 30 분이 걸리며 새로운 버전의 gcc에서는 실패 할 수 있습니다. 그것은 수년 전에 중요한 목적으로 사용되었던 패키지이지만, 이제는 그것이 나이를 분명히 보여주고 있습니다. 소스 코드를 살펴보면 수백 가지의 더 이상 사용되지 않는 c 스타일 캐스트, 유형 안전성에 큰 구멍이 있고 전역 변수가 많이 사용됩니다.

C++를 작성하려는 경우 C++을 작성해야합니다. C++ 인터프리터가 절대적으로 있어야하는 경우 CINT가 좋습니다.

29
Shep

clang 에 기반한 C++ 인터프리터의 cling Cern의 프로젝트 가 있습니다-new approachROOT cint 20 년의 경험을 바탕으로하며 Cern 녀석은 매우 안정적이며 권장합니다.

좋은 점은 다음과 같습니다. Google Talk : clang/LLVM 기반의 C++ 인터프리터 인 집착 소개 .

23

cint는 입자 물리 분석 패키지 ROOT 의 명령 프로세서입니다. 나는 정기적으로 사용하며 나에게 아주 잘 작동합니다.

그것은 상당히 완전하고 컴파일 된 코드와 잘 어울립니다 (인터프리터에서 사용하기 위해 컴파일 된 모듈을로드 할 수 있습니다 ...)

late edit :: 그 질문에 대한 포스터가 여기에 게시하고 싶지 않은 것처럼 나중에 복제본에서 복사했습니다. igcc =. 개인적으로 시도한 적이 없지만 웹 페이지는 유망합니다.

19
dmckee

나는 (약 1 년 전) Ch 과 함께 놀았으며 꽤 좋았습니다.

4
Alan

오래 전에 CodeCenter라는 C++ 인터프리터를 사용했습니다. 비트 필드 나 멋진 포인터 맹 글링과 같은 것을 처리 할 수는 없지만 꽤 좋았습니다. 그것에 대한 두 가지 멋진 점은 변수가 변경되었을 때 볼 수 있고 디버깅하는 동안 C/C++ 코드를 즉시 평가할 수 있다는 것입니다. 요즘에는 GDB와 같은 디버거가 기본적으로 훌륭하다고 생각합니다.

2
jfm3

또한 오래 전에 Instant C라는 제품을 사용했지만 더 발전했는지 몰라

2
user11269

c-repl 라는 프로그램이 있습니다.이 프로그램은 GCC를 사용하여 코드를 공유 라이브러리에 반복적으로 컴파일 한 다음 결과 객체를로드하여 작동합니다. 우분투의 저장소에 the version Ruby (물론 GCC는 계산하지 않음)로 작성된 반면 latest git 은 Haskell에 있습니다. :)

0
Matthew Flaschen

Ch a를 사용하여 책임이있는 DLL을 블랙 박스 테스트에 사용할 수 있는지 다시 살펴 보았습니다. 불행히도 DLL에서 함수를로드하고 실행하는 방법을 알 수 없었습니다. 그런 다음 다시 동기 부여되지 않았으며 방법이있을 수 있습니다.

0
Jon Trauntvein