컴파일러를 하나 만들고 있습니다...

전웅의 이미지

안녕하세요? 전웅입니다.

간만에 글을 남기네요. 그것도 자유 게시판에. ^^

배우자가 학생이라 자기 공부 때문에 바쁘다보니
남는 여가 시간에 잉여 활동을 좀 했습니다.
집사람 공부 시작한지가 3년이니 3년 정도 퇴근 후 시간과
주말을 투자했네요.

무엇을 할까 고민하다가,
컴파일러가 전공이고 할 줄 아는 것은 C 밖에 없으니
표준 C 컴파일러를 만들기 시작했습니다.

아직 back-end 부분이 남아있지만 (현재는 IR 까지 생성합니다),
문법 검사용으로는 쓸만하지 않을까 싶어 front-end 테스트도 할겸
웹을 통해 공개했습니다.

http://code.woong.org/beluga

홈페이지에 적었듯이 lcc 기반이며, back-end 완료 후에는
저장소를 오픈할 계획입니다만 취미로 정말 하고 싶을 때에만
진행하다보니 앞으로도 수개월에서 1년 정도는 걸리지 않을까
싶네요 - C99/C1X 도 지원해야 하고 세상에서 가장 잔소리가 많고
이상한 결과 (예를 들면, byte endian 과 bit-field endian 이
다른...)를 내는 컴파일러가 목표라서 더 걸리지 않으면 다행이겠네요.

딱히 웹에서 간단한 코드에 대한 문법 검사를 해볼 수 있다는 것
말고는 용도가 없겠지만 재밌는 아이디어 있으면 얻어볼까 하고
이곳에도 글 남깁니다.

함수별 테스트에만 두 달을 보냈지만 아직도 불안불안합니다. 살살 다뤄주세요. ^^

혹시나 문제점이나 제안은 woong.jun 골뱅이 gmail.com 으로 주시면 됩니다.

즐거운 한가위 보내세요~

--
Jun, Woong (woong.jun at gmail.com)

sql2의 이미지

전 항상 남의 프로젝트만 엿보기만 했는데... 대단하시네요.

컴파일러 전공이시면...

http://ctuning.org/wiki/index.php/Main_Page

이 ctuning 프로젝트에 참여해보시죠.

전 영어도 짧고, 잔무 핑계와 게임에 빠져서리...

시간나면 MILEPOST GCC 에서 ICI Plugin 이나 optimize 해본다는게... 맨날 핑계만...^^;

전웅의 이미지

컴파일러 전공이어도 졸업한지 너무 오래라
최신 연구 방향이나 트랜드에 대해 깜깜합니다. ^^

소개해주신 프로젝트도 재미나 보이네요.
이런 프로젝트 볼 때마다 기반 기술에 돈이든 사람이든
투자할 생각 없는 우리나라 기업에 조금은 서운한 마음입니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

jachin의 이미지

