Share via


Cenni preliminari sull'interoperabilità dei linguaggi

Aggiornamento: novembre 2007

L'interoperabilità dei linguaggi è la capacità del codice di interagire con codice scritto con un linguaggio di programmazione diverso. L'interoperabilità dei linguaggi estende le possibilità di riutilizzo del codice e incrementa pertanto l'efficienza del processo di sviluppo.

Assicurare l'interoperabilità dei linguaggi è sempre stato un obiettivo ambizioso. Gli sviluppatori utilizzano infatti una gran varietà di tecnologie e strumenti, ciascuno dei quali può supportare funzionalità e tipi diversi. I compilatori dei linguaggi e gli strumenti che si avvalgono di Common Language Runtime beneficiano comunque del supporto che il runtime incorpora per l'interoperabilità dei linguaggi.

Common Language Runtime fornisce le necessarie basi per l'interoperabilità dei linguaggi specificando e applicando un sistema di tipi comuni e fornendo metadati. Poiché tutti i linguaggi che si avvalgono del runtime osservano le regole del sistema di tipi comuni per la definizione e l'uso dei tipi, i diversi linguaggi utilizzano i tipi nello stesso modo. I metadati contribuiscono all'interoperabilità dei linguaggi definendo un meccanismo unico per l'archiviazione e il recupero delle informazioni sui tipi. I compilatori archiviano le informazioni sui tipi come metadati e Common Language Runtime utilizza tali informazioni per fornire servizi durante l'esecuzione. Il runtime è in grado di gestire l'esecuzione di applicazioni multilinguaggio perché tutte le informazioni sui tipi vengono archiviate e recuperate allo stesso modo, indipendentemente dal linguaggio in cui è scritto il codice.

Il codice gestito beneficia del supporto che il runtime offre per l'interoperabilità dei linguaggi, come descritto di seguito:

  • I tipi possono ereditare l'implementazione da altri tipi, passare oggetti ai metodi di un altro tipo e chiamare metodi definiti in altri tipi, indipendentemente dal linguaggio in cui sono implementati.

  • La conoscenza di un solo ambiente (il MSIL e i metadati per Common Language Runtime) consente ai debugger, ai profiler e ad altri strumenti di supportare tutti i linguaggi di programmazione che si avvalgono del runtime.

  • La gestione delle eccezioni è coerente tra i diversi linguaggi. Il proprio codice, scritto in un determinato linguaggio, può generare un'eccezione che verrà correttamente intercettata anche da un oggetto scritto in un altro linguaggio.

Anche se il runtime fornisce a tutto il codice gestito il supporto per l'esecuzione in un ambiente multilinguaggio, non è garantito che le funzionalità dei propri tipi potranno essere correttamente utilizzate dai linguaggi di programmazione adottati da altri sviluppatori. Tale limitazione è principalmente dovuta al fatto che il compilatore di ciascun linguaggio che si avvale del runtime utilizza i metadati e il sistema di tipi per supportare un insieme di funzionalità specifico del proprio linguaggio. Nei casi in cui non si sappia in che linguaggio verrà scritto il codice chiamante, non sarà facile sapere se le funzionalità esposte dal proprio componente risulteranno accessibili. Se ad esempio il proprio linguaggio fornisce il supporto per gli unsigned integer, è possibile che si crei un metodo che accetta un parametro di tipo UInt32. Tale metodo risulterà però inutilizzabile da un linguaggio che non adotta il tipo unsigned integer.

Per essere certi che il proprio codice gestito sia accessibile ad altri sviluppatori indipendentemente dal linguaggio di programmazione da essi adottato, .NET Framework fornisce le specifiche Specifiche CLS (Common Language Specification) (CLS), che descrivono un set di funzionalità fondamentali dei linguaggi e definiscono le regole per l'utilizzo di tali funzionalità. Per ulteriori informazioni sulla compatibilità con CLS di componenti e strumenti, vedere Scrittura di codice compatibile con CLS.

Vedere anche

Concetti

Specifiche CLS (Common Language Specification)

Scrittura di codice compatibile con CLS

Altre risorse

Cenni preliminari su .NET Framework

Sistema di tipi comuni

Metadati e componenti auto-descrittivi