Boost 얼마나 사용하시나요?

ifree의 이미지

이번에 Houdini 라는 3D 툴을 이용해서 프로덕션에서 필요한 효과들을 만들게 되었습니다.
개인적으로는 Boost 라이브러리를 적극적으로 활용하고 가능하면 MPL 까지 써보고 싶었는데, 같이 일하게 될 분이 난색을 표해서 무산될 상황에 처했습니다.
C++0x 에도 일부 들어갈 정도로 실용성은 검증이 되었다고 생각하는데 실제로 쓰시는 분은 별로 없는 것 같군요.
혹시 Boost 를 이용해 성공적인 작업을 하신 경험을 말씀해 주시면 제 파트너를 설득하는데 도움이 될 것 같습니다.

antaran의 이미지

제 주위가 허접해서(?)인지는 몰라도 알고 계시는 분은 몇 분 보았으나

실제로 업무나 프로젝트에 사용하는 경우는 보질 못했습니다. ㅠ.ㅠ

도움이 못 되었네요. 다른분께 토스~~

김정균의 이미지

Billing gateway 쪽에 사용하고 있는데, 코드 관리 하시는 분이 관리하기가 버겁다고 이번에 빼려고 하고 계시더군요. 참고로 빼려고 하시는 분은, 인수인계를 받으신 분입니다. :-) Boost reference가 별로 좋지를 못한 모양이든지, 또는 버전별 conflict가 심하다든지.. 등의 이유일 것 같습니다.

yielding의 이미지

멀티 플랫폼을지원하는 미들웨어 개발에 사용해보았는데, POSIX(osx, freebsd), win32에서 컴파일되고 성능도 아주 만족 스럽습니다.
boost에서 지원하지 않는 platform dependent한 코드도 자연스럽게 boost style로 adaptation layer를 만들게 되더군요. 가능한 여러 카테고리의 라이브러리를 사용해보려고 합니다.
* bind/lambda, function,
* thread, asio
* multi_index container
* spirit2, phoenix2
* smart pointers(shared/scoped..)
* date_time, filesystem 등등이 주로 사용하는 라이브러리입니다.

boost mpl의 경우는 라이브러리 프로그래머가 사용하기에 더 없이 좋긴 하겠지만(라이브러리 프로그래머를 위한 라이브러리 일겁니다. fusion도 그렇고..), 응용프로그램 코드에 이리 저리 섞어쓰는 것은 바람직스럽지 않을 듯 합니다(협업에 도움이 되지 않을듯.)

boost library의 문제라면 c++에 아주 익숙해야 하고 협업하는 사람역시 boot에 열정이 있어야 합니다. 징그러울 정도로 느린 컴파일 타임을 참을 수도 있어야 하고요.
컴파일 기다리면서 "내가 간단하게 갈 수 있는 길을 삽질하고 있는게 아닌가? 이 프로그램은 윈도우즈에서만 작동해도 되는데.." 이런 생각을 많이 하게 됩니다.

여담으로.. boost의 단점을 보안하기 위해 생각한 대안이 있는데 요즘은(흐 요즘은 프로그램 안하고 있군요..) 루비 인터프리터를 c++에 임베딩해서 말랑말랑한 부분과 속도가 필요한 부분을 섞어서 프로그램하는겁니다.. 루비의 테스트 프레임워크로 boost 코드를 테스트하고, threading, networking, 정교한 메모리 관리는 boost로 하고... 속도와 생산성의 균형을 조절하면서 재밋게 프로그램할 수 있습니다.(넘어야할 산이 좀 있긴 하지만..)

Life rushes on, we are distracted

Life rushes on, we are distracted

kaeri17의 이미지

A*알고리즘으로 길찾기 하고, 그걸 Ogre3D로 보여주는 건데요, Boost graph많이 썻습니다. 또한 Ogre3D안에 smart point가 있는데 이름이 Ogre::shared_ptr입니다. boost에서 가져온것 같더군요 ㅎㅎ. STL쓸때도 조금 모자란 부분을 Boost lambda같은걸로 채울수도 있고요, 하여간 좋은 기능이 많은것 같습니다.

근데 저도 쓰는 사람은 별로 보지는 못했네요..

philnet의 이미지

디지털 방송 수신기 및 녹화기 제품을 개발하고 있는데, 요즘 나오는 DTV 나 멀티미이더 chip들의 경우, HW 사양도 높고, 칩 업체에서 제공하는 g++ compiler 버전도 높아서 STL이나 boost를 사용하는데, 그 자체로는 아무런 문제가 없습니다.

현재 저희 프로젝트에서 사용하는 boost library들은, 다음과 같습니다.
* smart pointers (shared/scoped..)
* function, signal, bind
* thread
* datetime

사실 embedded system에서, 규모가 어느 정도 되는(3, 4인 이상?)의 소프트웨어 개발 프로젝트에서, 어떤 이유로 인해 특정 C++ 프레임워크가 강요(?)되지 않는 이상, 주 개발 언어를 C++ 로 하는 경우 자체가 찾기 보기 힘듭니다. 더군다나 STL이나 boost 같은 template 기반의 라이브러리들은, 개발자들이 어느 정도 비슷한 수준으로 숙련되지 않으면 협업하는데 어려울 수 있기 때문에, 실제로 도입이 더더욱 쉽지 않습니다.

저희 프로젝트에서는, 저를 포함한 팀의 주요(?) 멤버가, 기존에 C++로 작업해 놓은 것을 기반으로 개발하게 되어서, 미들웨어부터 애플리케이션까지 대부분의 코드를 C++로 개발 중입니다. 그리고 새로운 것을 배우는 것에 대해, 특별히 거부감이 없는 개발자들이라면, 수준 차이가 있긴 하지만, 1 ~ 2달 정도면 대충 적응해서 일을 시작할 수 있는 단계는 도달할 수 있었던 것 같고, 경험 많은 사람들이 pair programming을 어느 정도 해 주면 좀더 빨리 기존 멤버들과 편하게 협업할 수 있었던 것 같습니다.

사실 STL의 container나 boost의 라이브러리들의 기초적인 사용은, C++ 에 대한 어느 정도 지식과 경험만 있으면 큰 어려움 없이 쓸 수 있을 겁니다. 다만, 일정이 촉박하다거나, 팀 내에서 이런 내용을 잘 알고 리드할 수 있는 사람이 없다면... 음, 쉽지 않을 수도 있겠네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.