오랫만에 글을 쓰신 것만으로 모자라,
'이미 전 싱글이 아니에요.'라는 놀라운 소식까지 알려주시다니!!!
부럽습니다. (//ㅂ//) 에헤헤...

타겟디바이스는 x86이겠지요?
공개될 소스코드가 궁금합니다. ^^
즐거운 추석되시고, 즐겁게 프로젝트 진행하시기 바랍니다.

인라인 어셈블러 코드도 되겠지요?

전웅의 이미지

ㅋㅋ 하긴 집사람 만나서 결혼한게 지금까지 제 인생에서도
가장 놀랄만한 일이긴 합니다. (갑자기 집사람에게 고마워지네요 ^^)

회사에서 줄기차게 ARM 을 사용하곤 있지만
여전히 제일 익숙한 건 x86 이라 타깃은 x86 을 생각하고 있습니다.

소스는 front-end 만 추려서 (따로 구현한 라이브러리, 주석, 빈줄 빼고)
대충 12,000줄 정도 되고요, 개인적인 경험으로 보았을 때
혼자서 코드 전체에 대한 흐름을 놓치지 않는 규모가 2만줄 이내라고 생각하고 있어서
back-end 까지 어떻게든 2만줄 이내에 끊으려고 생각 중입니다.

아직까진 C90 과 구현이 상대적으로 용이한 C99 일부 기술만 지원하는데
최종적으로는 확장으로 gcc-compatible mode 를 지원하면 어떨까 생각하고
있습니다 - 그때가 되면 inline asm 도 지원해야 되겠지요.

jachin 님도 즐거운 추석되세요~ ^^

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

winner의 이미지

주석 혹은 Doxygen도 들어가나요?

전웅의 이미지

저도 예전엔 개인 프로젝트에도

http://code.woong.org/hg/ocelot/file/54182d1d81df/cel/opt/opt.c

이렇게 열심히 Doxygen 을 썼었는데
문서화라는 것이 꼬박 코딩만큼의 시간을 잡아 먹더라고요.

컴파일러 진행할 때는 진도가 너무 느림 감이 있어 각 함수마다 1~2줄 정도
설명을 제외하고는 거의 주석이 없습니다. (참 좋지 않은 프로그래머죠 ㅡㅡ;)

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

winner의 이미지

전 주석이나 문서화 없다고 문제라고 생각하지는 않습니다. 비율이 궁금해서 여쭤봤을 뿐이예요.
저랑 비교해보기 위해서 말이죠.
전 5천줄 넘어가면 힘들더라고요.

전웅의 이미지

아, 개인적으로 프로그래밍의 마침표는 문서에서 찍어야 한다는 생각이라서요.
업무 상이나 팀 단위로 진행하는 프로젝트의 경우에는 특히나 더 중요하다고 생각합니다만,
그렇지 않아도 투자할 시간이 부족한 개인 잉여 활동에까지 업무에서처럼 했더니
도저히 끝이 보이질 않더라구요. ㅋㅋ

제 생각엔 2만줄, 5천줄의 차이는 "혼자서 흐름을 따라갈 수 있는"의 기준이
지극히 주관적이라서 나는 것이 아닐까 생각합니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

dwfree74의 이미지

처음 프로그래밍을 시작했을때는
나중에는 OS,컴파일러,게임 등등을 만들어보고 싶은 꿈을 꾸곤 했었는데
....
지금은...ㅜ.ㅜ;

아무튼 부럽습니다.
특히나 유부남이면서 컴파일러까지 만드시니...

kldp.net 에 많은 프로그래머들이 동참하기를 바라며...^^

전웅의 이미지

컴파일러보다 제가 유부남인게 더 화제가 되는 듯한...ㅋㅋㅋ

저도 꿈꾸고 있는 일이 아직 많은데
우리나라는 사회적인 구조상 잉여 생활을 하는데 장애물이 많은 편이라
느낍니다.

그나마 집사람 공부가 앞으로 몇년 더 남아있고
회사에서도 제 일 마치면 눈치 안 보고 나올 짬이 되어서(?)
2세가 생기기 전까지 열심히 잉여력을 불태워 볼까 합니다. ^^

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

daybreak의 이미지

이것도 한 번 돌아가는거 만들어보고 그 이후에 비슷한거 만들어보면 생각보다 잘 됩니다.

전웅의 이미지

"이것"이란 컴파일러 만드는거요, 아님 배우자(여자친구) 만드는거요? ^^
전자에 대한 말씀이라면 동의하지만, 후자에 대해선 잘 모르겠습니다. ㅋㅋ

개인적으로 제 목표는 "한 번 돌아가는거"나 "그 이후에 비슷한거"가 아니라
product 레벨입니다. 나중에 코드 공개할 때 함께 공개하겠지만
C 표준 기준으로 얼마나 변태적인 테스트 코드로 압박을 하며 테스트를 했는지 모릅니다.
(테스트에 쓰기 위해 작성한 코드만 수천줄이고, 매번 regression test 에 사용하고 있습니다.)

수년 이내에 제 계획대로 추가하고 싶은 부분들은 모두 완료한다면
그 이후에는 지금 있는 회사에서 업무 때문에 배운 JavaScript 로 포팅을... ㅋㅋㅋ

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

gilgil의 이미지

결혼까지 하셨는데 잉여활동을... ^^

전웅의 이미지

ㅋㅋ 별로 인지하지 못하고 살았었는데 이제 보니
"결혼 생활"과 "잉여 활동"이 대척점에 있는 듯한 느낌입니다. ㅋ

결혼하고도 경제성이 별로 없는(전무한?) 잉여 활동에 투자할 수 있도록
허가해준 집사람에게 감사해야 겠네요. ^^

즐거운 추석 연휴 보내세요~

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

태훈의 이미지

한창 C 언어 공부할때 전웅님께서 쓰신 책에서 많은 가르침을 받았었습니다. 그 이전에는 C 언어 표준에 대해서는 별 생각 없이 막 쓰다가, 표준을 신경쓰면서 코드를 쓰게 되었었죠. 지금은 gcc 컴파일러만 사용 하다보니, gcc 종속적인 C 프로그래머가 되어버렸네요.

우리나라가 소프트웨어 분야의 원천 기술격인 시스템 소프트웨어(아키텍처, 운영체제, 컴파일러)가 많이 취약하고 경시하는 분위기입니다만, 이렇게 남모르게 본능(?)에 충실하여 개인 프로젝트로 진행하시는 분들을 뵐때마다 기분이 좋습니다.

저도 응원하고 있겠습니다. Just for fun.

Just do it!

전웅의 이미지

앗, 책 이야기... 부끄럽습니다. ㅋ

태훈님께서 개발 중(완료?)이신 OS 소식 이전에 접했습니다.
응원의 말씀 감사드리며, DINOS 프로젝트도 쉼없이 발전해가길 저도 응원하겠습니다. ^^

화이팅입니다!

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

익명 사용자의 이미지

근래에 나온 C언어 국내서 중에서 최고라고 생각합니다.

전웅의 이미지

지금 내용을 보면 얼굴이 화끈거릴 정도로 부끄럽고
부족한 책임에도 칭찬의 말씀 주시니 감사드립니다.

아주 아주 더디지만 개정판도 잉여 활동이라 생각하고
진행하고 있으니 부끄러움을 리프레시할 수 있는 날이
오길 기다리고 있습니다. ^^

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

bangjunyoung의 이미지

대단하십니다. 가짜 전문가와는 확연히 다른 모습을 보여주는 진짜 전문가이시군요.
앞으로도 많은 기대하겠습니다.

전웅의 이미지

준영님 오랜만입니다. ^^

준영님께서 "전문가"라 칭해 주시니 몸둘 바를 모르겠습니다.
아직 전문가라 하기엔 부족한 부분이 많지만
앞으로 부끄러움 없이 "전문가"라 불릴 수 있도록 달려보겠습니다. ^^

즐거운 추석 연휴되시길 바랍니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

winner의 이미지

오래전에 논란의 주제였던 전문가 이야기를 계속 하시는데 전 여전히 모르겠습니다.
존경하시는, 닮고 싶은 전문가가 구체적으로 어떤 분이 있나요?

익명 사용자의 이미지

낚시 전문가

익명 사용자의 이미지

윈도 10 나올 때쯤 윈도 1.0 호환으로 나오는 건 아니겠죠 ?

http://kldp.org/node/56795#comment-232925

기대합니다.

모구아를 내놓을 때까진 당신은 가짜입니다.

unipro의 이미지

글 중에서 "3년의 시간"이 가장 인상 깊습니다.
요즘 같이 변화가 빠른 시대에 꽤 긴 시간인데, 묵묵히 진행하신 뚝심에 존경을 표합니다.
즐거운 잉여 생활을 보내십시요.

내 블로그: http://unipro.tistory.com

전웅의 이미지

저도 다른 무엇보다도 다른 것들에 가는 관심을 붙들어 잡고
하나에 매달려 중간 결과물을 냈다는 점에 대해서
가장 만족스러워 하고 있습니다. ^^

걱정이 하나 있다면 그 만족스러움에 도취되어
지금처럼 쉬는 시간이 마냥 길어질까 하는 부분입니다.
아무리 잉여 활동이라지만 적당히 쉬고 조만간 다시 채찍질을
시작해야겠습니다.

응원의 말씀 감사드리며, 환절기 건강 챙기시길 바랍니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

onion의 이미지

펀더멘탈도 아직 다 못읽었는데....
하긴......... 사람마다 길은 틀린거니깐요.........(먼산)

부디 하시는 플젝 잘 되시길 바랍니다.
저는 당체 짐작도 안가네요..T.T

-----새벽녘의 흡혈양파-----

전웅의 이미지

서로 걷는 방향이 달라 멀어보이는 것이지
누군가가 더 빨리 걸어 멀어보이는 것은 아니라 생각합니다.

응원의 말씀 감사드리며, 흡혈(^^)양파님도 화이팅입니다!

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

권순선의 이미지

혹시라도 아이가 생기게 되면 잉여짓은 바로 끝납니다. 부지런히 달리시길.. :-)

