Domanda

Esiste solo in lingue staticamente tipizzati? Ed è solo lì quando la lingua non è fortemente tipizzato (vale a dire non Java hanno uno)? Inoltre, dove ci si appartiene? - in fase di compilazione supponendo che è un linguaggio compilato

In generale, sono le regole quando il tipo è ambigua dettata dalla specifica del linguaggio o di sinistra fino alla realizzazione?

È stato utile?

Soluzione

Tipo inferenza è una caratteristica di alcuni linguaggi staticamente tipizzati. E 'fatto dal compilatore per assegnare i tipi di entità che altrimenti non hanno alcun annotazioni di tipo. Il compilatore in modo efficace solo 'riempie' le informazioni di tipo statico, a nome del programmatore.

L'inferenza di tipo tende a lavorare più male in lingue con molti coercizioni implicite e ambiguità, quindi la maggior parte di tipo inferenced lingue sono lingue funzionali con poco in termini di coercizioni, sovraccarico, ecc.

Tipo inferenza è parte della specifica del linguaggio, per l'esempio l'F # spec va in grande dettaglio circa l'algoritmo di inferenza di tipo e le regole, in quanto ciò determina in modo efficace 'quello che è un programma legale'.

Anche se alcuni (la maggior parte?) Supporto dei linguaggi di alcune forme limitate di inferenza di tipo (ad esempio 'var' in C #), per la maggior parte persone usano 'inferenza di tipo' per riferirsi alle lingue in cui la stragrande maggioranza dei tipi sono desunti piuttosto che esplicito (ad esempio in F #, metodi e funzioni firme, oltre alle variabili locali, sono tipicamente dedurre, contrariamente a C # dove 'var' permette inferenza di variabili locali ma dichiarazioni di metodo richiede informazioni complete tipo).

Altri suggerimenti

Un tipo inferencer determina il tipo di una variabile dal contesto. Essa si basa su una forte tipizzazione di farlo. Ad esempio, i linguaggi funzionali sono fortemente, staticamente tipizzati ma completamente si basano su inferenza di tipo.

C # e VB.Net sono altri esempi di linguaggi staticamente tipizzati con inferenza di tipo (che forniscono per fare generici utilizzabili, ed è necessario per le query in LINQ, specificamente per supportare le proiezioni).

I linguaggi dinamici non dedurre il tipo, si è scoperto in fase di esecuzione.

Tipo di inferenza è un po 'di un compromesso raggiunto in alcuni linguaggi statici. È possibile dichiarare le variabili senza specificare il tipo, a condizione che il tipo si può dedurre al momento della compilazione . Non offre la flessibilità di battitura latente, ma si ottiene la sicurezza di tipo e non si dispone di scrivere tanto.

l'Wikipedia articolo .

Un tipo inferencer è tutto ciò che deduce tipi statico, utilizzando un algoritmo di inferenza di tipo. Come tale, essa non è solo una caratteristica dei linguaggi statici.

È possibile costruire uno strumento di analisi statica per linguaggi dinamici, o quelli con le conversioni di tipo non sicuri o implicite, e l'inferenza di tipo sarà una parte importante del suo lavoro. Tuttavia, inferenza di tipo per le lingue con sistemi di tipo non sicuri o dinamici, o che comprendono conversioni implicite, non può essere utilizzato per dimostrare la sicurezza tipo di un programma nel caso generale.

Come viene utilizzato questo tipo di inferenza:

  • per evitare le annotazioni di tipo in linguaggi statici,
  • nell'ottimizzazione compilatori per i linguaggi dinamici (cioè per Scheme, Sé e Python),
  • In bug strumenti di controllo, compilatori e analisi di sicurezza per i linguaggi dinamici.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top