Tại sao các nhà phát triển trò chơi C ++ không sử dụng thư viện boost? [đóng cửa]


81

Vì vậy, nếu bạn dành thời gian xem / trả lời các câu hỏi trên Stack Overflow dưới thẻ C ++, bạn sẽ nhanh chóng nhận thấy rằng mọi người đều sử dụng thư viện boost ; một số người thậm chí còn nói rằng nếu bạn không sử dụng nó, bạn sẽ không viết "C ++" thực sự (tôi không đồng ý, nhưng đó không phải là vấn đề).

Nhưng sau đó là ngành công nghiệp game, vốn nổi tiếng với việc sử dụng C ++ và không sử dụng boost. Tôi không thể không tự hỏi tại sao lại như vậy. Tôi không quan tâm đến việc sử dụng boost vì tôi viết game (bây giờ) như một sở thích và một phần của sở thích đó là thực hiện những gì tôi cần khi tôi có thể và sử dụng các thư viện ngoài lề khi tôi không thể. Nhưng đó là tôi.

Tại sao các nhà phát triển trò chơi, nói chung, sử dụng thư viện boost? Đó là hiệu suất hoặc mối quan tâm bộ nhớ? Phong cách? Thứ gì khác?

Tôi đã định hỏi điều này về stack overflow, nhưng tôi đoán rằng câu hỏi được hỏi tốt hơn ở đây.

BIÊN TẬP :

Tôi nhận ra tôi không thể nói cho tất cả các lập trình viên trò chơi và tôi chưa thấy tất cả các dự án trò chơi, vì vậy tôi không thể nói các nhà phát triển trò chơi không bao giờ sử dụng boost; đây đơn giản là kinh nghiệm của tôi

Cho phép tôi chỉnh sửa câu hỏi của mình để hỏi, nếu bạn sử dụng boost, tại sao bạn lại chọn sử dụng nó?



2
Sẽ công bằng khi nói rằng "Boost" là một bộ sưu tập các thư viện quá lớn để biến "use boost" hay "không sử dụng boost" trở thành một lựa chọn hợp lý? Ngay cả Google cũng hạn chế một tập hợp nhỏ "tăng" trong các tiêu chuẩn của họ.
Dan Olson

Nhị phân trò chơi đã đủ lớn.
Quân đoàn

3
@Tetrad STL không tăng và STL được sử dụng nhiều trong gamedev.
rootl Focus

7
Tôi thực sự không thấy câu hỏi "không mang tính xây dựng" ở đâu, điều này cần được giải thích.
v.oddou

Câu trả lời:


42

Một số nhà phát triển làm, một số nhà phát triển không (trong trò chơi và các nơi khác). Nó phụ thuộc vào nhu cầu / yêu cầu của những nhà phát triển đó là gì và công nghệ hiện có mà họ phải tận dụng.

Thư viện tiêu chuẩn của C ++ thường được xử lý giống nhau và mọi người cũng thường tự hỏi điều tương tự mà bạn đang tự hỏi về . Hầu hết các lý do là tương tự nhau, ví dụ:

  • Nhà phát triển có thể đã có thư viện chức năng nội bộ cung cấp các dịch vụ giống như thư viện tiêu chuẩn hoặc Boost cung cấp. Các thư viện nội bộ như vậy thường được viết từ lâu, khi hỗ trợ triển khai cho thư viện chuẩn còn yếu và Boost về cơ bản là không tồn tại, do đó chúng ít nhiều phải được viết. Trong kịch bản này, thường không thực sự đáng để chuyển khỏi chức năng nội bộ - đó sẽ là một nỗ lực chuyển mạng lớn sẽ làm mất ổn định rất nhiều mã và hầu như không mang lại lợi ích gì.

  • Một nhà phát triển có thể đang làm việc trên các nền tảng nơi trình biên dịch hỗ trợ cho các kỹ thuật C ++ nâng cao được Boost sử dụng không được hỗ trợ tốt, do đó mã Boost hoàn toàn không biên dịch hoặc hoạt động khá kém. Điều này cũng áp dụng cho thư viện tiêu chuẩn, mặc dù ngày nay ít hơn rất nhiều.

  • Boost và thư viện tiêu chuẩn của ngôn ngữ là mục đích chung, và mặc dù điều đó tốt và tốt cho hầu hết các ứng dụng, đôi khi một nhà phát triển có các nhu cầu cụ thể có thể được giải quyết tốt hơn bằng các container chuyên dụng hơn.