익명 사용자의 이미지

두 아이의 아버지가 되어 보니 공감 100배..ㅠ.ㅠ

전웅의 이미지

이 시대 아버지들의 아픔이 너무 절실히 느껴집니다. ㅜㅜ
컴파일러 back-end 의 경쟁 상대는 제 게으름이 아니라 2세였군요 ㅡㅡ;
책이든 컴파일러든 부지런히 달려야겠습니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

sql2의 이미지

뒷이야기는...

LLVM 이나, microsoft Phoenix 와 같은 툴을 이용하심이...

ps. "배틀프로그래머 시라세" 애니 한번 보세요. 재미있습니다. 따블 컴파일라!! 란 신(?)개념도 나오고..^^;

전웅의 이미지

네, 그렇지 않아도 LLVM 을 후보로 생각하고 있습니다.

일단 컴파일 과정의 처음부터 끝까지 소스 파일의 문자 하나 하나가
제 손을 거치게 하는 것도 이번 잉여활동의 중요한 목적이라
x86 back-end 를 따로 개발하고 후에 LLVM 을 수용할 수 있는 형태로
확장할 계획입니다 - 그 과정에서 초기 설계에 미흡했던 부분을 많이
보완할 수 있는 효과가 있지 않을까 생각합니다.

요새 회사에서 한참 교육철이라 정신이 없습니다만
어느 정도 마무리되면 추천해주신 애니 꼭 감상해 보도록 하겠습니다. ^^
"따블 컴파일라"라... ㅋㅋ

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

