CLU (linguagem de programação) - CLU (programming language)

CLU
Paradigma multiparadigma : orientado a objetos , procedimental
Projetado por Barbara Liskov e seus alunos
Desenvolvedor Instituto de Tecnologia de Massachusetts
Apareceu pela primeira vez 1975 ; 46 anos atrás ( 1975 )
Versão estável
Native CLU 1.5 ( SPARC , VAX ) / 26 de maio de 1989 ; 32 anos atras ( 26/05/1989 )

CLU portátil / 6 de novembro de 2009 ; 11 anos atrás ( 06-11-2009 )

Disciplina de digitação Forte
Local na rede Internet pmg .csail .mit .edu / CLU .html
Implementações principais
CLU PDP-10, CLU nativa, CLU portátil, clu2c
Influenciado por
ALGOL 60 , Lisp , Simula , Alphard
Influenciado
Ada , Argus , C ++ , Lua , Python , Ruby , Sather , Swift

CLU é uma linguagem de programação criada no Massachusetts Institute of Technology (MIT) por Barbara Liskov e seus alunos a partir de 1973. Embora não tenha tido uso extensivo, ela introduziu muitos recursos que são amplamente usados ​​agora e são vistos como um passo em frente o desenvolvimento de programação orientada a objetos (OOP).

As principais contribuições incluem tipos de dados abstratos , chamada por compartilhamento , iteradores , vários valores de retorno (uma forma de atribuição paralela ), tipos parametrizados de segurança de tipo e tipos de variantes de segurança de tipo . Também é notável pelo uso de classes com construtores e métodos, mas sem herança .

Clusters

A sintaxe do CLU era baseada no ALGOL , então o ponto de partida para a maioria dos novos designs de linguagem. A adição principal foi o conceito de cluster , sistema de extensão de tipo CLU e a raiz do nome da linguagem (CLUster). Os clusters correspondem geralmente ao conceito de uma "classe" em uma linguagem OO. Por exemplo, aqui está a sintaxe CLU para um cluster que implementa números complexos :

    complex_number = cluster is add, subtract, multiply, ...
        rep = record [ real_part: real, imag_part: real ]
        add = proc ... end add;
        subtract = proc ... end subtract;
        multiply = proc ... end multiply;
        ...
    end complex_number;

Um cluster é um módulo que encapsula todos os seus componentes, exceto aqueles explicitamente nomeados na cláusula "is". Eles correspondem aos componentes públicos de uma classe em linguagens OO recentes. Um cluster também define um tipo que pode ser nomeado fora do cluster (neste caso, "complex_number"), mas seu tipo de representação (rep) está oculto para clientes externos.

Os nomes de cluster são globais e nenhum mecanismo de namespace foi fornecido para agrupar clusters ou permitir que eles sejam criados "localmente" dentro de outros clusters.

CLU não executa conversões de tipo implícitas . Em um cluster, as conversões de tipo explícitas para cima e para baixo mudam entre o tipo abstrato e a representação. Existe um tipo universal any , e um procedimento force [] para verificar se um objeto é de um determinado tipo. Os objetos podem ser mutáveis ​​ou imutáveis, sendo os últimos tipos básicos , como inteiros, booleanos, caracteres e strings.

Outras características

Outra característica importante do sistema de tipo CLU são os iteradores , que retornam objetos de uma coleção em série, um após o outro. Os iteradores oferecem uma interface de programação de aplicativo (API) idêntica, independentemente dos dados com os quais estão sendo usados. Assim, o iterador para uma coleção de complex_numbers pode ser usado alternadamente com aquele para uma matriz de integers. Uma característica distintiva dos iteradores CLU é que eles são implementados como co-rotinas, com cada valor sendo fornecido ao chamador por meio de uma declaração de rendimento . Iteradores como aqueles em CLU agora são um recurso comum de muitas linguagens modernas, como C #, Ruby e Python, embora recentemente eles sejam freqüentemente chamados de geradores.

CLU também inclui tratamento de exceções , com base em várias tentativas em outros idiomas; exceções são levantadas usando signale tratadas com except. Ao contrário da maioria das outras linguagens com tratamento de exceção, as exceções não são re-sinalizadas implicitamente na cadeia de chamada. Além disso, ao contrário da maioria das outras linguagens que fornecem tratamento de exceções, as exceções em CLU são consideradas parte do fluxo de execução comum e são consideradas uma maneira "normal" e eficiente de digitação segura para quebrar loops ou retornar de funções; isso permite a atribuição direta de valores de retorno "exceto quando" outras condições se aplicam. Exceções que não são capturadas nem sinalizadas explicitamente são convertidas imediatamente em uma exceção de falha especial que normalmente termina o programa.

CLU é frequentemente creditado como sendo a primeira linguagem com tipos de variantes seguros para tipos , chamados oneofs , antes que a linguagem ML os tivesse.

Uma característica distintiva final em CLU é a atribuição paralela ( atribuição múltipla), onde mais de uma variável pode aparecer no lado esquerdo de um operador de atribuição . Por exemplo, escrever x,y := y,xtrocaria valores de xe y. Da mesma forma, as funções podem retornar vários valores, como x,y,z := f(t). Atribuição paralela (embora não valores de retorno múltiplos) antecede CLU, aparecendo em CPL (1963), chamada de atribuição simultânea , mas CLU popularizou e é frequentemente creditada como a influência direta levando à atribuição paralela em linguagens posteriores.

Todos os objetos em um programa CLU residem no heap e o gerenciamento de memória é automático.

CLU suporta abstrações de dados definidos pelo usuário com parâmetros de tipo . Foi a primeira linguagem a oferecer tipos parametrizados limitados com segurança de tipo, usando cláusulas de estrutura where para expressar restrições em argumentos de tipo reais.

Influência

CLU e Ada foram as principais inspirações para os modelos C ++ .

Os mecanismos de tratamento de exceções do CLU influenciaram linguagens posteriores como C ++ e Java .

Sather , Python e C # incluem iteradores , que apareceram pela primeira vez no CLU.

Perl e Lua obtiveram atribuições múltiplas e retornos múltiplos de chamadas de função do CLU.

Python e Ruby tomaram emprestada a chamada por compartilhamento , a instrução de rendimento e a atribuição múltipla.

Referências

links externos