Tôi là không hỏi về WHEN để liên kết các ngôn ngữ lập trình khác nhau.Cách kết hợp các ngôn ngữ lập trình khác nhau
Đây là một câu hỏi chung nhưng tôi cá nhân làm việc trên Linux.
Điều tôi muốn hiểu là quá trình theo đó các ngôn ngữ lập trình khác nhau có thể được kết hợp , tôi đã tìm thấy một bài viết hay về kết hợp C/C++/Fortran: http://www-h.eng.cam.ac.uk/help/tpl/languages/mixinglanguages.html.
Từ những gì tôi hiểu được hầu hết các trình biên dịch thực hiện hai giai đoạn: (? Có thể là tên hàm)
Dịch các file ngôn ngữ vào các tập tin đối tượng có chứa mã máy nhưng vẫn chứa một số biểu tượng
Linking các đối tượng tập tin với nhau, chỉ ở giai đoạn này Linker kiểm tra xem các hàm trong các tệp đối tượng có thể gọi được không.
Tôi nghĩ rằng vấn đề với cách kết hợp ngôn ngữ khác nhau là tên mangling có nghĩa rằng tên của các chức năng được thay đổi khi chúng được chuyển thành mã đối tượng.
Các câu hỏi là:
Có thể bạn không bằng cách nào đó khám phá ra tên hàm đọc sai trước và so với chỉ định cho họ một cách rõ ràng bằng ngôn ngữ lập trình hay tốt hơn hết, không phải là có một phần mềm mà đã thực hiện điều đó?
Tôi không hiểu hoàn toàn cách thư viện động được liên kết nhưng có thể các ngôn ngữ khác nhau tương tác bằng cùng một phương thức mà chương trình tương tác với thư viện động?
p.s Mục đích chính là gọi các hàm được viết bằng ngôn ngữ khác.
Thanx rất nhiều cho câu trả lời, có cách phổ biến để "yêu cầu trình biên dịch sử dụng quy ước gọi của ngôn ngữ khác không "? – fiftyeight
Đây là một câu trả lời hay, để làm rõ, tôi sẽ biết ơn nếu bạn có thể cho tôi biết điều sau đây là chính xác: Chỉ có Công ước ABI/Gọi là bạn có thể liên kết với nhau các đối tượng khác nhau không, nếu tôi muốn có -ngôn ngữ ngôn ngữ như Perl hoặc PHP (được viết bằng C) có thể gọi hàm của tôi miễn là hàm sử dụng C ABI, nó sẽ hoạt động. Tôi chỉ cần thêm đối tượng được chia sẻ vào tệp cấu hình (như php.ini) hoặc liên kết nó theo một cách khác. – fiftyeight
@fiftyeight, cho Perl, hãy xem ['Inline :: C'] (http://search.cpan.org/~sisyphus/Inline-0.48/C/C.pod). Miễn là bạn sử dụng C ABI, sẽ có cách này hay cách khác để làm cho nó hoạt động cho một ngôn ngữ kịch bản nhất định trong hầu hết các trường hợp. Các cách để làm cho nó hoạt động sẽ phụ thuộc vào các chi tiết của tình huống. Nhưng lưu ý rằng hầu hết các ngôn ngữ kịch bản được viết bằng C. Đối với những ngôn ngữ được triển khai trên JVM, bạn sẽ phải sử dụng các cơ sở của JVM để tương thích mã gốc (JNI và whatnot). – Lumi