정호 님이 쓰신 글 :
: Visual Assist 인수했다고 해서 C++ 인텔리센스 지원되나 확인해 보기 위해
: Rad studio 10.3 설치해봤는데요
:
:
: 비쥬얼 스튜디오에서 지원하는?
: Goto Declaration, Goto Definition, View Call Hierarchy 기능이 안되나요?
답변:
결론 부터 말하면...
rad 10.3의 Intellisense 기능은 베타 수준에도 한참 모자라고, 질문에 언급한 기능은 지원되지 않습니다.
10.3 에선 cquery 라는 오픈소스를 베껴서 배포하고 있는데...
cquery 는 크로스 플렛폼을 지원하는 VSCode 라는 개방형 IDE 에서
Intellisense 기능을 지원하기 위해 MS에서 만든 Language Server Protocol을 구현해 놓은 툴 입니다.
예를 들어서...
rad studio IDE 에서 다음과 같은 JSON RPC 형식을 독립적으로 실행되는 cquery.exe 에 파이프 라인 구조로 보내면
cquery.exe가 C++ 소스 파일들을 파싱해서 트렌스레이션 단위를 인덱스하고 결과를 넘겨 줍니다.
{ "jsonrpc" : "2.0", "method" : "textDocument/didOpen",
"params" : {
"textDocument": {
"uri" : "file:///C:/Users/mp/Documents/Embarcadero/Studio/Projects/Project1.cpp",
"languageId" : "cpp", "version" : 3, "text" : "" },
"args" : ["-D", "_DEBUG", "-D", "USEPACKAGES", "-I", "C:\\Users\\mp\\Documents\\Embarcadero\\Studio\\Projects", "-I",
"c:\\program files (x86)\\embarcadero\\studio\\20.0\\include\\windows\\vcl",
"-isystem", "c:\\program files (x86)\\embarcadero\\studio\\20.0\\include",
"-isystem", "c:\\program files (x86)\\embarcadero\\studio\\20.0\\include\\dinkumware64",
"-isystem", "c:\\program files (x86)\\embarcadero\\studio\\20.0\\include\\windows\\crtl",
"-isystem", "c:\\program files (x86)\\embarcadero\\studio\\20.0\\include\\windows\\sdk",
"-isystem", "c:\\program files (x86)\\embarcadero\\studio\\20.0\\include\\windows\\rtl",
"-isystem", "c:\\program files (x86)\\embarcadero\\studio\\20.0\\include\\windows\\vcl",
"-isystem", "C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\20.0\\hpp\\Win32",
"-isystem", "C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\20.0\\hpp\\Win32",
"-fborland-extensions", "-nobuiltininc", "-nostdsysteminc", "-target", "i686-pc-windows-omf",
"-fexceptions", "-fcxx-exceptions", "-x", "c++", "-std=c++17", "-O0", "-tR", "-tM", "-tU", "-tW",
"C:\\Users\\mp\\Documents\\Embarcadero\\Studio\\Projects\\Project1.cpp"] }}
VSCode 에서 Intellisense 기능을 지원하기 위해 MS에서 만든 Language Server Protocl (LSP)는
IDE 와 LSP 간의 인터페이스 형태로 JSON RPC 구조를 이용하는데.. 이건 네트웍이 될 수도 있고, 로컬 인터페이스가 될 수도 있습니다.
cquery 의 경우에는 스탠다드 표준 I/O 파이프 라인 구조를 이용 합니다.
IDE 소스 에디터와 다이렉트로 인터페이스 되는 Visual Stduio에서의 Language Service 와 LSP는 구조가 다릅니다.
엠바에서 오픈소스인 cquery 를 베껴서 배포하고 있지만, cquery의 다양한 기능 들을 활용하지 못하고 있지요.
제한적으로 Code Completion 기능 일부 만 간신히 처리하고 있습니다. 그리고 cquery는 Intellisense 기능 지원을 위한
C++ 파서 백엔드 엔진으로 clang (libclang) 툴체인을 사용 합니다.
컴파일러도 32비트만 c++17 지원하고, 32비트와 64비트 오브젝트 포맷, 라이브러리 포맷, 디버깅 포맷도 따로 국밥으로 노는
기형적인 구조를 갖고 있고...
엠바 프로젝트 매니져가 짱구가 아니고서야... 어떻게 컴파일러를 이런 식으로 만드는 건지...