Sunday, August 13, 2006

Boost to Python

前陣子費了番功夫評估可用於複雜網路模擬實驗的工具。這些實驗,除了圖論用得特別兇外;一些隨機抽樣的東西也會用上;此外,實驗數據,也要有工具幫忙繪製圖表。

我先後評估了 Java, C/C++, Pyhon 等開發環境,看看它們有哪些 Library 可用?這些 Library 的成熟度如何?架構優不優雅?說明文件完不完整?使用方不方便?

一開始,我評估了下列的 Graph Theory Library:

  1. Boost Graph Library, BGL (C++)
  2. Graph Template Library, GTL (C++)
  3. LEDA graphs (C++)
  4. The Standford GraphBase (C)
  5. JGraphT (Java)
  6. Java Universal Network/Graph Framework, JUNG (Java)
  7. Java Graph Editing Framework, GEF (Java)

上列中,個人較偏好 BGLJGraphT。這兩者我選擇了 BGL ,因為就這個應用,Java 的語法沒 C++ 優雅,執行效率不如 C++ ,且 Boost 擁有一整族質優、高效的 Libraries ,裝來玩玩是一定要的啦,更遑論令人激賞的 Boost.Random 也極切合這次需要。

選定了 Boost ,這就開始安裝 :)

在瞄幾眼安裝說明文件後,假如頭腦還維持一絲清醒,記得要把 Boost 裝到自己的 C++ 開發環境,必定會去拜拜 Google :

安裝步驟如下:

  1. 安裝 MinGW(也可以安裝 DevCppCodeBlocks ,它們有附 MinGW 的版本)。
    • 我的 MinGW 裝在 I:\LinuxOnWin\MinGW 目錄。
  2. 安裝 Python (非必要)
    • 我裝在 I:\Python24 目錄
  3. 下載 Boost Sources
  4. 下載含 Bjam 執行檔的壓縮檔。
  5. 解壓縮 Boost sources
    • 我解壓到 J:\ftp\develop\Boost\boost_1_33_1 目錄
  6. 把 Bjam 執行檔解壓縮到同一個目錄
  7. 執行一個 shell,例如 cmd
  8. 切換到 Boost sources 的目錄去,然後敲進
    bjam "-sMINGW_ROOT_DIRECTORY=I:\LinuxOnWin\MinGW" "-sTOOLS=mingw" "-sPYTHON_ROOT=I:\Python24" "-sPYTHON_VERSION= 2.4" --prefix=I:\Boost install

註:

  • 如果 MinGW 不是裝在 I:\LinuxOnWin\MinGW ,只要修改 MINGW_ROOT_DIRECTOR 參數即可;
  • 如果 Python 不是裝在 I:\Python24 ,也是改一下 PYTHON_ROOT 參數就好了;
  • 用不到 Python 的,只要把 "-sPYTHON_ROOT=I:\Python24" 和 "-sPYTHON_VERSION= 2.4" 拿掉就好了;
  • --prefix=I:\Boost 是編譯好的 Boost 安裝的位置,這個例子是放在 I:\Boost
  • 其他設定可以參考這裡

裝好後,可以到 A Quick Tour of the Boost Graph Library 剪貼一些例子來玩玩。

補充說明:

  • Compiling 選項要加上 Boost include 檔的搜尋路徑,例如 -II:\Boost\include\boost-1_33_1
  • Linking 選項要加上 Boost lib 檔的搜尋路徑,如 -LI:\Boost\lib

在時空兩個方面,C++ 都是高效率的語言,藉著豐富的語言元素和通透的延展性,C++ 可用來表述形形色色的軟體系統,且 Boost 的架構也很優雅。

另一方面,就「作實驗」而言, C++ 稱不上合適的工具。我們要能更快、更方便、更隨性地撰寫、修改程式,要能更動態地控制程式流程。評估後,最後我選擇了 Python ,它是很好的膠合(glue)語言,可以很方便將各個語言撰寫的程式沾粘起來。

令人激賞地, Boost 也提供了 Boost.Python 介面,BGL 也有專門的 Python Bindings

Tags: [] [] [] [] [] []

0 comments: