2009-02-23 35 views
26

Tôi đã duyệt bản sửa đổi 1.38.0 của thư viện Boost, trong một nỗ lực để quyết định xem có đủ đồ trang sức ở đó để biện minh cho quá trình phê duyệt phần mềm bên ngoài của công ty tôi hay không. Trong quá trình viết chương trình kiểm tra và đọc các tài liệu, tôi đã đạt được một vài kết luậnCác thành phần tốt nhất của Boost là gì?

  • tất nhiên, không phải tất cả mọi thứ trong Boost sẽ bao giờ được sử dụng trong nhóm kỹ thuật của tôi quan trọng
  • hơn, một số trong số này các thư viện có vẻ được đánh bóng hơn những người khác

Thực tế, một số thư viện có vẻ hơi giống đồ chơi.

Có một số thư viện khá dễ tiếp cận mà tôi có thể nhìn thấy đưa vào sử dụng chỉ sau một thời gian ngắn điều tra, chẳng hạn như boost :: biến (Tôi thực sự thích khách thành phần và thực tế là trình biên dịch barfs nếu khách truy cập thiếu toán tử cho một trong các loại biến thể). Tôi muốn sử dụng mức tăng :: shared_ptr ngoại trừ việc nhóm của chúng tôi đã có một bộ loại con trỏ thông minh.

Vì vậy, dựa trên kinh nghiệm rộng lớn của người dùng Stack Overflow, mà Tăng thư viện

  • có chất lượng cao?
  • có nhiều đồ chơi hơn?
  • có bất kỳ rào cản nào có rào cản cao nhưng có đáng học không?

Lưu ý rằng đây là một câu hỏi hơi khác so với đặt ra trong Boost considered harmful?

T.B. - Có một trong những câu trả lời (từ litb) đã bị xóa? Tôi không thể nhìn thấy nó ở đây, và chỉ một đoạn trích trên trang người dùng của tôi ...

Trả lời

19

tôi sử dụng khá thường xuyên (và nó làm cho cuộc sống của tôi đơn giản): con trỏ

  • thông minh (shared_ptr, scoped_ptr, weak_ptr, interprocess unique_ptr):

    • scoped_ptr cho RAII cơ bản (không chia sẻ quyền sở hữu và chuyển quyền sở hữu), miễn phí.
    • shared_ptr cho các hoạt động phức tạp hơn - khi cần chia sẻ quyền sở hữu. Tuy nhiên có một số chi phí.
    • unique_ptr - có hoạt động tích cực thúc đẩy việc hợp nhất các cách tiếp cận khác nhau (hiện tại ở mức tăng) thành unique_ptr với mô phỏng di chuyển.
    • Họ thực sự đơn giản để sử dụng (tiêu đề duy nhất), dễ học và rất tốt thử nghiệm (tốt, ngoại trừ có lẽ là unique_ptr)
  • Boost Chủ đề - tích cực phát triển (đề hiện nay di chuyển) thư viện để làm việc với chuỗi. Ẩn tính phức tạp của việc triển khai chuỗi trên một nền tảng nhất định.

  • Tăng MPL và Fusion - đây là những điều khó giải thích hơn. Trong một thời gian dài, tôi đã không sử dụng sức mạnh thời gian biên dịch, nhưng sau khi đọc và học thì một số mã của tôi có thể được đơn giản hóa một cách độc đáo. Tuy nhiên, hãy cẩn thận của thời gian biên dịch ...

  • Boost Asio

    • Trái ngược với ấn tượng ban đầu (ít nhất là một số thời gian trước đây), nó không chỉ là thư viện mạng. Nó cung cấp mô hình I/O không đồng bộ có thể được sử dụng cho hầu hết mọi thứ.
  • Boost Format (định dạng đầu ra mạnh mẽ, nhưng rất nặng)

  • Boost Spirit2x (Karma và Qi sử dụng cả hai để phân tích và tạo ra dựa trên một ngữ pháp nhất định). Thực sự mạnh mẽ, có thể tạo một trình phân tích cú pháp mà không cần sử dụng các công cụ bên ngoài. Tuy nhiên, thời gian biên dịch có thể là một vấn đề.Ngoài ra phiên bản 2x đang được tích cực triển khai và các tài liệu là khá khan hiếm (mailing list tinh thần-devel là rất hữu ích mặc dù)

  • Boost Bind, Chức năng và Lambda để làm cho cuộc sống của bạn dễ dàng hơn và tăng cường Phoenix - chỉ để thử nghiệm

  • lexical_cast (một cái gì đó tương tự có thể được sinh ra sớm càng tăng :: string)

  • Regex/Xpressive - biểu thức thông thường

  • Loại đặc điểm và kiểm tra khái niệm - một lần nữa để làm cho cuộc sống của bạn dễ dàng hơn

  • Math:

    • nhiều máy phát điện số ngẫu nhiên
    • phân phối thống kê khác nhau
    • ublas - cho việc sử dụng các ràng buộc LAPACK/BLAS trong C++ như cách
    • một số chức năng toán học, thông thường không có sẵn trong C++
    • một số công cụ để kiểm soát chuyển đổi giữa các loại chữ số
    • khoảng thời gian
  • Boost Iterator (adapter chuyên dụng cho vòng lặp và làm mặt tiền để tạo của riêng bạn)

  • Boost đơn vị kiểm tra khuôn khổ

Và vẫn còn một số bộ phận mà tôi hầu như không chạm vào Tăng cường. Có lẽ tôi cũng quên đề cập đến vài cái rõ ràng.

Hãy nhớ sử dụng đúng công cụ (búa) cho các vấn đề đúng (móng tay). Hãy nhớ giữ các giải pháp đơn giản. Hãy nhớ về chi phí của chức năng nhận được (ví dụ: shared_ptr hoặc boost::format chi phí thời gian chạy hoặc MPL/Fusion/Spirit/Phoenix biên dịch chi phí thời gian và kích thước thực thi). Nhưng thử nghiệm và học hỏi - đó là nơi vui vẻ.

Và khi nói đến việc thuyết phục quản lý sử dụng các thư viện mới - bạn không phải bắt đầu với tất cả các thư viện. Bắt đầu với những điều đơn giản (có lẽ là những thứ có lịch sử Boost lâu dài và ổn định, hỗ trợ trình biên dịch rộng, được lên kế hoạch để đưa vào TR2/C++ 1x, vv) và các ví dụ đơn giản cho thấy lợi ích.

4

Tăng cường :: lambda có phần hữu ích nếu bạn sử dụng STL. Nó cho phép bạn tạo các vị từ tại chỗ, như sau:

for_each(a.begin(), a.end(), std::cout << _1 << ' '); 

Mã này xuất tất cả các phần tử từ vùng chứa cách nhau bằng dấu cách.

+0

như thế này? bạn đang nói rằng sự bao gồm của tăng sẽ hỗ trợ rằng: for_each (a.begin(), a.end(), std :: cout << _1 << ''); ? –

+0

Tăng lambda cho phép chính xác điều đó. – Richard

+0

Boost :: Lambda là quá khó chịu để sử dụng cho bất cứ điều gì phức tạp hơn nhiều so với mặc dù, ít nhất là cho tôi. –

4

Nhiều bổ sung vào thư viện chuẩn C++ 0x được tạo lần đầu tiên như là một phần của thư viện Boost.

Chúng không hoàn hảo (là bất kỳ phần mềm nào) nhưng quy trình kỹ thuật được sử dụng khá mạnh mẽ (nhiều hơn hầu hết các phần mềm miễn phí). Nếu bạn cần giúp đỡ, bạn sẽ tìm thấy rất nhiều trong danh sách gửi thư.

8

Tôi thường sử dụng tăng :: hệ thống tệp. Tất cả điều cần thiết để quản lý tệp đơn giản là

5

Boost interprocess chắc chắn là giá trị nếu bạn đang làm những điều w/bộ nhớ chia sẻ & tương tự.

6