전웅의 이미지

아직 프로젝트를 내버리지 않았음을 알리기 위해 적습니다. ^^

처음 웹으로 front-end 를 오픈한게 무려 9월이군요.
4개월이라는 시간이 훌쩍 지났지만 잉여 활동이다보니
이제서야 겨우 front-end 정리 작업을 마치고 back-end 로 넘어갑니다.

그동안 아주아주 느리게 front-end 에 추가/수정된 부분을 정리해 보았습니다.

- charset encoding 지원(input, exec, wide 옵션 지원)
- 문법 오류 처리 관련 토큰 skipping 개선
- regression test 정비
- multibyte character 관련 오류 메시지 위치 계산 개선
- translation limits 관련 진단 개선
- 명칭 길이 관련 경고 시점을 선언 시점으로 변경
- 문장/선언 섞어쓰기 지원
- 문장/선언 섞어쓰기 관련 오류 메시지 개선
- 문장 필요한 자리에 쓰인 선언 진단 개선
- 잘못 쓰인 typedef 등의 중복 진단 제거
- 블럭 내 extern 중복 선언을 list up 해서 개별로 진단
- 인자 진급 변환 함수화
- anonymous struct/union 지원
- main() 함수 정의 검사 추가 (표준 모드에서만 검사)
- 형변환 관련 오류/경고 메시지 개선
- type 별 최대/최소값 정보를 symbol 내부로 변경
- fp 와 정수간 형변환시 overflow 검사 개선 (표준 범위 준수)
- 함수 중복 정의와 비호환 선언 진단 개선
- unreachable code 경고 개선
- IR binding 연결 추가

코드의 많은 부분을 손봤는데 작업량에 비해 진행한 항목 수는 그리 많지 않네요.
애초부터 손볼 곳이 워낙 많았었나 봅니다. --;

이제서야 back-end 작업을 시작해서
현정권 끝나기 전에 결과물이 나와야 하는데 과연 가능할지 걱정이네요...

추운 날씨에 다들 건강 챙기세요~! 전 퇴근 준비를... ^^

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

전웅의 이미지

잊혀질만하면(혹은 잊혀지면) 나타나고 있습니다.

정말 띄엄띄엄 back-end 작업 진행 중 구현한 컴파일러와 엮어서 쓸만한 전처리기가 없어 고심 끝에
새로 하나 만들었습니다.

이름은 "beluga" 의 별명인 "sea-canary" 라고 붙였고 컴파일러야 아직 back-end 가 없어 코드 공개를 못하지만
전처리기는 (문서화가 전혀 없지만) C90 스팩을 완전히 구현한 상태라 우선 코드를 공개하였습니다.

https://github.com/mycoboco/beluga

전처리기와 컴파일러가 코드를 공유하는 부분이 있어 컴파일러 코드 일부도 들어가 있습니다.

