ADT vs Data Structure

요즘 자료구조와 알고리즘을 다시 공부하고 있다. 남들에게 쉽게 설명하기 위해 내 스스로 개념을 정리하고, 스터디에 참여하는 서로가 서로를 위한 질문 리스트를 만들어오기로 했기에 조금 더 깊게 생각하던 중 헷갈릴 수 있는 부분을 발견했다. 그걸 이 포스팅에서 한 번 짚고 넘어가볼까 한다. 통상적인 자료구조의 목차는 다음과 같다. (윤성우의 열혈 자료구조를 참고) 자료구조 + ADT 연결 리스트 […]

Bootstraping

수요일에 Programming Language 과목의 중간고사를 준비하면서 열심히 공부한 부트스트래핑이 시험에 나오지 않았기 때문에, 공부한 게 아까워 정리해서 올려봅니다. T-Diagram T-Diagram은 간단한 표기법입니다. Python으로 짜여진 Sort 프로그램, x86 위에서 돌아가는 Python 인터프리터, 그리고 x86 자체를 T-Diagram에서는 위와 같이 표기합니다. 인터프리터를 봤으니 컴파일러도 봐야겠죠? x86에서 C 코드를 x86 어셈블리로 바꿔주는 컴파일러는 위와 같이 표기합니다. x86에서 C 코드를 […]

Introduction to LLVM (3)

12. Static Single Assignment (SSA) Form 어디서 어떤 변수가 선언/사용되고 있는지 추척하는 것이 최적화의 주된 질문 중 하나. 위와 같은 상황에서는 if를 전후로 x의 역할이 바뀐다. Line 1의 x와 Line 7의 x는 전혀 연관이 없다. 이런 경우에는 두 변수를 구분해줘야 LLVM이 변수의 선언/사용을 추적하는 게 더 쉽지 않을까? 극단적인 상황을 가정해보자. 하나의 int 변수로 서로 […]

Introduction to LLVM (1)

이번 학기에 고급 컴파일러 설계를 수강했습니다. 물론, 대학원 수업이기 때문에 형식적으로 “고급”이 붙었을 뿐이라 정말 완벽하게 고급진 내용은 아니였지만 LLVM의 구조, 철학, 사용하고 있는 이론적 배경 등을 배우는 수업이였기에 LLVM 소개글 정도로 포스팅의 목적을 정했어요. 수업에서 배운 내용을, 그리고 교수님이 내주셨던 과제와 개인이 제안해서 진행했던 과제들을 수행하면서 겪었던 시행착오들을 정리해 봅니다. 대부분의 내용은 Bernd Burgstaller […]

새로운 언어를 공부하는 방법

예전에 JAVA에서 JavaScript로 넘어갈 때도 느꼈지만 나에게 있어서 새로운 언어를 공부하는 가장 좋은 방법은 대충 여러 번 읽기인 것 같다. 이 방법은 특히 프로그래밍과 같은 이론보다는 실제에의 적용이 더 중요한 부분에서 큰 효과를 불러오는 것 같은데, 우리 아버지 세대의 표현으로는 선암기-후이해와 조금 비슷하다고 할 수 있겠다. 일단 하나의 주 언어가 생기고 난 후라면 실제 메모리 […]