팀에서 매 주 한 번씩, (회사 일 이외에) 자기가 관심 갖는 주제에 대해 발표하는 시간을 가지고 있다.
그리고 그 시간에 먹을 피자 대금에 대한 사다리 타기 대결도(…)
나는 이 시간에 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 으로 프로그램 선택이 바뀌면 스페이스 바뀌니 어찌 되긴 하더라.
좋은정보 공유해 주셔서 고맙습니다.
두어달쯤 전에 Go를 한번 배워볼까 하고 살짝 봤는데,
관련 라이브러리나 관련툴등 아직 부족한게 많은거 같아서 숙성되길 기다리고 있습니다…^^;
이거 혹시 읽어보셨는지 모르겠는데, 이것도 재밌더군요. :)
http://www.cowlark.com/2009-11-15-go/
저 글은 Go 나온 거의 직후(한 일주일?)에 읽어본 것 같네요. 근데 내용이 너무 문법적인데 치중해 있고, 실제로 Go란 언어가 가질 수 있는 가치(concurrency, build-time) 같은데에는 주목을 안해서 약간 김샌(?)느낌이었습니다 ~_~
네, 단순 흥미 위주로 쓴거 같습니다.
아직 깊게 들어갈 생각은 없고, 그냥 문법이나 기본적인 특성만
간단하게 살펴보고 싶었기 때문이었는지 나름대로 재밌더군요. :)
rein님께서 본문에 거론하신 문제들 좀 해결되면
그때 한번 공부해봐야 겠습니다.
저도 아직 겉핡기 레벨이지만(…), 일단 몇 가지 문제만 해결되면 현업에서도 좀 써보고 싶네요;
저는 일단 앞으로 k 달 간은 틈틈이 보면서 정리해 올릴 예정이니 가끔 와주세요 ~_~
오오!!! 기대 됩니다. :)
그동안 주로 비교적 사용이 쉬운 Java 위주로 사용해서
다른걸 공부해 보고 싶었는데, C++은 하려면 제대로 해야지
곁다리로 하긴 그렇고, “Python을 공부해 볼까?”,
“예전에 공부했던 Haskell을 다시 해볼까?” 하고 있었는데,
이제 rein님 덕에 Go 좀 공부할수 있겠네요. 고맙습니다. :)
너무 기대하시면 부담되서 못 올려요(…)