의존하는 라이브러리인 ocelot (https://github.com/mycoboco/ocelot) 을 빌드하면 전처리기도 직접 빌드할 수 있지만
아직 문서화도 안 되었고 driver 도 하나 없는 불편한 녀석이기에, 프로젝트 홈페이지나

http://code.woong.org/beluga

C 프로그래머를 위해 만든 오덕 스타일 404 페이지

http://code.woong.org/404

에서 전처리기/컴파일러 동작을 테스트할 수 있습니다.

책으로만 배운 여러 최적화 이론을 적용하기 쉽게 하려고 구조를 잡다보니 back-end 는 정말 진도가
나가지를 않고 있네요. 하지만, 느려도 계속 걸어는 가고 있으니 언젠가는 끝을 보겠죠.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

unipro의 이미지

멋지십니다.
긴 호흡으로 꾸준히 나아가는 모습을 배웁니다.

내 블로그: http://unipro.tistory.com

전웅의 이미지

감사합니다. ^^

가끔은 너무 호흡이 긴 것 아닌가 걱정이 되기도 하지만
취미 프로젝트 때문에 생계를 소홀히 할 순 없으니
딱 지치지 않을 정도로 무척이나 천천히 나아가고 있습니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

김정균의 이미지

404 page가 정말 인상 깊은데요.

전웅님 프로젝트 정말 멋집니다 :-)

P.S.
ㅎㅎ 혹시 back-end 작업을 방해할 요소가 발생했는지요? ㅋㅋ

전웅의 이미지

칭찬의 말씀 감사드립니다.

프로젝트 본 페이지보다 404 페이지가 더 인기가 많은 것 같습니다.
아직 back-end 작업을 크게 방해할 요소는 없지만
곧 계획중이다보니 마음만 급합니다. ^^

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

barmi의 이미지

꾸준한 작업에 찬사를 보냅니다.

404 page도 정말 멋집니다.
(main() 함수의 return값이 없는 게 걸리네요.)

emptynote의 이미지

404 라는 이름 센스있는 작명으로

이것은 c문법에 맞지 않는 소스라는것을 알려주는 좋은 이름이라고 생각합니다.

그래서 해당 페이지의 소스는 만들고 계시고 있는 컴파일러 테스트를 위한 c문법에 맞지 않는 소스의 예제라 생각합니다.

저만 이렇게 생각하는건가요.

전웅의 이미지

말씀하신대로 컴파일러 테스트를 위해 일부러 고쳐볼만한 의지가 생길 정도(?)로
적당히 잘못된 코드를 넣어보았습니다. ^^

좀 더 재밌는 코드를 넣고 싶었는데 저 페이지가 홈페이지 전체의 404 페이지 역할을
할 것이라 비개발자인 분들이 당황할까봐 걱정되다보니...

서버 오류일 때 나오는 500 페이지도 있는데 서버 오류가 나면 안 되니
보일 일이 있어서는 안 되겠지요? ㅋ

나중에 심심할 때 비개발자 분들을 당황케 하지 않으면서 좀 더 재미있게 만들어볼 고민을
해야겠습니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

전웅의 이미지

감사합니다.

ㅎㅎ 저도 아직은 C90 기준으로 코딩을 하다보니
main() 함수에 return 이 없으면 뭔가 근질근질합니다.

방문객들의 관심을 끌고자 일부러 적당히 경고가 나는
코드를 넣어두었습니다. 지금은 입력 코드를 수집하지 않지만,
수집했던 예전 페이지에서는 경고난 예제를 조금씩 고쳐보시는
분들이 많더라구요. ㅋ

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

zizim009의 이미지

예전에 친구 숙제해준다꼬 전웅님 책(뭔 펀더멘탈이었던데...)을 보면서 이런 개발자도 있구나 하는 생각을...
프로젝트가 잘 마무리되기 바랍니다.

전웅의 이미지

C 언어 펀더멘탈 말씀이시죠? 벌써 10년이 넘은 책이네요.
그것도 개정판 내야 하는데, 벌려 놓은 일은 많고 수습은 못해서...

감사합니다. 절름발이 말도 쉬지 않고 걸으면 천리를 갈 수 있겠죠.
꾸준히 진행해서 잘 마무리 지어야겠습니다. ^^

--
Jun, Woong (woong at gmail.com)
http://www.woong.org