2009-08-10 3 views
7

버려진 프로젝트, 이론 및 기능 목록 만 찾았습니다. 그러나 두 개의 C++ 소스 파일을 비교하고 의미 차이를 확인할 수있는 도구를 찾을 수 없습니다.C++에서 작동하는 Semantic Diff 도구가 있습니까?

물론 관련이없는 두 개의 파일 또는 개발 및 유지 관리 기간 동안 누적 된 변경 사항을 비교하지는 않습니다. 그러나 일반적으로 코드 검토시 논의되는 변경 사항은 문자/단어/줄 수준의 텍스트 변경 대신 적절한 의미와 함께 표시되는 경우 더 쉽게 이해됩니다.

답변

-1

일반적으로 불가능합니다. 한 프로그램은 다른 프로그램이 종료되는지 여부도 알 수 없습니다 (유명한 Halting Problem). 더 제한된 프로그램 (유한 경계 루프 및 기타 제약 조건)에 대해서는 더 많은 일을 할 수 있지만, 그럴 필요는 없으며 언어는 C++가 아니라 다소 까다 롭거나 제한된 하위 집합 또는 더 단순한 언어 여야합니다. 그게 아마 당신이 시작된 것 이상의 아무것도 발견하지 못했을 것입니다.

0

예, "커밋에 대한 의견 쓰기"및 "문제 추적"이라고합니다. 의미 론적 분석을위한 메타 데이터라고 생각해보십시오.

+0

하지만 그 대신 도구 – CsTamas

+0

진정한를 사용, 정보의 ISO 층 (8) 처리 될 것이지만. 모든 버전 컨트롤은 주석을 사용하여 기록을 표시 할 수 있지만 변경 사항별로 병합 도구에 통합 된 것을 본 적이 없습니다. 아주 유용한 기능이 될 수도 있습니다 ... 다른 한편으로는 코드의 주석과 충돌 할 수 있습니다. – ima

+0

병합 도구에 통합 되었습니까? 힘내? – greyfade

3

진정한 "시맨틱 diff"는 불가능합니다. Closer는 두 소스 파일을 비교하여 프로그램 구조 (변수, 표현식, 명령문, 메소드)에 대한 추상 편집 작업 (삭제, 복사, 이동, 이름 변경)을 통해 다른 소스 파일의 파생 방법을 확인하는 도구입니다. 몇 가지 언어에 대해이 작업을 수행하는 도구에 대해서는 Smart Differencer을 참조하십시오. 곧 C++이 출시 될 예정입니다.

2013 년 3 월 : C++ 11의 GCC/MS 사투리가 지원됩니다.

+0

얼마나 빨리? 비슷한 도구가 방금 시작되었습니다 ... – CsTamas

+0

30-60 일 후 예상. –

+0

2010 년 3 월 : 몇 달 동안 사용 가능했지만, 이제는이 특별한 질문으로 돌아 왔습니다. –

1

리눅스 커널 개발자가 사용하는 C 언어가 있습니다. 아니 C++에 대한

http://coccinelle.lip6.fr

+0

@ 브래드 : 그들은 의미 론적 패치에 대해 이야기하지만, 파일의 여러 버전에서 공백, 변수 이름 등의 변경에 민감하지 않은 "패턴 일치"는 의미하는 것으로 보이지만, 두 파일을 비교하여 파일이 유사한 지 확인하십시오.그들이 말하는 곳을 구체적으로 지적 해 주시겠습니까? –

+0

의미 론적 패치를 추론하는 spdiff 도구가 있습니다. http://www.diku.dk/hjemmesider/ansatte/jespera/doc.html. – LB40