Apakah ada teori bahasa pemrograman yang menggambarkan antarmuka fungsi asing (FFI) dan binding beberapa bahasa?


16

Apakah ada teori bahasa pemrograman yang menggambarkan antarmuka fungsi asing (FFI) dan binding beberapa bahasa?

Saya telah menanyakan beberapa masalah implementasi pada stackoverflow , yang tidak cocok di sini. Tetapi saya ingin bertanya dari pandangan situs ini dan melihat apa yang bisa saya dapatkan dari sini.

Sangat menghargai balasan Anda!

Terima kasih kepada Dave Clarke untuk balasannya pada meta

Jawaban:


17

Makalah Operasional Semantik untuk Program Multi-Bahasa oleh Jacob Matthews dan Robert Bruce Findler menyajikan dua pendekatan untuk mendefinisikan semantik program yang ditulis dalam dua bahasa pemrograman, merawat data tertentu yang didefinisikan dalam satu bahasa dan digunakan dalam yang lain. The benjolan embedding memungkinkan nilai-nilai yang dibuat dalam satu bahasa ke bahasa muncul dalam kode lain yang berjalan, tetapi ini hanya bisa dilalui sekitar, tidak dioperasikan pada (atau mungkin dioperasikan oleh hanya antarmuka kecil). The embedding alami memungkinkan nilai-nilai dalam satu bahasa yang akan digunakan dalam lain dengan melakukan apa yang disebut cor lintas bahasa , yang mengubah nilai dari satu bahasa ke bahasa yang lain.

Makalah JNI Light: Model Operasional untuk Core JNI oleh Gang Tan menyajikan semantik formal tentang cara kerja JNI yang ada. Berbeda dengan makalah sebelumnya, ini adalah formalisasi banyak detail tingkat rendah dari apa yang terjadi, daripada mencoba untuk mengeksplorasi masalah dari perspektif dasar.

Bekerja pada panggilan fungsi asing jenis-memeriksa, seperti Memeriksa Jenis Keamanan Panggilan Fungsi Asing oleh Michael Furr dan Jeffrey Foster, juga menyediakan kerangka kerja formal di mana untuk frase sistem tipe dan membuktikan kesehatannya.

Melihat referensi dalam makalah ini dan menemukan di mana mereka dikutip menggunakan google scholar akan membantu Anda menemukan gambaran yang lebih menyeluruh tentang apa yang telah dilakukan di daerah tersebut.


10

Menindaklanjuti komentar Marc, saya ingin memperbaiki catatan kesalahan. Wadler tidak memperkenalkan konsep menyalahkan, yang disebabkan oleh Findler dan Felleisen , juga tidak menyalahkan karena memediasi antara berbagai bahasa, yang berasal dari makalah saya tahun 2006 .

Namun, Marc sepenuhnya benar dalam hal menyalahkan, dan makalah Matthews yang Dave tunjukkan juga membahas masalah ini.


1
Makalah "Program yang diketik dengan baik" memang memberikan kutipan yang benar, dan mengklaim kontribusi spesifiknya sebagai memberikan "pandangan yang seragam tentang pekerjaan terkini pada kontrak, tipe bertahap, dan tipe hibrida dengan memperkenalkan gagasan menyalahkan (dari kontrak) ke sistem tipe dengan gips (mirip dengan bahasa antara yang digunakan untuk tipe gradual dan hybrid), menghasilkan sistem yang kami sebut tipe evolusi. "
sclv

2
Saya minta maaf Sam karena gagal memberikan kredit penuh kepada semua orang yang memiliki andil atas asal-usul "menyalahkan". Kebetulan makalah-makalah itu yang ditulis bersama Wadler yang mengenalkan saya pada ide itu dan yang paling saya kenal.
Marc Hamann

9

Meskipun banyak yang tidak secara langsung berhubungan, satu hal yang terlintas dalam pikiran adalah konsep "menyalahkan" oleh Wadler et al. . Ini memberi Anda dasar teoritis untuk berpikir tentang menggabungkan rezim pengetikan yang berbeda menjadi satu kesatuan yang koheren.

Pada dasarnya, menyalahkan memungkinkan Anda untuk menggabungkan bahasa dengan jaminan jenis yang lebih lemah dengan bahasa yang memiliki jaminan jenis yang lebih kuat tanpa kehilangan semua manfaat dari jaminan yang kuat. Idenya adalah bahwa bagian-bagian dari sistem dengan jaminan yang lebih lemah akan mendapatkan "kesalahan" jika hal-hal tertentu salah, melokalkan kesalahan tipe runtime.

Semoga Anda bisa melihat bagaimana itu mungkin berguna untuk FFI dan binding yang berlaku untuk bahasa dengan berbagai jenis sistem.

Sunting: Lihat jawaban Sam TH untuk sejarah intelektual yang lebih lengkap tentang konsep "menyalahkan".

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.