Có lý thuyết ngôn ngữ lập trình nào mô tả các giao diện chức năng nước ngoài (FFI) và nhiều ràng buộc ngôn ngữ không?


16

Có lý thuyết ngôn ngữ lập trình nào mô tả các giao diện chức năng nước ngoài (FFI) và nhiều ràng buộc ngôn ngữ không?

Tôi đã hỏi một số vấn đề triển khai trên stackoverflow , không phù hợp ở đây. Nhưng tôi muốn hỏi từ quan điểm của trang web này và xem những gì tôi có thể nhận được từ đây.

Thực sự đánh giá cao trả lời của bạn!

Nhờ Dave Clarke cho trả lời của ông trên meta !

Câu trả lời:


17

Bài viết Ngữ nghĩa hoạt động cho các chương trình đa ngôn ngữ của Jacob Matthews và Robert Bruce Findler trình bày hai cách tiếp cận để xác định ngữ nghĩa của các chương trình được viết bằng hai ngôn ngữ lập trình, quan tâm đặc biệt đến dữ liệu được xác định bằng một ngôn ngữ và được sử dụng bằng ngôn ngữ kia. Việc nhúng một lần cho phép các giá trị được tạo bằng một ngôn ngữ xuất hiện trong mã đang chạy của ngôn ngữ khác, nhưng chúng chỉ có thể được truyền qua, không được vận hành (hoặc có thể chỉ được vận hành trên một giao diện nhỏ). Việc nhúng tự nhiên cho phép các giá trị trong một ngôn ngữ được sử dụng trong ngôn ngữ kia bằng cách thực hiện cái gọi là diễn viên ngôn ngữ chéo , chuyển đổi giá trị từ ngôn ngữ này sang ngôn ngữ khác.

Bài báo JNI Light: Một mô hình hoạt động cho JNI cốt lõi của Gang Tan trình bày một ngữ nghĩa chính thức về cách thức hoạt động của JNI hiện tại. Ngược lại với bài viết trước, đây là chính thức của nhiều chi tiết cấp thấp về những gì đang diễn ra, thay vì cố gắng khám phá các vấn đề từ góc độ nền tảng.

Làm việc trên các cuộc gọi chức năng nước ngoài kiểm tra kiểu, chẳng hạn như Kiểm tra loại an toàn của các cuộc gọi chức năng nước ngoài của Michael Furr và Jeffrey Foster, cũng cung cấp một khuôn khổ chính thức để diễn đạt hệ thống loại và chứng minh tính đúng đắn của nó.

Nhìn vào các tài liệu tham khảo trong các bài viết này và tìm nơi chúng được trích dẫn bằng học giả google sẽ giúp bạn khám phá một bức tranh kỹ lưỡng hơn về những gì đã được thực hiện trong khu vực.


10

Theo dõi bình luận của Marc, tôi muốn sửa lại hồ sơ đổ lỗi. Wadler không đưa ra khái niệm đổ lỗi, đó là do Findler và Felleisen , cũng không đưa ra sự đổ lỗi cho việc trung gian giữa các ngôn ngữ khác nhau, bắt nguồn từ bài báo năm 2006 của tôi .

Tuy nhiên, Marc hoàn toàn chính xác trên quan điểm đổ lỗi, và bài báo của Matthews mà Dave chỉ ra cũng thảo luận về vấn đề này.


1
Bài báo "Các chương trình được đánh máy tốt" thực sự cung cấp các trích dẫn chính xác và tuyên bố đóng góp cụ thể của nó là cung cấp "một cái nhìn thống nhất về công việc gần đây về các hợp đồng, các loại dần dần và các loại lai bằng cách đưa ra một khái niệm đổ lỗi (từ hợp đồng) cho một hệ thống loại với các diễn viên (tương tự như các ngôn ngữ trung gian được sử dụng cho các loại dần dần và lai), mang lại một hệ thống mà chúng ta gọi là các loại tiến hóa. "
sclv

2
Tôi xin lỗi Sam vì đã không cung cấp tín dụng đầy đủ cho tất cả những người đã chia sẻ nguồn gốc của "sự đổ lỗi". Nó chỉ là những bài báo mà Wadler đồng tác giả đã giới thiệu cho tôi ý tưởng và tôi rất quen thuộc với nó.
Marc Hamann

9

Mặc dù nhiều thứ rõ ràng không liên quan trực tiếp, nhưng có một điều khiến tôi suy nghĩ là khái niệm "đổ lỗi" của Wadler et al. . Điều này cung cấp cho bạn một cơ sở lý thuyết để suy nghĩ về việc trộn lẫn các chế độ gõ khác nhau thành một tổng thể thống nhất.

Về bản chất, đổ lỗi cho phép bạn kết hợp các ngôn ngữ với các đảm bảo loại yếu hơn với các ngôn ngữ có bảo đảm loại mạnh hơn mà không mất tất cả các lợi ích của các bảo đảm mạnh. Ý tưởng là các bộ phận của hệ thống có bảo đảm yếu hơn sẽ bị "đổ lỗi" nếu một số thứ bị sai, nội địa hóa các lỗi loại thời gian chạy.

Hy vọng rằng bạn có thể thấy làm thế nào có thể hữu ích cho FFI và các ràng buộc áp dụng cho các ngôn ngữ với các hệ thống loại khác nhau.

Chỉnh sửa: Xem câu trả lời của Sam TH để biết lịch sử trí tuệ đầy đủ hơn về khái niệm "đổ lỗi".

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.