Domanda

Le definizioni che ho incastrato sembrano indicare che esprimono la stessa idea. Questo è che la relazione tra i tipi di registrazione è determinata dai loro campi (o proprietà) piuttosto che dai loro nomi. Anche le loro pagine di wikipedia sembrano indicare la stessa idea:

.

a Sistema di tipo strutturale (o sistema di tipo basato sulla proprietà) è una classe importante di Digitare il sistema in cui il tipo di compatibilità ed equivalenza sono determinati dalla struttura o dalla definizione effettiva del tipo e non da altre caratteristiche come il suo nome o il luogo di dichiarazione.

.

Nella teoria del tipo di linguaggio programmazione, polimorfismo a riga è una specie di polimorfismo che consente uno di Scrivi programmi che sono polimorfi sui tipi di campo dei record (noti anche come righe, quindi polimorfismo a riga).

Ci sono differenze tra loro?

È stato utile?

Soluzione

I sistemi di tipo strutturale non hanno necessariamente nulla a che fare con i record. Ad esempio, potresti avere un sistema in cui:

data Bool = False | True
data Two = Zero | One
.

sono in realtà lo stesso tipo, perché sono entrambi tipi con due costruttori nulleri. Inoltre, non richiede necessariamente molto sui record, perché anche se i tipi sono determinati dalla loro struttura, i due record:

{s : S ; t : T}
{s : S ; t : T ; u : U}
.

non sono la stessa struttura, quindi potresti avere la digitazione strutturale senza che non ci sia nulla di conveniente di questi due tipi.

Allo stesso modo, il polimorfismo di riga in isolamento non ti dice molto --- solo che puoi quantificare le righe e probabilmente usarle con E.G. un tipo di record parametrizzato da una riga. Ma ci sono tutti i tipi di variazioni su ciò che puoi fare con le righe che specificano davvero le capacità del sistema.

Di solito con i record strutturali, le persone vogliono almeno sottotyping. Ciò ti consente di dire che il mio secondo tipo di record sopra è un sottotipo del primo, in modo da poter passare quest'ultimo a qualcosa che aspetta il primo. Un modo tipico per farlo con il polimorfismo a riga è quello di quantificare invece i campi extra che possono essere presenti e utilizzare una specie di concatenazione di riga.

Quindi forse una domanda più mirata è qual è la differenza tra sottotyping e quantificatori. La risposta a questo è generalmente che il sottotying non può esprimere tipi quantificati a meno che la variabile quantificata non si verifica esclusivamente esclusivamente covariantly o contravariantemente. Quindi potremmo dire:

(forall a. a -> T) ~= Top -> T
(forall a. T -> a) ~= T -> Bot
.

Ma per un tipo come forall a. a -> a, non è presente un tipo da scegliere per a senza perdere informazioni.

Questo si estende per i sistemi con Just Registra il polimorfism di riga del sottomesso VS. (appropriato). Tuttavia, se si dispone di un sistema con sottotyping e quantificatori e sottotying può essere applicato ai tipi quantificati, le differenze potrebbero essere molto più sottili. Avere entrambi quantificatori e sottotyping può diventare piuttosto complicato, però (non quel polimorfismo di fila è facile da ottenere a destra, neanche).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top