Self (linguagem de programação)
| Self | |
|---|---|
| Paradigma | orientação a objeto |
| Surgido em | 1986 |
| Criado por | David Ungar, Randall Smith |
| Estilo de tipagem: | forte, dinâmica |
| Influenciada por | Smalltalk |
| Influenciou | NewtonScript, JavaScript, Io, Cel, Agora, Squeak, Lisaac, Lua, Factor, REBOL |
| Página oficial | selflanguage.org |
Self é uma linguagem de programação orientada a objeto , com base no conceito de prototipagem. Foi usada principalmente como um sistema de teste experimental para o projeto de linguagens nos anos 1980 e 1990. Em 2006, Self ainda estava sendo desenvolvida como parte do projeto Klein, que era uma máquina virtual Self escrita inteiramente em Self. A última versão principal é a 4.3, que foi lançada em julho de 2006. Em 2007, o projeto Klein deixou de estar ativo.
Várias técnicas de compilação just-in-time foram pioneiras ou melhoradas na pesquisa da linguagem Self pois estas eram necessárias para se permitir linguagem orientada a objetos de nível bastante elevado para executar até a metade da velocidade de um código C otimizado. Estas técnicas foram implantadas depois na máquina virtual HotSpot da linguagem de programação Java.
Índice |
[editar] História
Self foi projetada principalmente por David Ungar e Randall Smith, em 1986, enquanto trabalhavam na Xerox PARC. O seu objetivo era fazer avançar o estado da arte em pesquisa de linguagem de programação orientada a objeto, uma vez que a Smalltalk-80 fora lançada pelos laboratórios e havia começado a ser levada a sério pela indústria. Eles se mudaram para a Universidade de Stanford e continuaram a trabalhar sobre a linguagem, construindo o primeiro compilador Self funcional em 1987. Nesse ponto, o foco mudou para tentar se trazer todo um sistema para a Self, e não somente a linguagem.
A primeira versão pública foi lançada em 1990, e no ano seguinte a equipe desenvolvedora se mudou para a Sun Microsystems onde continuou a trabalhar na linguagem. Vários novas versões se seguiram, até ficar em grande parte adormecida, em 1995, na versão 4.0. A versão mais recente, 4.3, foi lançada em 2006 e roda em Mac OS X e Solaris. A nova versão está sendo desenvolvida para MacOS X e Linux por um grupo de programadores independentes, que levou o projeto alguns meses atrás, e eles estão prestes a lançar uma versão 4.4 que agora está na fase de beta 4.
Self também inspirou uma série de linguagens baseadas em seus conceitos. Mais notável, talvez, foi a linguagem NewtonScript para o Apple Newton e a linguagem JavaScript utilizada principalmente para páginas da web dinâmicas em todos os navegadores modernos. Outros exemplos incluem a Io, a Cel, a Lisaac e a Agora. O sistema de objetos distribuídos da IBM Tivoli Framework, desenvolvido em 1990, foi, no nível mais baixo, um protótipo de sistema baseados em objetos inspirado pela Self.
[editar] Linguagens de programação baseadas em protótipos
Linguagens tradicionais OO baseada em classe se baseiam em uma dualidade arraigada:
- Classes definem as qualidades básicas e os comportamentos dos objetos.
- Instâncias de objetos são manifestações particulares de uma classe.
Por exemplo, suponha que os objetos da classe Veiculo tem um nome e a capacidade de realizar várias ações, tais como dirigir ao trabalho e entregar materiais de construção. Carro de João é uma instância particular (objeto) da classe Veiculo com o nome "Carro de João". Em teoria, pode-se então enviar uma mensagem para Carro de João, dizendo a ele para entregar materiais de construção.
Este exemplo mostra um dos problemas com esta abordagem: o carro de Bob, é um carro desportivo, e, portanto, não deveria ser capaz de transportar e entregar materiais de construção (em qualquer sentido), mas esta é uma função que Veículos foram modelados para ter. Um modelo mais útil resulta da utilização de subclassing para criar especializações de Veículos; por exemplo Carros esporte e Caminhão aberto. Somente objetos da classe Caminhão aberto precisam fornecer um mecanismo para entrega de materiais de construção; carros esporte, que são mal adaptados para esse tipo de trabalho, só precisam andar rápido. No entanto, este modelo mais a fundo requer maior perspicácia, que só surge a medida que os problemas aparecem.
Esta questão é um dos fatores que motivam protótipos. A menos que se possa prever com certeza quais as qualidades um conjunto de objetos e classes terão no futuro distante, não se pode criar uma hierarquia de classe adequadamente. Muito frequentemente o programa acabaria por ter necessidade adicional de comportamentos, e as seções do sistema teriam de ser re-projetadas (ou refatoradas) para quebrar os objetos de uma forma diferente.
Em Self, e outras linguagens baseadas em protótipos, a dualidade entre as classes e instâncias de objeto é eliminada. Em vez de ter uma "instância" de um objeto que é baseado em alguma "classe", em Self se faz uma cópia de um objeto existente, e se efetua mudanças nela. Então carro de Bob seria criado como uma cópia de um objeto "veículo" existente e, em seguida adicionando-se o método dirigir mais rápido, modelando o fato de que ocorre ser um Porsche 911. Objetos básicos que são usados principalmente para fazer cópias são conhecidos como protótipos. Esta técnica é reivindica simplificar bastante o dinamismo. Se um objeto existente (ou conjunto de objetos) prova ser um modelo inadequado, um programador pode simplesmente criar um objeto modificado com o comportamento correto, e utilizá-lo. Códigos que usam os objetos existentes não são alterados.
[editar] Descrição da linguagem
Objetos Self são um conjunto de "slots". Slots são métodos de acesso que retornam valores, e colocando uma vírgula após o nome de um slot se define o seu valor. Por exemplo, um slot chamado "nome",
myPerson nome
retorna o valor em nome, e
myPerson nome:'foo'
o define.
Self, como Smalltalk, usa blocos para o controle de fluxo e outras funções. Métodos são objetos que contêm código, além de slots (que usam de argumentos e valores temporários), e podem ser colocados em um slot Self, tal como qualquer outro objeto: um número, por exemplo. A sintaxe é a mesma nos dois casos.
Note que não há distinção em Self entre campos e métodos: tudo é um slot. Uma vez que acessar slots através de mensagens constitui a maioria da sintaxe em Self, muitas mensagens são enviadas para "self", e "self" pode ser deixado de fora (daí o nome).
[editar] Sintaxe básica
A sintaxe para acessar slots é semelhante à de Smalltalk. Três tipos de mensagens estão disponíveis:
- unária
receiver slot_name- binária
receiver + argument- palavra chave
receiver keyword: arg1 With: arg2
Todas as mensagens retornam resultados, de modo que o receptor (se houver) e os argumentos podem ser eles mesmas o resultado de outras mensagens. Seguir uma mensagem por um ponto (".") significa que Self irá descartar o valor retornado. Por exemplo:
'Alô, Mundo!' print.
Esta é a versão Self do programa Alô mundo. A sintaxe ' indica um objeto string literal. Outros literais incluem números, blocos e objetos em geral.
Agrupamentos podem ser forçados usando-se parênteses. Na ausência de agrupamentos explícitos, as mensagens unárias são considerados como tendo a precedência mais alta seguido pelas binárias (agrupando da esquerda para a direita) e as palavras-chave com os mais baixos. O uso de palavras-chave para a atribuição levaria a alguns parênteses extras, onde expressões também teriam mensagens-chave, de modo a evitar que Self exigisse que a primeira parte de uma nova mensagem de palavra-chave seletora iniciasse com uma letra minúscula, e suas partes posteriores começassem com uma letra maiúscula.
[editar] Ver também
- Cecil (linguagem de programação)
- Smalltalk
- Io (linguagem de programação)
- Linguagem de programação NewtonScript
- Linguagem de programação JavaScript
- Linguagem de programação Lisaac
- Lua (linguagem de programação)
[editar] Ligações externas
- Artigos publicados sobre Self
- Página oficial Self
- Página oficial Self na Sun Microsystems
- Fonte Alternativa de trabalhos sobre Self da UCSB (espelho para a página de jornais Sun)
- Recursos Self no Cetus Links
- Projecto Merlin
- Self portado para Linux (sem muitas das otimizações)
- Página de Gordon sobre Self
- Video demonstrando self
- dSelf: distributed extension to the delegation and language SELF