GCC, EDG, ELSA
- Posted at 2008/03/27 23:34
- Filed under 하루하루
제가 속한 연구실은 프로그램에 있는 이런저런 버그를 잡는 분석기를 만듭니다.
이번에 C의 버그를 잡는 분석기의 핵심기술 개발이 일단락 되면서 C++로 넘어가게 되었습니다.
C++로 넘어가려고 하니 첫 스텝부터 쉽지 않더군요. 쓸만한 C++ 파서를 구하기부터 쉽지 않더랍니다. 잘 작동하는 파서가 수 없이 존재하는 C나 JAVA와는 다르게, C++은 제대로된 (그리고 구할 수 있는) 파서가 거의 존재하지 않습니다.
GCC의 C++ compiler의 frontend가 가장 구하기 쉬운 녀석이고 EDG에서 만든 상용 파서가 가장 성능이 뛰어난 녀석이고 버클리의 천재가 홀로 만들어낸 ELSA라는 별로 유명하지 않은 녀석도 있습니다. 사실상 이 세가지가 선택지의 전부라고 봐도 무방합니다.
선택지가 없는 것도 아닌데 무엇이 문제냐고 물으신다면. 세가지 선택지 다 큰 결점이 있다고 해야겠군요. EDG상용의 특성상 온갖 클라이언트를 행복하게 만들어야 하기 때문에 파싱 결과물이 아주 방대합니다. 필요한 것을 얻기 위해서는 불필요한 것을 포함하여 굉장한 양의 공부를 해야 합니다. GCC는 컴파일러에 특화되어 있어 EDG처럼 방대하지는 않지만 프로그램의 구조 자체가 이해하기 어렵습니다. "GCC frontend를 쓸 수 있다면 그 길로 석사 때려치고 회사에 취업하는게 더 돈벌이가 될거다"라고 농담을 하기도 했습니다. ELSA는 결과물도 프로그램의 구조도 깔끔하여 이해하는데 가장 적은 시간이 걸리지만 시장에서 검증되지 않았다는 위험요인을 품고 있습니다. 가만 생각해보면 세가지 프로그램이 각각 상업프로그램, 오픈소스, 학자가 만든 프로그램의 대표적인 특성을 잘 보여주는 것 같습니다.
이리저리 고민한 끝에 연구실에서는 ELSA를 쓰기로 결정했습니다. ELSA의 깔끔함과, 구 버전의 ELSA를 Ocaml과 붙여주는 Olmar라는 래퍼의 존재가 결정적이었지요. 연구실에서 분석기를 Ocaml로 작성하기에 버전이 다르더라도 레퍼가 존제한다는 사실은 아주 큰 의미를 가집니다. 어느 파서를 쓰더라도 레퍼를 작성해야 하는데 ELSA의 경우는 다른 파서와 비하면 일의 크기가 없다고 해도 좋을 만큼 작으니까요. 결국 학술적인 사람들은 학술적인 냄세가 나는 물건에 손이 가나봅니다.
Posted by 발당
- Response
- No Trackback , No Comment
Trackback URL : http://jbdmk1.upnl.org/tt/trackback/380

