일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 벤치마크
- Reflection
- mf642cdw
- Griffiths
- Go 언어
- 체리적축저소음
- 바로코
- Go
- Golang
- 양자역학
- 터미널
- 스플릿키보드
- 이맥스
- mopria
- 건프라
- nil
- eslip
- 패널라인
- doom-emacs
- mistel md600 alpha
- driverless
- 키보드
- emacs
- md600alpha
- go언어
- 음각몰드
- 엘리스배열
- 다이어트
- 고양이책
- 리플렉션
- Today
- Total
목록컴퓨터 (32)
Meandering Trajectory
BMT 즉 BenchMark Test는 업계에서 흔히 자주 언급되는 용어다. 제품 선정 전에 성능 검증을 위해 종종 수행되는데 수행하는 과정이 고통스러워 되도록이면 피하고 싶은 작업이다. 하지만 일과 관계없는 벤치마크는 항상 흥미진진하다. 다양한 언어에 대해 성능 테스트 결과가 올라와 있는 사이트가 있다. Computer Language Benchmarks Game이라는 사이트인데 Go를 한창 배우고 Go 코드도 많이 읽고 있는 터라 이 사이트를 살펴봤다. Go도 GC를 가진 언어고 Java도 GC를 가진 언어이니 이 둘을 비교하는 것이 재미있을 것 같아 이 둘을 비교한 페이지를 클릭한 순간, 이럴수가… Go의 상태가 이게… binary-trees source secs mem gz cpu cpu load..
09-go-chan.html Go에 대한 인상 Go 언어는 처음에 걸었던 기대와 달리 약간 실망스럽다. 문법이 난잡하게 느껴지고 그래서 Go 언어로 작성된 프로그램도 지져분하게 느끼진다. 혁신적으로 보이는 특징도 별로 안 보인다. 21세기에 설계된 언어로 작성된 프로그램에서 세그멘테이션 폴트 에러를 보는 것도 별로 유쾌하지 않고 말이지.하지만 한가지 맘에 드는 것이 있다. 그것은 Go 루틴과 채널이다. 이 둘을 빼면 Go는 그냥 그저 그런 명령형 언어였을 것이다. 이번 포스팅에서는 채널에 대해 간략히 살펴보려고 한다. Go 루틴과 채널 C와 같은 전통적인 프로그래밍 언어에서 쓰이던 스레드 대신, Go 언어는 동시성 프로그램밍을 위해 Go 루틴이라는 특이한 기능을 제공한다. Go 루틴을 이용해 작성된 프로..
이맥스?이맥스는 아주 역사가 깊은 편집기다. 이맥스가 최초로 세상에 등장한 것은 1976년으로 자그마치 41년 전이다. 당시에는 소수의 사람들만 사용하던 편집기 였다. 이맥스가 인기를 얻고 많은 프로그래머들에게 쓰이게 된 결정적 계기는 1985년 리처드 스톨먼의 그누 이맥스(GNU Emacs)가 나온 이후다. 이맥스는 기본적으로 이맥스의 편집기 UI와 이맥스 리스프 인터프리터(Emacs lisp interpreter)가 결합된 편집기다. 이맥스 리스프(줄여서 elisp)는 리스프 언어의 변종으로 이맥스에서 돌아가는 대부분의 기능은 elisp로 작성돼 있다. 이맥스가 그 수많은 세월을 사라지지 않고 대처할 수 있었던 것은 편집기라기 보다는 작은 운영체제에 가까운 이런 유연한 구조 때문이다.이맥스와 나난 C..
비공개 저장소를 무료로 쓸 수 있다는 장점 때문에 얼마전부터 Emacs 설정 파일이나 bashrc 같은 것들을 저장할 목적으로 빗버킷(https://bitbucket.org)에 개인 계정을 만들어 쓰고 있다. 비공개 저장소이니 접근할 때마다 인증과정이 필요하고 기본 인증은 (당연히) 함호기반이다. 매번 함호를 입력해야 한다는 것은 여간 귀찮은 일이 아닐 수 없다.물론 암호를 입력하지 않고 인증을 할 수 있는 방법이 있다. 바로 ssh 키를 통해 인증하는 것인데 그 방법이 아래 페이지에 잘 설명돼 있다.https://confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html짧게 요약하자면 다음 과정을 거쳐 ssh 키 기반 인증을 할 수 있다...
이전 포스팅에서 리플렉션에 대한 아주 간략한 설명을 했다. 이번 글에서는 간단한 예제 코드를 통해 리플렉션이 어떻게 유용한지 알아보도록 하자. 1 import "reflect" 2 3 var methodMap map[string]reflect.Method 4 5 func initMethodMap(i interface{}) { 6 methodMap = make(map[string]reflect.Method) 7 8 t := reflect.TypeOf(i) 9 for idx := 0; idx < t.NumMethod(); idx++ { 10 m := t.Method(idx) 11 methodMap[m.Name] = m 12 } 13 }initMethodMap 함수는 임의의 구조체 변수를 입력 파라미터로 받은..
앞서 포스팅한 글에서 언급한 스캇 마이어스의 강연을 방금 다 봤다. 상당히 재미있다.강연 링크: Things that Matter - Scott Meyers | DConf2017 소프트웨어 개발에 있어서 중요한 원칙은 무엇인지 그런 원칙을 지키기 위해 어떤 노력을 해야 하는지 등을 다룬다. 언급된 중요한 원칙(혹은 요소)는 다음과 같다.Speed / EfficiencyPortabilityToolabilityConsistencyInterfaces 강연 내용 자체도 재미있지만 중간중간에 웃기는 장면들이 좀 있다.Toolability 파트를 보면 C++에서 f(x)라는 expression에 들어있는 f가 매우 다양한 대상이 될 수 있고(의미가 모호하다는 얘기) 이런 문제 때문에 리팩토링 툴을 만들기가 어렵다는..
난 오랫동안 프로그래밍 언어(Programming Language, PL) 애호가로 살았었다. 그시절 배웠거나 배우려고 시도했던 언어들의 목록을 나열해 보자면:애플II 베이직, GW 베이직CC++FortranAssemblyJavaCommon LispSchemeC#PerlPythonTclPHPHaskellMatlabSQLPL/SQL...도대체 왜 그랬냐구? 그냥 프로그래밍 언어 배우는 것이 재미있었다.그런데 이중에서 자신있게 배웠다고 말할 수 있는 언어는 C 뿐이다. 왜냐하면 다른 언어들로는 짠 코드가 아예 없거나 있더라도 몇줄 안 되기 때문이다.최근 회사를 옮기기 전까지 5년 넘는 시간 동안 프로그래밍 언어 배우는 일에서 완전히 손을 뗐기 때문에 그나마 알고 있던 문법도 거의 다 잊은 상태다. 그러니까 ..
리플렉션(reflection)의 사전적 의미는 '반사'다.컴퓨터 프로그래머에게 리플렉션은 이런 사전적 의미 외에 다른 의미가 하나 더 있다. 그들 업계에서 통용되는 리플렉션은 프로그램이 실행 중에 프로그램에 포함된 타입과 메서드에 대한 정보를 조회하고 이렇게 얻은 정보를 바탕으로 메서드 실행까지도 할 수 있도록 해주는 기능이다.사람이 자신의 얼굴을 잘 보려면 거울에 비춰(reflection)봐야 한다. 그런데 프로그램이 스스로에 대한 정보를 실행 중에 알아네는 행동 역시 거울에 비춰보는 행위와 유사하다고 볼 수 있으니 그야말로 적절한 용어선택이다.이렇게 아는 척을 했지만 내가 업계적 의미의 리플렉션을 알게 된 것은 사실은 불과 며칠 전이다. 예기인 즉슨 Go로 된 오픈소스 소프트웨어의 코드를 읽다가 뭔가..
Go 언어를 배운지 얼마 안 돼서 무언가를 말하기는 조심스럽지만... 몇몇 장단점이 눈에 띈다.Go 루틴이라든지 채널 같은 동시성 프로그래밍 언어를 위한 기능들은 신선하다. 그리고 네이티브 바이너리로 컴파일되는 언어치고는 방대한 양의 라이브러리를 제공한다는 점 역시 좋아 보인다. 반면 너져분하게 느껴지는 문법이라든지 import한 패키지의 코드가 모두 실행 파일에 포함되어 실행파일 크기가 지나치게 커진다든지 하는 문제는 실망스럽다.그러던 와중에 Go 언어로 작성한 프로그램의 성능이 어떨지 궁급해서 좀 찾아봤다. 공정한 비교(?)를 위해 Garbage Collection (GC)을 이용하는 Java와 비교한 벤치마크를 살펴봤다. 놀랍게도 네이티브 코드로 컴파일되는 언어임에도 결과는 그리 신통치 못하다.벤치..
코딩으로 먹고 살기 시작한 이후로 난 항상 시스템 프로그래머였다. 제대로 사용할 수 있는 언어는 C 뿐이고 Emacs와 Vim으로 코딩을 했다. 디버깅은 gdb나 dbx를 이용했고 빌드에는 Make나 Jam을 이용해왔다. 내가 이런 도구들을 이용해 buffer cache나 IO 관련 버그를 디버깅하며 허우적데는 동안 세상은 너무나 많이 변했다. 가장 큰 사건은 자바스크립트의 폭발적인 발전이 아닐까. 내가 자바 스크립트에 대해 처음 알았을 때만 해도 여러 문제들 때문에 이 언어는 천덕꾸러기 취급을 받고는 했었다. 그러나 AJAX가 끝내주는니 어쩌느니 하는 말이 나오더니... 크롬 V8 JavaScript Engine이 나오면서 실행 성능이 진일보했다는 말이 들려왔다. 최근에는 Node.js가 나오면서 자바..