2011-12-25 36 views
21

Trong ngữ cảnh di động phần mềm, sự khác biệt giữa ba khái niệm này là gì? Ví dụ, tôi muốn sử dụng thư viện ncurses, thư viện ncurses ban đầu được viết bằng C, nhưng ứng dụng của tôi đang được viết bằng C++, sau đó tôi tìm thấy "ncurses wrapper", "bindings to ncurses", và " ncurses port ". Tôi nên sử dụng cái nào?Sự khác biệt giữa trình bao bọc, ràng buộc và cổng là gì?

Ưu điểm và nhược điểm của mỗi loại là gì?

+0

Không thể nói bạn đang nói về điều gì trừ khi bạn cung cấp thêm ngữ cảnh. –

Trả lời

36

A wrapper là một đoạn mã nằm trên đầu mã khác để tái chế chức năng của nó nhưng với giao diện khác. Điều này thường ngụ ý một giao diện được viết bằng cùng một ngôn ngữ. Cũng cần lưu ý rằng đôi khi mọi người sẽ nói trình bao bọc khi ý nghĩa về mặt kỹ thuật là một ràng buộc (bao gồm cả bản thân tôi).

Ưu điểm:

  • Đó là trong cùng một ngôn ngữ như bản gốc
  • Máy đóng gói tăng cường hoặc tái sử dụng chức năng mà không cần phải viết lại đầy đủ.
  • Tương đối nhanh để hoàn thành
  • Cập nhật nhỏ khi thư viện nguồn thay đổi. Có thể bạn sẽ chỉ cần kết buộc các hàm mới trừ khi chúng phá vỡ khả năng tương thích ngược bằng cách thay đổi đầu vào/đầu ra dự kiến ​​của các hàm/lớp.

Nhược điểm:

  • Bao bì toàn bộ thư viện có thể cực kỳ lặp đi lặp lại

Một binding là một chút mã mà ngồi trên đầu trang của các mã khác để tái chế nó chức năng, ngoại trừ thời gian này bindings được viết bằng một ngôn ngữ khác với thứ họ liên kết. Một ví dụ đáng chú ý là PyQt là python ràng buộc cho QT.

Ưu điểm:

  • Mang chức năng từ ngôn ngữ khác sang ngôn ngữ bạn đã chọn.
  • Tương đối nhanh so với cổng
  • Cùng một mức thay đổi nhỏ là cần thiết như trong gói- Có thể bạn chỉ cần bọc các chức năng/lớp mới trừ khi chúng bị hỏng tương thích ngược bằng cách thay đổi đầu vào/đầu ra dự kiến ​​của hàm/các lớp học.

Nhược điểm:

  • Cũng như lặp đi lặp lại như là một wrapper
  • Có lẽ bạn đang tham gia một buổi biểu diễn hit khá lớn, đặc biệt là bất kỳ wrapper liên quan đến một ngôn ngữ giải thích trên hai đầu

A Port là khi bạn dịch một số mã để hoạt động trong một môi trường khác. Tương tự phổ biến bao gồm các trò chơi đi ra để nói ... XBox và sau đó được phát hành cho PS3.

Ưu điểm:

  • Cung cấp cho bạn cơ hội để thực hiện các cải tiến cho các cơ sở mã như bạn thấy bất cập
  • Bạn sẽ quen thuộc với CÁCH mã chạy, không chỉ là những gì nó làm.

Nhược điểm:

  • Bởi đến nay các giải pháp lengthiest về thời gian/đòi hỏi viết lại hoàn toàn
  • Bạn cần phải chắc chắn rằng bất cứ chức năng ứng nhu cầu thư viện nguồn bằng một ngôn ngữ có sẵn trong bạn ngôn ngữ cổng mục tiêu hoặc bạn sẽ kết thúc gói chức năng cần thiết (và có khả năng đánh bại mục đích.)
  • Mỗi lần thư viện nguồn cập nhật, bạn phải cập nhật quá bằng cách dịch bất kỳ thay đổi nào họ thực hiện hoặc rủi ro bị tụt hậu.
+0

Giải thích tuyệt vời! – jweyrich

+0

Trình bao bọc có hiệu suất đáng kể không? Tôi có nên sử dụng trình bao bọc trong một ứng dụng chuẩn mà hiệu suất là quan trọng không? –

+0

Mỗi trình bao bọc là một "hiệu suất đạt được" bởi vì bạn đang truyền dữ liệu hiệu quả cho một quá trình khác và chờ nó trở lại. Điều ngược lại là nếu bạn đang bàn giao một cách nào đó nhanh hơn, hit có thể được cân bằng bởi những lợi ích! Một ví dụ đến với tâm trí là dự án Hekad viết trong đi bao gồm một thông dịch viên lua để thực hiện một wrapper C regex .... đó là nhanh hơn so với máy chủ xử lý regex gốc của go. – odgrim

1

Which one should I use?

Bạn nên sử dụng bindings to ncurses. Một ràng buộc là một verion cụ thể của một ứng dụng, thư viện, vv mà khác với ban đầu chỉ beacuse bạn có thể sử dụng nó với một ngôn ngữ khác. Ví dụ thường xuyên bao gồm các trình quản lý cửa sổ (gtk + = C, gtkmm = C++; Qt = C++, PyQt = Python; ecc.). Tuy nhiên, mọi người thường sử dụng các từ khác như trình bao bọc hoặc cổng để đề cập đến các ràng buộc, vì vậy thật dễ dàng để khiến bạn bối rối.

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