Esiste una teoria del linguaggio di programmazione che descriva le interfacce di funzioni estranee (FFI) e le associazioni di più lingue?


16

Esiste una teoria del linguaggio di programmazione che descriva le interfacce di funzioni estranee (FFI) e le associazioni di più lingue?

Ho chiesto alcuni problemi di implementazione su StackOverflow , che qui non è adatto. Ma vorrei chiedere dal punto di vista di questo sito e vedere cosa potrei ottenere da qui.

Apprezzo molto la tua risposta!

Grazie a Dave Clarke per la sua risposta su meta

Risposte:


17

L'articolo Semantica operativa per i programmi multilingue di Jacob Matthews e Robert Bruce Findler presenta due approcci per la definizione della semantica dei programmi scritti in due linguaggi di programmazione, occupandosi in particolare dei dati definiti in una lingua e utilizzati nell'altra. L' incorporamento forfettario consente ai valori creati in una lingua di apparire nel codice di esecuzione di un'altra, ma questi possono essere solo passati, non operati (o forse gestiti solo da una piccola interfaccia). L' incorporamento naturale consente di utilizzare i valori in una lingua nell'altra eseguendo un cosiddetto cast in più lingue , che converte i valori da una lingua all'altra.

L'articolo JNI Light: un modello operativo per il Core JNI di Gang Tan presenta una semantica formale del funzionamento di JNI esistente. Contrariamente al documento precedente, questo formalizza molti dei dettagli di basso livello di ciò che sta accadendo, piuttosto che cercare di esplorare i problemi da una prospettiva fondamentale.

Il lavoro sul controllo dei tipi di chiamate di funzioni esterne, come Verifica della sicurezza dei tipi di chiamate di funzioni esterne di Michael Furr e Jeffrey Foster, fornisce anche un quadro formale in cui formulare il sistema dei tipi e dimostrarne la solidità.

Guardare i riferimenti in questi documenti e scoprire dove sono citati utilizzando google scholar ti aiuterà a scoprire un quadro più completo di ciò che è stato fatto nell'area.


10

In seguito al commento di Marc, voglio correggere il record sulla colpa. Wadler non ha introdotto il concetto di colpa, che è dovuto a Findler e Felleisen , né ha introdotto la colpa per la mediazione tra lingue diverse, che ha origine nel mio documento del 2006 .

Tuttavia, Marc ha completamente ragione sul punto di colpa, e il documento di Matthews che Dave sottolinea discute anche di questo problema.


1
Il documento "Well Typed Programs" fornisce effettivamente le citazioni corrette e sostiene il suo contributo specifico fornendo "una visione uniforme del lavoro recente su contratti, tipi graduali e tipi ibridi introducendo una nozione di colpa (dai contratti) a un sistema di tipi con i cast (simili ai linguaggi intermedi utilizzati per i tipi graduali e ibridi), producendo un sistema che chiamiamo tipi evolutivi ".
sclv,

2
Mi scuso con Sam per non aver dato pieno credito a tutti coloro che avevano una parte per le origini della "colpa". Sono appena successe le carte che Wadler ha scritto insieme che mi hanno fatto conoscere l'idea e con cui ho più familiarità.
Marc Hamann,

9

Sebbene molti non siano ovviamente direttamente correlati, una cosa che viene in mente è il concetto di "colpa" di Wadler et al. . Questo ti dà una base teorica per pensare a mescolare insieme diversi regimi di battitura in un insieme coerente.

In sostanza, la colpa ti consente di mescolare le lingue con garanzie di tipo più deboli con lingue che hanno garanzie di tipo più forti senza perdere tutti i vantaggi delle garanzie forti. L'idea è che le parti del sistema con garanzie più deboli avranno la "colpa" se certe cose vanno male, localizzando errori di tipo runtime.

Spero che tu possa vedere come ciò potrebbe essere utile per FFI e associazioni che si applicano alle lingue con sistemi di tipo variabile.

Modifica: vedi la risposta di Sam TH per una storia intellettuale più completa del concetto di "colpa".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.