개발/Developing

Compiler Explorer

lazykuna 2022. 3. 5. 01:01

Compiler Explorer

오늘도 하릴없이 인터넷을 하다가... 우연히 재미있는 물건을 봤다. 바로 Compiler Explorer이라는 것이다.

주소는 https://godbolt.org 이고, 하는 일은 간단하다. 코드를 입력하면 해당 코드의 어셈블리를 바로 보여준다.

이런 느낌으로다가..

지원하는 언어와 컴파일러가 굉장히 많다. 글 작성 시점 기준으로, 지원 언어의 경우에는 아래와 같다.

  • Ada
  • Analysis
  • Assembly
  • C
  • C#
  • C++
  • C++ (Circle)
  • C++ for OpenCL
  • Clean
  • Cppx
  • Cppx-Blue
  • Cppx-Gold
  • Crystal
  • CUDA C++
  • D
  • Dart
  • Erlang
  • F#
  • Fortran
  • Go
  • Haskell
  • ispc
  • Java
  • Kotlin
  • LLVM IR
  • Nim
  • OCaml
  • OpenCL C
  • Pascal
  • Python
  • Ruby
  • Rust
  • Scala
  • Swift
  • Visual Basic
  • Zig

C 기준으로 지원하는 컴파일러는 버전별로 어지간하면 다 있다고 보면 된다. Gcc/Clang은 물론이고, 버전별로 4.x대부터 11.x 대까지 있으며, MSVC도 있고, 플랫폼별 코드도 만들어준다. 심지어 Gcc(WinCE) 까지!

그렇게 중요한 건 아니지만 에디터로서의 기능도 이것저것 제공하고 있어 꽤 쓰기도 좋다.

일일이 다 설치하고 테스트한답시고 로컬에 삽질해대는 고생도 덜 수 있고, 고도로 추상화된 stl과 같은 라이브러리가 효율적인 코드를 만들어내는지와 같은 것도 확인할 수 있고, 이모저모 삽질 좋아하는 사람들에게는 아주 좋은 사이트다.

또 재미있는 건, 내부 구조에 대한 정리글이 있다. How it works: Compiler Explorer 글을 읽어보면,

  • Load balancer + EC2 조합으로 수행되는 서비스.
  • EC2 인스턴스에서는 Ubuntu + Docker + a 기반의 AMI (Amazon machine instance image) 이미지로 구동이 된다.
  • 여기서 Docker 기반의 장단점을 이야기하는데, Dockerfile 관리의 미묘한 어려움, 그리고 large image 사이즈를 단점으로 꼽고 있다... 그런데 build machine에서 large image는 어쩔 수 없이 감내해야 하는 요소 아닌감..?
  • 모든 작업을 자동화시켜놓았기 때문에, Deploy는 단순히 새 instance를 띄우고 기존 instance down하면 끝나는 방식이라고 한다.
  • (인프라 세팅을 포함한) 작업 내역은 Github에 정리해 놓았으니 필요하다면 참고하면 큰 도움이 될 듯.