Tôi nghĩ ở trên là hai lý do hợp lý, mặc dù chắc chắn có những lý do khác. Mặc dù vậy, bạn phải cẩn thận vì nhiều lý do để tránh Boost, các thư viện tiêu chuẩn hoặc bất cứ điều gì làm sôi lên hội chứng "không được phát minh ở đây", đây có thể là một dấu hiệu cho thấy lý do không thực sự có căn cứ thực tế.

Cũng nên nhớ rằng nhu cầu của một studio lớn thường rất khác với nhu cầu của một nhà phát triển cá nhân. Ví dụ: một nhà phát triển cá nhân có thể có ít mã kế thừa trôi nổi để duy trì và do đó, có lẽ việc chuyển từ phiên bản Boost hoặc chức năng thư viện tiêu chuẩn sẽ không lớn như vậy và sẽ tiết kiệm cho nhà phát triển đó khỏi phải duy trì mã đó được mở rộng trong tương lai - do đó làm mất hiệu lực điểm đầu tiên của tôi.

Cuối cùng, tất cả là về việc đánh giá các yêu cầu và đầu tư thời gian của bạn so với mục tiêu mong muốn của bạn và xác định tùy chọn nào đáp ứng nhu cầu của bạn tốt nhất. Các nhà phát triển không sử dụng Boost hoặc thư viện chuẩn thường đã làm như vậy và đạt được kết luận đó - có lẽ bạn cũng sẽ như vậy, và có lẽ là không.


2
Một điểm khác - một số công ty không sử dụng Boost vì tác động tiêu cực đến tốc độ biên dịch trong môi trường phát triển mang tính tương tác cao.
Steven

27

Chỉnh sửa Trở lại câu hỏi này sau một vài năm
Tiếp tục sử dụng ngày càng nhiều thư viện boost, tôi nghĩ rằng tôi nên cập nhật câu hỏi này để đưa ra một trường hợp chắc chắn về lý do tại sao bạn nên sử dụng boost khi mô tả sản phẩm phù hợp với chức năng mong muốn của bạn. Điều này sẽ thuyết phục ngay cả những người nói nay. Tải về openSSL, thử tạo ứng dụng khách và máy chủ với nó. Bây giờ hãy thử và làm cho nó hoạt động trên mọi nền tảng. Sau đó, tải xuống và sử dụng boost :: asio :: ssl để tạo cùng một ứng dụng. Nếu bạn không tin rằng boost là nơi thích hợp để tìm kiếm mã sạch, được tối ưu hóa tốt, được đánh giá ngang hàng, mã đa nền tảng, bài tập đơn giản này sẽ chuyển đổi bạn.

Phiên bản Tl; dr:

Theo tôi, bạn không thấy hàng tấn công ty phát triển quy mô nhỏ hoặc vừa sử dụng boost vì đó là một con thú hoang to lớn và mạnh mẽ không dễ thuần hóa và về cơ bản bạn sẽ tự mình cố gắng học cách để dùng nó. Tài liệu này thiếu một vài cách (xem phiên bản dài) và "cộng đồng" xung quanh dự án dường như bị thiếu, phân tán hoặc không hoạt động (so với các dự án khác).

Phiên bản rất dài:

Tôi nhận ra rằng đã có một câu trả lời được chấp nhận nhưng vì một người thực sự sử dụng boost trong gần như mọi dự án tôi làm, tôi nghĩ tôi sẽ đăng câu trả lời.

Tôi nhớ khi lần đầu tiên tôi được chọc ngoáy và thật lòng tôi không có ý tưởng gì về những gì đang xảy ra. Boost không phải là tài liệu rất tốt ở tất cả. Mọi người có thể không đồng ý với tôi về điều đó tôi chắc chắn bởi vì có rất nhiều đoạn mã ví dụ và một nhận xét, nhưng tất cả đều rất lạnh lùng và mơ hồ cũng như khó điều hướng.

