Go언어에 짙게 배인 Pascal 향기.

프로그래밍 2018. 5. 16. 11:04 Posted by 정직한 UnHa Kim

GUI 개발을 간편하게 할 수 있는 방안을 알아보던 중,

무료 Delphi 대체재 'Free Pascal + Lazarus'를 알게 되었다.


Object Pascal 언어 가이드를 구해서 읽어보니, Go언어 문법과 비슷한 부분이 너무나 많이 보인다.

Go언어가 Pascal의 영향을 아주 많이 받은 것이라고 추정된다.


기억에 남는 몇 가지만 예로 들면

1. 변수 선언 방식 :  <변수명>: <자료형>;    여기에서 ':', ';'만 빼면 Go자료형 선언과 같아진다.

2. 변수 대입 : ':=', Go언어에서 변수 생성 및 대입을 겸하는 연산자와 같은 모양.

3. 정적 배열 : 정적 배열의 길이별로 독립된 자료형이라는 점이 동일하다.

4. 동적 배열 : 정적 배열과 별개로 동적 배열 (Go언어는 slice라고 부른다.)이 존재하는 점이 동일.


기타, 여러가지 면에서 Pascal언어 책을 보고 있는 것인지, Go언어 책을 보고 있는 것인지 헷갈릴 정도로 익숙한 점이 많았다.


Go언어에 익숙해 지고 나니, 'Free Pascal + Lazarus'에 대한 친근감과 호감도가 급상승한다.

댓글을 달아 주세요

Go 1.10 컴파일 속도 개선.

프로그래밍 2017. 12. 21. 12:47 Posted by 정직한 UnHa Kim

Go언어 공식 웹사이트에 1.10 베타 버전이 업로드 되었다.

이번 버전 역시 개인적인 최대 관심사는 Go언어 컴파일러가

버전 1.4까지 C언어로 작성되었다가

버전 1.5부터 Go언어로 변경되면서 느려진 컴파일 속도가

얼마나 다시 빨라질 것인가 이었다.


애초에 Go언어를 선택한 중요한 이유 중 하나가

엄청나게 빠른 컴파일 속도 덕분에 인터프리터 언어 못지 않은 작업 생산성이 나온다는 것이었고,

버전 1.5 이후 2배 가까이 느려진 컴파일 속도와 더불어서

프로젝트에서 사용하는 외부 라이브러리도 많아지면서

컴파일 시간이 늘어나면서 작업 생산성이 떨어졌기 때문이었다.


1.10 버전에서 가장 큰 개선점은 빌드 캐쉬로 인한 컴파일 속도 개선이다.

의존성 라이브러리를 비롯한 모든 소스코드는 컴파일 결과가 캐쉬(임시 저장)되며,

파일 수정날짜에 상관없이 오직 내용 변경여부 만으로 재컴파일 여부를 결정한다.


1번째 컴파일은 여전히 느리지만,

2번째 컴파일부터는 변경된 소스코드만 컴파일 하므로,

컴파일 작업량이 대폭 줄어들면서 속도가 확연하게 빨라진다.


대개 인간의 집중력 유지 시간은 15초를 넘기지 못한다.

여러 단점에도 불구하고 인터프리터 언어가 높은 생산성을 보여주는 이유는

컴파일 과정이 존재하지 않으므로,

'수정-실행' 작업 루틴 중 집중력이 유지되는 이유가 크다.


예전에는 소스코드 수정 후 테스트 실행하면 10초 넘게 빌드되기를 기다려야 되다보니,

집중력이 떨어지고, 작업 흐름이 끊기는 게 느껴졌지만,

1.10부터는 빌드 타임이 짧아지면서 그 정도가 낮아졌다.

즉, 집중력이 유지되면서 작업 흐름이 끊기지 않고 계속 이어진다.


높아진 작업 생산성을 체감하면서 이 글을 쓰고 있다.

드디어 마지막 C언어로 작성되었던 Go 언어 버전 1.4를 떠나보낼 수 있게 되었다.


댓글을 달아 주세요

Learning DCOM

책 리뷰 2017. 8. 31. 14:20 Posted by 정직한 UnHa Kim

https://www.amazon.com/Learning-DCOM-Thuan-L-Thai-ebook/dp/B005011IR8

 

 


COM : Component Object Model


C언어의 한계를 느낀 MS가 C++언어로 옮겨갈려고 할 때, 

C++ 모듈 간에 호출 표준이 없어서 상호 호환성이 떨어지는 문제가 있었고,

이를 해결하려고 만든 호출 표준이 COM이다.

RPC에 Component개념을 입혀서 만든 것 아닌가 싶다.

COM을 이용하면 MS윈도우 내에서는 프로그래밍 언어에 무관하게 상호 호출이 가능해진다.

 

리눅스에서는 COM과 같은 호출 표준이 없어서,

- SWIG과 같은 래퍼 자동 생성기

- DBUS 같은 IPC

- 컴파일러마다 호출 방식이 제각각인 C++을 배제하고, 호출 표준이 정해진 C언어로 구현.

등의 방법으로 해결하고 있으며,

C++의 호출 표준이 없는 문제를 해결한 윈도우에서는 C언어가 박물관에 들어간 언어로 취급되지만,

해당 문제를 아직도 해결하지 못한 리눅스에서는 여전히 C언어가 C++보다 더 많이 사용되는 데 일정부분 영향을 끼친 것으로 보인다.


 

그간 증권사 API를 DLL방식으로만 사용했으나,

키움증권등 최근 API들은 COM방식으로'만' 제공되는 경향이 있고,

Xing API는 DLL방식 이외에 COM방식도 지원하기에

COM에 대한 배경지식을 습득할 필요가 있을 듯 하여 구입한 서적이다.


아마존의 독자 리뷰에서 좋은 평가를 받았길래 믿고 구입했다. 


DCOM은 COM의 분산형 버전이지만, 

결국에는 COM에 기반을 두고 있기 때문에, 

DCOM서적임에도 불구하고 COM에 대한 내용이 상당히 잘 되어 있다.


이 책을 읽고 나면, 

예전에는 암호문 같아보이던 go-ole 예제 소스코드가 술술 읽어지는 마법을 경험했다.

 

기본 지식을 익힌 상태에서 다음 링크의 글을 추가로 읽으니 쉽게 읽어진다.

https://www.codeproject.com/Articles/13601/COM-in-plain-C


추가>

COM 이벤트 처리는 결국 C++을 통해서 처리하는 방식을 사용해야만 했다.

https://www.codeproject.com/Articles/338268/COM-in-C


다음 링크의 event_handler.cpp, event_handler.hpp, event_handler.h 파일을 참고.

https://github.com/ghts/xing_COM32 



'책 리뷰' 카테고리의 다른 글

할 수 있다! 퀀트 투자  (0) 2019.08.28
R for Data Science  (0) 2019.07.30
월스트리트 퀀트 투자의 법칙  (0) 2019.07.27
Wicket in Action  (0) 2018.06.07
Learning DCOM  (0) 2017.08.31
파이썬으로 배우는 알고리즘 트레이딩  (0) 2017.08.24

댓글을 달아 주세요