tôi muốn nói các thư viện có giá trị là:

  • Metaprogramming (MPL, enable_if, type/function_traits)
  • Preprocessor - nếu bạn cần nó, nó có thể đến tiện dụng
  • biến thể, tùy chọn - như bạn đã ghi chú
  • Toán - quaternions, các hàm toán học bổ sung (mặc dù chúng có thể không hữu ích cho bạn)
  • lambda: mặc dù cú pháp là lông, nó khá là gây nghiện
  • khai thác/lặp: họ là thực sự tiện dụng khi xây dựng các loại của riêng bạn

lẽ Python (không bao giờ cố gắng, nhưng một số ví dụ. chương trình KDE sử dụng nó)

4

Cá nhân tôi nghĩ rằng bạn nên có một cái nhìn tại các thư viện mà giấu đi những thứ nền tảng cụ thể như luồng, IPC, bộ nhớ ánh xạ các file, hệ thống tập tin, đồng bộ IO, vv

Đây có thể giúp bạn tiết kiệm rất nhiều thời gian và sự cố trong các dự án đa nền tảng và có xu hướng tập trung vào việc phơi bày chức năng hơn là các bài tập trong các tính năng C++ ưa thích.

+1

Là một nhận xét chung, tôi nghĩ rằng bạn đang ở trên.Nhưng giống như con trỏ thông minh, nhóm của tôi có một khung công tác hoàn thiện bao gồm phần cứng và hệ thống tập tin trừu tượng, tính di động của dữ liệu mạng chéo, v.v. Do đó, sự quan tâm đến các khái niệm cấp cao hơn. –

13

tôi thấy boost là một tranh cãi phải-có khi thiết kế cross-platform (ví dụ * nix và win32) các ứng dụng đa luồng (boost::thread, boost::interprocess.) Chỉ riêng điều này đã được biện minh đủ trong ít nhất một ví dụ cho áp dụng boost như một phần của dự án của nhà tuyển dụng của tôi.

Phần còn lại (các vùng chứa, lập trình chung và lập trình meta, bộ nhớ) theo sau là phần mềm miễn phí.

3

Nếu bạn cần phân tích cú pháp các tệp văn bản phức tạp hơn mà các cặp khóa/giá trị đơn giản, tôi khuyên bạn nên đánh dấu Boost::spirit. Nó có một đường cong học tập cao, nhưng một khi bạn tìm ra nó, nó cho phép bạn dễ dàng nhúng các trình biên dịch EBNF ngay trong mã. Nó mạnh mẽ hơn nhiều so với viết trình phân tích cú pháp của riêng bạn. Tôi cũng thấy mình tạo ra các định dạng tệp được thiết kế nhiều hơn cho sự dễ dàng của người viết tệp hơn là người viết mã phân tích cú pháp.

1

Không chính xác cùng một câu hỏi nhưng có thể giúp trả lời của bạn: Most used parts of Boost

+0

Được yêu thích. Cảm ơn! –

2

Tôi đã tìm thấy boost.thread và boost.asio không thể thiếu để viết các ứng dụng client/server. Thư viện con trỏ thông minh giúp bạn dễ dàng viết mã sử dụng xử lý ngoại lệ mà không bị rò rỉ bộ nhớ.

Lưu ý phụ, một tập hợp các tệp PDF ghi lại một số thư viện tăng phổ biến hơn đã được phát hành gần đây. Bạn có thể tải xuống từ SourceForge.

+0

Tôi đã tải xuống và bỏ qua một số libs tôi đã viết chương trình đồ chơi cho, có vẻ như đây chỉ là các tệp PDF của tài liệu đi kèm với thư viện Boost? Đây có phải là không cho một số người trong số họ? –

+0

Không, đó là tất cả, theo như tôi biết. –

2

Tôi đã đọc các câu trả lời khác và tôi cần để thêm Boost.Graph (BGL) và bạn bè Boost.Property_map của nó. Hai nghĩa đen này đã thay đổi công việc hàng ngày của tôi.

Nó được thiết kế rất tốt, nhưng hầu hết mọi người được đưa ra đầu tiên bởi vì có một mức giá khá cao để trả trước khi thực sự hiểu mục đích của tất cả các khái niệm. Nhưng một khi bạn nắm được thư viện này, sẽ rất khó để đi mà không có!

Các vấn đề liên quan