Ngoài ra, có vẻ khó tìm thấy bất kỳ nơi nào bạn cảm thấy như bạn đã tìm thấy "cộng đồng" xung quanh dự án. Trong thực tế, cộng đồng dường như không tồn tại, hoặc du mục. Thật không may, ngay cả danh sách gửi thư của họ đã bị troll bởi rất nhiều trang web đỉa mà bạn có thể đi xuống lỗ thỏ này luôn luôn quay trở lại nơi bạn bắt đầu.

Hai yếu tố này làm cho việc học cách sử dụng các thư viện boost là một nhiệm vụ khá khó khăn. Ngay cả khi các kỹ thuật sử dụng boost không quá phức tạp, thì đó là một bộ thư viện đồ sộ và nhìn chằm chằm xuống khi tất cả những gì bạn được trang bị là một vài đoạn mã và các phần rải rác của danh sách gửi thư từ các góc tối nhất của internet ... Chà, bạn hiểu ý rồi đó.

Tôi đã tìm hiểu về việc tăng cường xung quanh phiên bản 1.45 và giờ chỉ có ở phiên bản 1.52 / 1.53 mà tôi cảm thấy đủ thoải mái để sử dụng nó trong sản xuất. Có rất nhiều thứ để làm quen và ghi nhớ, ngay cả những điều đơn giản như cách bạn định cấu hình tăng và ghi nhớ cấu hình đó, bởi vì cách các thư viện được xây dựng và chức năng có thể thay đổi tùy theo sở thích của bạn vào thời gian biên dịch do cách mọi thứ có thể tùy chỉnh là

Tuy nhiên , đừng nhầm lẫn , một khi bạn có thể tăng sức mạnh, bạn đã có được một vũ khí mạnh mẽ để nhanh chóng xây dựng các chương trình đa nền tảng vững chắc. Chỉ lấy boost::asioví dụ. Bạn có thể viết một máy chủ web không đồng bộ đa nền tảng vững chắc, có khả năng mở rộng và mạnh mẽ chỉ trong vài trăm dòng. Tôi đã viết nhiều máy khách, máy chủ, proxy, v.v.

Như những người khác đã chỉ ra, các công ty lớn hơn thường bị mắc kẹt với những thứ di sản hoặc muốn tự lăn lộn mà tôi hoàn toàn hiểu được. Ngoài ra còn có điều thực sự ngớ ngẩn mà tôi đã nghe nói và gặp phải khi các nhà phát triển và quản lý dự án cấm sử dụng boost vì nó "quá lớn". Tôi đoán là họ tin rằng boost là 1 thư viện duy nhất hoặc họ chưa bao giờ nghe nói về BCP .

Vì sao tôi chọn sử dụng boost

Tôi muốn nói rằng tôi sử dụng nó bởi vì như bạn ngụ ý trong câu hỏi của bạn, đó là "thư viện" C ++. Boost được xem trong thế giới C ++ như con dao quân đội của những thứ mà cuối cùng bạn sẽ cần sử dụng. Vì vậy, ý tưởng là nếu có nhu cầu, cần có một phiên bản có hiệu suất cao và khả năng di động của nó. Các công ty lớn góp phần thúc đẩy , những người có học thức cao với sơ yếu lý lịch ấn tượng đóng góp và duy trì nó , và khi một tiêu chuẩn mới của C ++ đang được phát triển, mọi người thường tìm cách thúc đẩy để xem những phần nào của nó sẽ trở thành tiêu chuẩn C ++.

Vì vậy, nếu tôi cần thêm một số chức năng có thể có thư viện hiện có, thì nơi đầu tiên tôi sẽ tìm thấy là vì tôi khá an toàn khi cá cược rằng nó được tối ưu hóa tốt, di động, nó sẽ được hỗ trợ và duy trì cho một thời gian rất dài và các lỗi sẽ được tìm thấy và xử lý. Trong thế giới nguồn mở, những phẩm chất đó có thể rất khó trở thành hiện thực.


Rất đúng như đối với tài liệu. Ví dụ: tài liệu của Boost.asio sẽ giải thích cách viết một máy chủ http trong một vài dòng đáng ngạc nhiên, điều này thật tuyệt nếu trò chơi của bạn sử dụng http (hoặc bất kỳ giao thức TCP vanilla nào khác cho vấn đề đó) nhưng sẽ trở nên khó khăn hơn nhiều nếu bạn muốn sử dụng một giao thức tùy chỉnh hoặc thư viện mạng độc quyền. Tôi mất 20 phút để hiểu cách tạo máy chủ websocket bằng boost.asio, nhưng vài tuần để hiểu cách sử dụng ENet ( enet.bespin.org ) thông qua boost.asio io_service tùy chỉnh.
ClosetGeek

21

Chúng tôi đã sử dụng một chút Boost trở lại tại nơi làm việc cũ của chúng tôi. Những lý do chính để tránh nó và hạn chế sử dụng là:

  • thời gian biên dịch - một số trong số đó rất chậm để biên dịch và cuối cùng bạn không muốn có # # loại trừ trong bất kỳ tiêu đề nào của bạn
  • độ phức tạp - hầu hết các nhà phát triển trò chơi không được biết đến nhiều và do đó làm cho mã không thể đọc được
  • hiệu suất - một số khái niệm thực hiện chậm theo mặc định, ví dụ. đã chia sẻ

1
boost :: shared_ptr? làm sao vậy
Tili

6
Nếu tôi nhớ chính xác, nó phân bổ số tham chiếu trên heap ở đâu đó. Điều này rất tệ cho sự kết hợp bộ đệm trong quá trình sử dụng và cũng có nghĩa là tăng gấp đôi thời gian phân bổ và phân bổ ở đầu và cuối.
Kylotan

10
(Đáng nói thêm rằng việc sử dụng make_ Shared có thể làm giảm bớt vấn đề.)
Kylotan

Tôi nghĩ rằng câu trả lời này khá rõ ràng rằng có nhiều lý do để mọi người tránh nó hơn là chỉ né tránh một hoặc hai lớp xấu.
Kylotan

16

Điều tương tự là (đã?) Được nói cho STL "chuẩn hơn". Bài viết này nói về EASTL, một bản viết lại (một phần) STL của Electronic Arts để đáp ứng nhu cầu phát triển trò chơi khác hẳn so với phát triển ứng dụng "chung chung" hơn.

Vì vậy, có lẽ, một người nào đó ở đâu đó đang viết lại (một phần) thúc đẩy để đáp ứng nhu cầu của họ trong phát triển trò chơi!


+1 cho bài viết. Tôi nghĩ rằng điều này trả lời câu hỏi đẹp.
egarcia

9
Kinh nghiệm của tôi là codebase càng di động, bạn càng viết lại các thành phần "tiêu chuẩn", như STL.
Jari Komppa

6

Ai nói họ không sử dụng boost? Tôi đã biết một hoặc hai công cụ C ++ đã sử dụng boost. Tôi chưa bao giờ trực tiếp làm việc với họ; nhưng, điều đó chủ yếu là vì kinh nghiệm của tôi nằm ở Unreal.

Vì những lý do tôi gặp phải vì không sử dụng boost, và những điều này là chủ quan:

  • Chúng tôi thích cuộn các cấu trúc dữ liệu của riêng mình cho các nền tảng mà chúng tôi đang triển khai
  • Chúng tôi muốn giới hạn số lượng mã không được phát triển nội bộ mà chúng tôi phải sử dụng trong các dự án của mình, đặc biệt khi mã bên ngoài đó phụ thuộc vào các thư viện được phát triển bên ngoài khác.

Về cơ bản, nó hiểu rõ: một giải pháp chung không phải lúc nào cũng là "phù hợp".

Tôi chắc rằng ai đó thực sự làm việc với thư viện có thể bình luận tốt hơn.


Đúng, đã chỉnh sửa câu hỏi của tôi để giải thích cho điều này.
James

5

Tôi đi chơi ở StackOverflow và không sử dụng boost. Tôi sẽ thêm lý do của tôi, bởi vì nó chưa được đề cập.

Boost có nhiều ý tưởng tuyệt vời, thực sự. Tôi thích nhìn vào những gì họ đã làm và thử những điều và ý tưởng mới. Chúng rất tuyệt, vì nó là nơi sinh sản của nhiều cải tiến C ++.

