LINQ: Por que é chamado de “Sintaxe de Compreensão”

Por que a syntax LINQ a seguir (algumas vezes chamada de syntax de “consulta”) é chamada de syntax de “compreensão”? O que está sendo compreendido (certamente isso está errado)? Ou, o que é representado de forma abrangente (talvez eu esteja no caminho certo, agora)?

Eu suspeito que isso esteja relacionado ao segundo significado do Comprehend :

para receber ou abraçar; include; compreender

Essa syntax tem a ver com a definição do que deve ser incluído em um conjunto.

Ele vem do termo mais compreensivo de linguagem List Compreensão, que muitos idiomas seguem. A história aparentemente é:

A linguagem de programação SETL (anos 1960) teve uma construção de formação de conjunto, eo sistema de álgebra computacional AXIOM (1973) tem uma construção semelhante que processa streams, mas o primeiro uso do termo “compreensão” para tais construções foi em Rod Burstall e John. A descrição de Darlington de sua linguagem de functional programming NPL de 1977.

O FOLDOC também ecoa isso:

De acordo com uma nota de Rishiyur Nikhil (agosto de 1992), o próprio termo parece ter sido cunhado por Phil Wadler por volta de 1983-5, embora o próprio construto de programação remonte muito mais (provavelmente Jack Schwartz e a linguagem SETL).

O termo “compreensão da lista” aparece nas referências abaixo.

A referência mais antiga à notação está na descrição de Rod Burstall e John Darlington de sua linguagem, NPL.

[“O Manual OL” Philip Wadler, Quentin Miller e Martin Raskovsky, provavelmente 1983-1985].

[“Como replace a falha por uma lista de sucessos” FPCA setembro de 1985, Nancy, França, pp. 113-146].

Eu acho que este artigo pode esclarecer http://dl.acm.org/citation.cfm?id=181564 Ou seja, eles argumentam e definem (eu acho) o que é uma syntax de compreensão. É lançado em 1994 e talvez tenha afetado os conceitos de design do LINQ.

Meu entendimento do termo syntax de compreensão linq como desenvolvedor .NET é que ele permite que você escreva linq em uma linguagem de consulta de estilo familiar. À medida que o entendimento de linq de uma pessoa melhora, ela pode passar para o que é conhecido no .NET como syntax do método de extensão, que é também como o compilador .NET interpretará o linq no tempo de compilation.

Como o termo “compreensão” e “abrangente” é muito usado na língua inglesa para indicar o “todo” e “completude”, um significado da syntax de compreensão poderia ser uma syntax que permite construir expressões que são capazes de gerar conjuntos de valores. que “inclua todos os valores” (compreenda) que respeitam as regras expressas por essas expressões.

Outro significado poderia estar mais relacionado à geração de subconjuntos de valores (listas) a partir de algum conjunto especificado e, portanto, o subconjunto de valores que pertence ao conjunto inicial e é “compreendido” no conjunto original. Por essa razão, a syntax de compreensão pode ser a syntax para os construtos das linguagens de programação que podem gerar valores de subconjuntos incluídos em um conjunto original especificado.