2012-01-09 36 views
13

Gần đây tôi đã đặt câu hỏi này https://softwareengineering.stackexchange.com/questions/129076/go-instead-of-c-c-with-cgo và nhận được một số đầu vào rất thú vị. Tuy nhiên có một sai lầm trong câu hỏi của tôi: Tôi giả định cgo cũng có thể được sử dụng để truy cập mã C++ nhưng điều đó là không thể. Thay vào đó bạn cần sử dụng SWIG.thay thế C++ bằng go + swig

Các faq đi nói "Chương trình CGO cung cấp cơ chế cho một‘giao diện chức năng nước ngoài

câu hỏi của tôi’để cho phép gọi điện thoại an toàn của C thư viện từ Go đang SWIG mở rộng khả năng này để các thư viện C++..": Có thể truy cập các khuôn khổ C++ cấp cao như QT với SWIG + Go và làm việc hiệu quả không? Tôi muốn sử dụng Go như là một "ngôn ngữ kịch bản" để sử dụng các thư viện C++.

Bạn có bất kỳ trải nghiệm nào với việc di chuyển và di chuyển không? Có những cạm bẫy mà tôi phải biết không?

Cập nhật/trả lời: Tôi đã yêu cầu này trên IRC quá và tôi nghĩ rằng câu hỏi đã được giải quyết:

SWIG là một cách khá sạch của interfacing C++ mã từ các ngôn ngữ khác. Thật đáng buồn khi kết hợp các loại C++ với một thứ như đi có thể rất phức tạp và trong hầu hết các trường hợp, bạn phải tự xác định bản đồ. Điều đó có nghĩa rằng SWIG là một cách tốt để tận dụng một codebase hiện có để tái sử dụng các thuật toán đã viết. Tuy nhiên lập bản đồ một thư viện như Qt để đi sẽ đưa bạn lứa tuổi. Tâm trí nó chắc chắn có thể nhưng bạn không muốn làm điều đó.

Những người bạn đến đây để lập trình gui khi đang di chuyển có thể muốn thử go-gtk hoặc phiên bản go của wxWidgets.

+2

Điều này thuộc về stackoverflow. Bình chọn để đóng/di chuyển. –

+2

Điều này thật thú vị: Đầu tiên tôi hỏi http://programmers.stackexchange.com/questions/129076/go-instead-of-c-c-with-cgo về stackoverflow và được chuyển đến programmers.stackexchange. Bây giờ câu hỏi được cập nhật được chuyển từ các lập trình viên trở lại đây. – lhk

+4

Tôi nghĩ rằng thật ngớ ngẩn khi ai đó muốn chuyển câu hỏi này sang lập trình viên. Dường như với tôi như thế này là chính xác các loại câu hỏi mà Stackoverflow có nghĩa là cho. Liệu tôi có sai? –

Trả lời

5

Có thể không? Vâng.

Có thể thực hiện trong một khoảng thời gian hợp lý không? Số

Nếu bạn quay lại và xem xét các dự án khác đã thực hiện các khung công tác lớn và cố gắng đặt một lớp trừu tượng lên đó, bạn sẽ thấy hầu hết là "không đầy đủ". Bạn có thể thực hiện một khởi đầu khá tốt và có được một số trình bao bọc ban đầu, nhưng nói chung thậm chí công việc để có được các trường hợp đơn giản được giải quyết mất thời gian khi có rất nhiều mã cơ bản để bọc, ngay cả với các công cụ tự động (trợ giúp, nhưng không bao giờ là một giải pháp hoàn chỉnh). Và sau đó ... bạn nhận được 10% còn lại khó chịu mà sẽ đưa bạn mãi mãi (ok, một thời gian thực sự thực sự dài ít nhất). Và sau đó suy nghĩ về cách nó là một mục tiêu thay đổi ngay từ đầu. Qt, ví dụ, sắp phát hành bản viết lại chính tiếp theo.

Nói chung, an toàn nhất là phải tuân theo ngôn ngữ khuôn khổ mà khung được thiết kế. Mặc dù nhiều người có phần mở rộng ngôn ngữ trong chính dự án. Ví dụ, cho Qt bạn nên kiểm tra QML, cung cấp (trong số nhiều thứ khác) một javascript ràng buộc để Qt. Sắp xếp. Nhưng nó có thể đáp ứng yêu cầu "kịch bản" của bạn.

+1

+1 và được chấp nhận làm câu trả lời. Hai câu đầu tiên có thể là một câu trả lời hay cho một nửa câu hỏi trên stackoverflow;) – lhk

+0

Ha! (btw, bạn không chấp nhận nó như là một câu trả lời thực sự ...) –

2

Cập nhật có liên quan về vấn đề này: bây giờ có thể tương tác với C++ bằng cgo với this CL, được hợp nhất cho Go 1.2. Tuy nhiên, giới hạn đối với các cuộc gọi hàm giống như C, và các lớp, các phương thức và các tính năng C++ không được hỗ trợ (tuy nhiên, tôi hy vọng).

+0

thú vị, cảm ơn thông tin – lhk

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