Nhưng sự gia tăng là một con thú rất khó sử dụng vì nhiều lý do. Một trong những lý do là họ cần (muốn) tương thích trên hầu hết mọi trình biên dịch với bất kỳ quirks nào. Kết quả là họ cần sử dụng nhiều thủ thuật, chẳng hạn như MPL để thực hiện. Ví dụ (một thời gian dài trước đây) tôi muốn sử dụng shared_ptr của họ, để nó chạy có nghĩa là tôi cần các nguồn và thư viện với mức tăng 90%. Tôi đã kết thúc việc viết của riêng tôi; 50 dòng mã có thể đọc được. (Yêu cầu của tôi khi nghiêm ngặt hơn, như không có yếu tố an toàn hoặc luồng yếu.)

Thường thì bạn cần một tập hợp tăng thực sự nhỏ, nhưng việc tích hợp toàn bộ tăng chỉ là không đáng để gặp rắc rối.

Chỉnh sửa :

Chỉ cần làm cho rõ ràng, vì nó dường như không đi qua rõ ràng (tức là downvote). Tôi sử dụng làm sử dụng thư viện bên thứ ba. Nhưng trong hầu hết các trường hợp, tất cả mọi thứ đều bình đẳng, tích hợp thư viện bên thứ ba hoặc tăng cường, thư viện bên thứ ba khác nhanh hơn và sạch hơn. Phần còn lại được thực hiện trong bài tập ngón tay "2h". Tôi có một cái nhìn rất khó khăn trong việc xây dựng nó hoặc mua câu hỏi.


1
Có những công cụ như BCP, bạn biết.
Bartek Banachewicz

2
Bạn đang ám chỉ rằng bạn không phải duy trì mã của riêng mình? Ngoài ra, tôi ước mình thật tuyệt khi có thể viết tất cả các phần tăng tốc mà tôi đang sử dụng trong 2 giờ (bao gồm cả việc thử nghiệm chúng trên tất cả các mục tiêu xây dựng mà tôi sẽ sử dụng và viết bài kiểm tra). Bạn phải là một lập trình viên thực sự nhanh chóng. Ồ, và cũng là "hầu hết các bit hữu ích" tương đương với "Tôi không thể C ++" ở đây, vì tiêu chuẩn vẫn còn thiếu rất nhiều .
Bartek Banachewicz

2
Đối với người mới bắt đầu, một vài tính năng được cung cấp bởi boost, tôi đã tìm thấy ở những nơi khác trong các gói nhỏ được xác định rõ, ví dụ sigc ++. Trong nhiều trường hợp thanh lịch hơn và / hoặc hiệu quả hơn. Những gì tôi đến để tăng cường cho hầu hết các tính năng, chẳng hạn như các luồng, con trỏ thông minh và các biểu thức thông thường, những thứ đã làm cho nó trở thành tiêu chuẩn. Trong những năm qua, tôi đã có được một bộ sưu tập các thư viện của bên thứ ba và một số mã của riêng tôi. "Tôi có thể C ++" trong hơn 15 năm nay, cảm ơn bạn rất nhiều.
rioki

3
@SeanFarrell bạn không nên hạ mình. Bạn nói rằng bạn đã làm C ++ trong 15 năm và sau đó trong một bình luận mỉa mai nhanh chóng với Bartek, có vẻ như bạn không hiểu Bartek nghĩa là gì khi anh ấy nói "duy trì" kết hợp với "các gói". Duy trì không có nghĩa là sửa chúng. Chỉ cần cập nhật lên phiên bản mới hoặc lưu trữ phiên bản cho nhiều mục tiêu thường là điều này có nghĩa là gì. Chỉ cần FYI.

3
Sigh Boost cũng hoạt động tốt, nhưng bạn vẫn đề cập đến việc duy trì nó. Tôi không thấy logic của bạn ở đây.
Bartek Banachewicz

4

Trong trường hợp của chúng tôi (không phải trò chơi), chúng tôi có một lý do tuyệt vời cho việc không sử dụng boost (cũng không phải std): Chúng tôi có rất nhiều mã có từ một thập kỷ. Theo các tiền bối, std và boost là không đầy đủ, đầy lỗi hoặc chỉ quá chậm đối với những thứ hiệu suất cao mà chúng tôi yêu cầu. Vì vậy, một số lớp cơ sở đã được triển khai, sử dụng các khái niệm tương tự (như các trình vòng lặp) và thường được tối ưu hóa cho các thuật toán của chúng tôi. Ngày nay, cả ba thư viện (của chúng tôi, std và boost) đều rất giống nhau.

