Đây là câu hỏi chung "noob" về thiết kế phần mềm, vì vậy tôi xin lỗi nếu nó có vẻ mơ hồ, nhưng tôi thực sự sẽ đánh giá cao lời khuyên. Lưu ý rằng hệ thống được mô tả dưới đây hoàn toàn là một ví dụ, không phải là một sản phẩm cụ thể mà tôi có trong đầu.Sử dụng IPC để kết hợp nhiều ngôn ngữ
Tôi thường có nhu cầu kết hợp chức năng của một số thư viện hoặc tiện ích, được viết bằng các ngôn ngữ khác nhau. Ví dụ, nếu tôi muốn viết mã một ứng dụng xử lý âm thanh hiệu năng cao cho máy tính để bàn, tôi sẽ viết nó trong C/C++. Sau đó, tôi muốn thêm một giao diện đẹp. Nhưng tôi không muốn học Qt. Tôi thích giao diện của Adobe Air và muốn sử dụng nó. Sau đó, tôi có nhu cầu truy cập thiết bị USB. Nhưng thư viện USB tôi chỉ có một API trong Java. Làm thế nào tôi có thể kết hợp tất cả các yếu tố này với nhau, để tận dụng lợi thế của các thế mạnh tương đối của chúng?
Rõ ràng, tôi không thể biên dịch các thành phần khác nhau này thành một tệp thực thi duy nhất. Vì vậy, tôi cần phải tạo và chạy chúng một cách riêng biệt, và cung cấp cho họ một phương tiện để giao tiếp. Cách phổ biến nhất để làm điều này dường như đang sử dụng IPC (Inter Process Communication), ví dụ như bộ nhớ hoặc ổ cắm chung. Tôi thích ý tưởng của ổ cắm, như các chương trình có khả năng có thể chạy trên máy riêng biệt trên mạng.
Vì vậy, tôi quyết định tạo hệ thống máy khách/máy chủ cục bộ, với API tùy chỉnh, để cho phép các yếu tố này giao tiếp. Ví dụ, ứng dụng Air sẽ nhận được một tin nhắn từ ứng dụng C, yêu cầu nó cập nhật giao diện người dùng của nó. Ứng dụng USB chạy trong Java sẽ sử dụng các ổ cắm để truyền âm thanh từ phần cứng USB, vào ứng dụng C.
Câu hỏi của tôi: đang sử dụng ổ cắm cục bộ theo cách này một cách điển hình để thiết kế một hệ thống như vậy? Hiệu suất sẽ tồi tệ hơn nhiều so với ứng dụng gốc thực sự (ví dụ: mọi thứ trong Java hoặc C, trong một tệp thực thi duy nhất)? Nó cũng dường như có khả năng rằng một cách tiếp cận như vậy sẽ dễ bị lỗi, và khó khăn để duy trì?
Tôi thường thấy mình gặp phải các giới hạn của thư viện phần mềm hiện tại (ví dụ: thư viện đồ họa có giao diện người dùng khá linh hoạt nhưng không có cách nào để truy cập phần cứng cấp thấp hoặc thư viện phương tiện có thể kết hợp nhiều luồng âm thanh không hỗ trợ phát lại video) và thấy nó rất bực bội. Nếu bất cứ ai có thể tư vấn cho cách tốt nhất để kết hợp các thư viện phần mềm tùy ý như thế này, tôi thực sự sẽ đánh giá cao nó.
Cảm ơn trước!
Cả hai câu trả lời hay, nhưng câu trả lời này là eas tôi hiểu. Phần lớn công việc của tôi yêu cầu C/C++, tôi nghĩ rằng có thể an toàn khi đặt cược trên Qt làm "nền tảng" của tôi. – darasan