팀 세미나: Go Programming Language #1

팀에서 매 주 한 번씩, (회사 일 이외에) 자기가 관심 갖는 주제에 대해 발표하는 시간을 가지고 있다.
그리고 그 시간에 먹을 피자 대금에 대한 사다리 타기 대결도(…)

나는 이 시간에 Google 에서 만드는 오픈 소스 프로그래밍 언어인 Go 에 대해 하기로 했다. 요즘 심심풀이로 만지는 언어가 Go라서…

여기 그 때 썼던 자료를 게시한다. export를 잘못했는지 슬라이드 노트들은 없다(…).

Introduction to Go Programming Language

사용한지 기껏해야 한달 좀 넘었지만, 기본적인 구조는 C를 따르고, 여기에 몇 가지 제약을 가하고 기본 타입과 concurrency primitive 를 더해서, ((물론 GC도 제약이라면 제약이지만 추가사항으로 치자)) Erlang 비슷한 언어가 되었다는 느낌.

그래서 이런 느낌을 가지고 Go 가 가지는 강점과 약점이라고 생각되는걸 간단히 요약하자면,

  • 굉장히 빠른 시스템 빌드 시간 – 대부분의 의존성(type, import,…)을 명시적으로 해결하기 때문에 빌드가 정말 빠르다
  • 간단하고 어느 정도 duck-typing이 돼서 조작하기 쉽다
  • 메시지 패싱에 기반하는 병행/병렬 프로그래밍에 특화되어 있다 – Erlang 과 유사함
  • C 와 달리 내장 타입이 좀 더 다양하다
  • UTF-8 내장 + range() 문을 사용하면 문자열을 byte 단위와 문자 단위(variable-length)로 모두 순회하기 쉽다
  • 문자열은 상수고, 배열도 그냥 복사된다. 이건 Erlang 에 대해 내가 쓴 글에서도 말했듯이, 변하지 않는 데이터가 병렬성에선 정말 중요하다. ((물론 배열을 복사하지 않고, 배열 전체 혹은 일부를 참조하는 slice란 문법을 지원한다))

단점도 몇 가지,

  • 아직 툴 체인이 완성되지 않았다 – gccgo(gcc를 백엔드로 씀), 8g(x86 용), 6g(x64 용), 5g(arm 용) 등이 따로 논다. 특히 전자와 뒤의 3가지는 정말 따로 놈. 내장 기능의 수행방식도 약간 다른 수준이라.
  • 라이브러리가 아직 정말 빈약하다 –_-;
  • 툴 체인이 완성되지 않았다?랑 비슷한 얘기지만, 아직 충분히 최적화된 코드가 아닌 느낌. 몇몇 벤치 마크 결과가 그리 좋지 않다. (Java 보다도 느리다니…)

뭐 그래도 Erlang 보다는 많은 수의 (예비) 프로그래머가 있으니(C/C++/Java) 상대적으로 병렬 프로그래밍 작성할 때 쓰기엔 나은 듯도 하다. 다만 얼마나 빨리 성숙한 상태에 도달하느냐가 문제지만;

덧. (MacOSX 의) Exposé 의 Spaces를 이용해서 Keynote 프레젠테이션과 코드를 실행하는 터미널을 번갈아 가며 쓰려고 했다. 그런데 프레젠테이션 중엔 Ctrl + 화살표 ((Fn +인가? 손이 기억하는 거라 잘 모르겠다)) 로 다른 스페이스로 못 넘어 가더라. 그래도 Command + Tab 으로 프로그램 선택이 바뀌면 스페이스 바뀌니 어찌 되긴 하더라.

Jinuk Kim
Jinuk Kim

SW Engineer / gamer / bookworm / atheist / feminist

Articles: 935

6 Comments

  1. 좋은정보 공유해 주셔서 고맙습니다.
    두어달쯤 전에 Go를 한번 배워볼까 하고 살짝 봤는데,
    관련 라이브러리나 관련툴등 아직 부족한게 많은거 같아서 숙성되길 기다리고 있습니다…^^;

    이거 혹시 읽어보셨는지 모르겠는데, 이것도 재밌더군요. :)
    http://www.cowlark.com/2009-11-15-go/

    • 저 글은 Go 나온 거의 직후(한 일주일?)에 읽어본 것 같네요. 근데 내용이 너무 문법적인데 치중해 있고, 실제로 Go란 언어가 가질 수 있는 가치(concurrency, build-time) 같은데에는 주목을 안해서 약간 김샌(?)느낌이었습니다 ~_~

      • 네, 단순 흥미 위주로 쓴거 같습니다.
        아직 깊게 들어갈 생각은 없고, 그냥 문법이나 기본적인 특성만
        간단하게 살펴보고 싶었기 때문이었는지 나름대로 재밌더군요. :)
        rein님께서 본문에 거론하신 문제들 좀 해결되면
        그때 한번 공부해봐야 겠습니다.

        • 저도 아직 겉핡기 레벨이지만(…), 일단 몇 가지 문제만 해결되면 현업에서도 좀 써보고 싶네요;

          저는 일단 앞으로 k 달 간은 틈틈이 보면서 정리해 올릴 예정이니 가끔 와주세요 ~_~

          • 오오!!! 기대 됩니다. :)
            그동안 주로 비교적 사용이 쉬운 Java 위주로 사용해서
            다른걸 공부해 보고 싶었는데, C++은 하려면 제대로 해야지
            곁다리로 하긴 그렇고, “Python을 공부해 볼까?”,
            “예전에 공부했던 Haskell을 다시 해볼까?” 하고 있었는데,
            이제 rein님 덕에 Go 좀 공부할수 있겠네요. 고맙습니다. :)

Leave a Reply