Nhưng chúng tôi có muốn chuyển qua tất cả các mã của chúng tôi? Không hẳn vậy. Tôi cho rằng nhiều công ty khác phải đối mặt với tình trạng khó xử tương tự. Hoặc viết lại rất nhiều mã đã được thử nghiệm và làm việc hoặc không sử dụng std / boost.


5
Đây là sự thật và điều mà tôi không nghĩ tới, nhưng tôi nhận thấy rằng rất nhiều người bắt đầu phát triển trò chơi trong C ++ không quan tâm đến việc sử dụng boost / std. Đôi khi tôi cảm thấy đó là vì học tăng cũng giống như học một ngôn ngữ hoàn toàn mới.
James

1
@James Đây là một trong những lý do lớn nhất. Tôi đã đăng một câu trả lời mặc dù bạn đã chấp nhận một câu chỉ để đưa ra quan điểm của tôi với tư cách là một người kiên trì học hỏi theo cách của tôi, nhưng không phải sau khi bị cám dỗ cũng chạy trốn khỏi nó.

1

Cá nhân tôi không sử dụng boost hoặc bất kỳ mã mục đích chung nào khác khi tạo trò chơi, vì trò chơi không phải là mục đích chung. Loại mã bạn có thể cần để thực hiện một trò chơi thường dành riêng cho phát triển trò chơi, không phải lúc nào cũng giống như 98% (con số ngẫu nhiên) của thời gian. Bạn có thể giải quyết một vài đoạn mã cuối cùng từ boost hoặc một số lib khác, nhưng có lẽ tốt hơn là chỉ viết ra những phần nhỏ bạn cần ở đây và ở đó.

Bên cạnh đó, tôi nghĩ rằng thật thú vị khi viết mã của riêng bạn trong c ++, đó là lý do tại sao tôi chưa bao giờ sử dụng boost hoặc bất cứ thứ gì tương tự.


3
Thật thú vị, nhưng boost có nghĩa là cho những người muốn thực hiện, thay vì phát minh lại bánh xe.
Bartek Banachewicz

3
Đây là ý kiến ​​của tôi, nhưng thật sai lầm khi nói rằng "trò chơi là đặc biệt". Vâng, tự động hóa ngành công nghiệp thời gian thực cũng đặc biệt. Tôi làm cả hai và có thể chứng thực rằng các bit nơi boost sẽ áp dụng, rất rõ ràng là khá giống nhau. Nói rằng họ khác nhau là không biết gì, bởi vì ở rìa họ rất khác nhau nhưng việc sử dụng ngôn ngữ cốt lõi là như nhau. Một chức năng sắp xếp về cơ bản là giống nhau cho dù bạn sắp xếp gì. (Sau đó, một lần nữa, chỉ là bạn có thể, không có nghĩa là bạn muốn, xem câu trả lời của tôi.)
rioki

2
Bạn có thể thêm toàn bộ lớp kết nối mạng / nhiều người chơi vào trò chơi của mình bằng cách sử dụng boost :: asio và phát minh ra giao thức giao tiếp của riêng bạn cho nó. Đó là một lý do hoàn toàn hợp lệ 100% để sử dụng boost là bất kỳ trò chơi nào bạn từng viết yêu cầu bất kỳ loại chức năng liên quan đến mạng nào. "Lăn của riêng bạn" có thể là tuyệt vời khi bạn mới và bạn cần phải học. Không có gì sai với điều đó. Nhưng vào cuối ngày, tôi sẽ không lãng phí thời gian để cố gắng viết lớp truyền thông không đồng bộ đa nền tảng của riêng mình khi nó đã được thực hiện và làm tốt điều đó.

2
@HaywireSpark Không cần phải bắt đầu xúc phạm mọi người. Tôi đọc bài viết của bạn, và vẫn không đồng ý với bạn. Ngay cả khi bạn đi với "thường là cụ thể", điều đó hoàn toàn không liên quan. Hầu hết mọi thứ trong boost đều được thiết kế để có thể di động và biến đổi nhất có thể. boost :: asio là một triển khai rất chung chung và không hướng đến bất kỳ cách thức giao tiếp mạng cụ thể nào. Tôi không thể tưởng tượng bất kỳ kịch bản nào mà tôi phải nói "gee, boost :: asio chỉ không phù hợp với mô hình lớp mạng của tôi. Tôi nên phát minh lại bánh xe". Chỉ cần nói.

