Pages

Sunday, September 23, 2012

Performance of an application - it’s not the tool, but the person

Frankly speaking, I was still benchmarking Qt and Lazarus on making my application with Qt, and yesterday I concluded. It was not the tool or language itself, but the users’ capabilities which determines the performance of an application. Whether it be Pascal or C++, LCL or Qt, if the programmer generates spaghetti code, the application SHALL SURELY slow down. In my recent benchmarks, if I use only the same routine and algorithms, time elapsed was always the same between two environments by 1/1000 seconds. So, anyway the problem is pilot, whether the personal trooper be Gespenst or Alteisen(?).

So finally I chose Object-Pascal based Lazarus. Though I have used Qt in my development, as I continue my benchmark with the hope in Pascal language, I could assure myself if the programmer has enough capabilities then tools are just ‘tools.’ Of course I’m a huge fan, or Otaku(….. :P) of Pascal language. Though it does not have features as rich as Qt does, which is overwhelming, I can easily and more simply implement those features, and the my performance of implementation was similar to that in Qt. So I’m going with Lazarus, which is surely my best partner.

But I don’t want to say that Qt is poor. It’s still great library. Personally, the structure of Qt is the most beautiful after Delphi VCL. But restrictions in 3rd party libraries due to the structure of the library itself as well as its unique preprocessing represented by moc makes me hesitate to choose the environment as my favorite. And debugging is yet another problem - Now I encountered memory leak, and I don’t see any solution with features provided by QString. When I load a data of a few hundred megabytes into RAM, in 32bit environment application hangs with “out of memory” error. I’d like to do manual garbage collection, but the memory manager Qt uses didn’t allow me to do that. It’s like a bit unfit clothes to me.

So, I planned to start rebuilding the application by making some libraries for features not implemented in base library, but now I become lazy and tired….. I don’t want to do anything right now. Baaaaaaah. -o-

Would there be anything that excites my passion?

프로그램의 성능, 문제는 도구가 아니라 사람

그동안 프로그램을 짜면서 Qt와 Lazarus의 성능을 계속 벤치마킹하고 있었는데, 어제 최종적으로 결론을 내렸습니다. 결론인즉 프로그램의 성능을 좌우하는건 도구나 언어가 아니라 그걸 쓰는 사람의 역량이더군요. 파스칼이든 C++이든, LCL이든 Qt든 간에 쓰는 사람이 프로그램을 베베 꼬아놓으면 결국 프로그램도 버벅대게 마련이더군요. 이번에 완전히 같은 루틴을 쓰면서 테스트해보니 결과값이 양쪽 모두 1/1000초까지도 거의 동일하게 나왔습니다. 결국 게슈펜스트나 알트아이젠이나 문제는 파일럿이에요(응?).

그래서 저는 그냥 Object Pascal 기반의 Lazarus로 가기로 했습니다. 그동안 계속 Qt로 개발을 수행했지만, 파스칼에 대한 일말의 희망을 놓지 않고 꾸준히 벤치마킹한 결과 프로그래머가 능력이 되면 도구는 말 그대로 도구일 뿐이더군요. 물론 제 자신이 파스칼을 좀 심하게 사랑하는 파스칼빠(….. :P)이기도 하죠. 비록 Qt처럼 말이 안 나올 정도로 풍부한 기능을 제공하지는 않지만, 그런 기능을 훨씬 더 간단하게 구현할 수 있을 뿐더러, 구현 후 속력이 Qt의 속력과 거의 비슷하다는 것을 고려한다면 제게 최적의 개발도구는 Lazarus인 것 같습니다.

Qt는 매우 훌륭한 라이브러리입니다. 개인적으로는 Delphi의 VCL 이후 가장 아름다운 hierarchy라고 생각합니다만, moc으로 대표되는 Qt만의 preprocessing과 기타 구조적인 문제로 인해 3rd party library의 사용에 제약이 발생하는 경우가 있습니다. 그리고 디버깅도 어렵습니다 - 지금 만드는 프로그램도 memory leak이 발생하는데, QString에서 제공되는 함수들로는 이런 문제를 해결할 수 있는 방법이 보이지 않습니다. 수백 MB에 이르는 데이터를 통채로 메모리에 올려서 작업하다보면 32bit에서는 얼마 안 되어 바로 메모리 부족으로 프로그램이 터져버리더군요(…..). 가능하면 메모리 관리자로 바로 접근해서 garbage collection을 수동으로 수행하고 싶은데, Qt는 메모리 관리를 자체적으로 따로 수행하는지라 이것도 실질적으로는 불가능하고….. 좀 답답하더군요.

해서 오늘부터 부족한 기능부터 라이브러리로 만들고 슬슬 작업을 시작해볼까 했는데….. 의욕이 안 섭니다. 귀찮아요. 모든게 다 귀찮아요. 으어어. -o-

어디 의욕과 투지가 끓어오르게 할만한 뭔가가 없을까요.