2
@HaywireSpark thở dài. Chúc bạn một ngày tốt lành. Bạn nên cố gắng cởi mở hơn để chỉ trích. Có thể chấp nhận những lời chỉ trích là một phần của việc có thể dạy được và nếu bạn không được dạy thì bạn sẽ không bao giờ học được điều gì. Tôi không chọn bạn. Mọi người đã đăng trên bình luận của bạn đều không đồng ý với bạn. Đó thường là một dấu hiệu tốt cho thấy bạn đã nói điều gì đó không đồng ý.

0

di sản trong các thư viện nội bộ không phải là một yếu tố ... lý do chính tại sao mọi người không nên sử dụng thư viện mục đích chung khác là vì chúng không được tối ưu hóa tốc độ và bộ nhớ, tôi phải đề cập đến việc Cryengine sử dụng STL nhưng họ biên dịch đó là phiên bản nguồn mở có tên STLPort, vì vậy đừng ngại sử dụng STL, chỉ cần thực hiện các cấp phát tùy chỉnh của bạn và bạn sẽ ổn. không sử dụng boost tho.


5
-1: Vì bạn tin rằng "Boost" là "không được tối ưu hóa tốc độ và bộ nhớ", khi có hàng tá thư viện Boost, tất cả đều có tốc độ và hiệu quả bộ nhớ khác nhau.
Nicol Bolas

2
... Đó thực sự lý do một số nhà phát triển trò chơi tránh tăng tốc và thậm chí cuộn STL của riêng họ, cùng với thực tế là ổ đĩa sử dụng mẫu nặng biên dịch thời gian qua mái nhà. Đặc biệt lưu ý các bản sửa lỗi được xây dựng trên MSVC, nơi bạn cần số lượng trừu tượng tối thiểu và các hàm bao và tính tổng quát mà bạn có thể thoát khỏi, tất cả đều phản đối với Boost. Vấn đề không phải là thuật toán, mà đơn giản là Boost không bao giờ có nghĩa là tốc độ kim loại trần. Không ai ngoài các nhà phát triển trò chơi sẽ muốn đánh đổi bằng mọi cách.
Sean Middleditch

2
@seanmiddleditch: Quan điểm của tôi là có nhiều thư viện trong Boost. Một số trong số chúng nhanh hơn và tiết kiệm bộ nhớ hơn bất kỳ thứ gì bạn có thể viết mã để thực hiện cùng một công việc và một số trong số chúng thì không. Để chê bai toàn bộ bộ thư viện cho việc này chỉ đơn giản là không biết gì.
Nicol Bolas

2
Không có nhiều nhà phát triển trò chơi có thể viết một trình phân tích cú pháp nhanh hơn Boost.Sprite. Mặc dù có nhiều tùy chọn tốt hơn (dễ sử dụng hơn) để phân tích các ngôn ngữ hoàn chỉnh, Spirit rất nhanh trong việc phân tích các chuỗi có cấu trúc tốt, thậm chí chỉ chuyển đổi chuỗi thành các loại dữ liệu. Thư viện Boost.Xpressive cũng rất nhanh cho regex. Hãy nhớ rằng nhiều người làm việc trên Boost cũng là những người làm việc trong ủy ban tiêu chuẩn C ++ và họ biết cách đạt được hiệu suất tối ưu từ C ++ trên các nền tảng.
Gerald

5
Họ thường sử dụng siêu lập trình mẫu theo cách cho phép một phần lớn công việc được thực hiện vào thời gian biên dịch, thay vì trong thời gian chạy, điều này sẽ đánh bại mọi tối ưu hóa thời gian chạy ở mức độ thấp mà các nhà phát triển trò chơi rất tự hào . Tôi đã thấy một số hiệu suất tăng hơn 50 lần khi chuyển đổi một số tác vụ nhất định từ một số thư viện C hiệu suất cao phổ biến để sử dụng các tương đương Boost.
Gerald
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.