|
Já faz tempo que eu digo que iria criar uma nova linguagem de programação. E já havia dito que seu nome seria Graphol. Mesmo aqui neste blog, já favia mencionado o nome Graphol no post Siga um Louco. Creio que tenha sido a primeira vez que falei publicamente sobre Graphol, embora nunca tenha entrado em detalhes. Pessoalmente só havia comentado sobre o que seria Graphol para pouquíssimas pessoas. Mas chegou a hora de disponibilizar a ideia para todos. E realmente gostaria de fazer isso com a sua ajuda. Quero que esta linguagem seja também sua. Ela está sendo pensada agora. Se você gostar da idéia geral, se achar que realmente pode ‘dar samba’, é a hora de entrar e fazer a diferença. Pense em todas aquelas coisas legais que você sempre quis ver em uma mesma linguagem de programação? Talvez Graphol seja a linguagem que poderá transformar isso em realidade até porque estou te convidando, formalmente, a fazer parte desta idealização. Convido você a conhecer o site onde estamos rascunhando a linguagem Graphol. Mas do que se trata a linguagem?O próprio nome Graphol já carrega um significado, já mostra à que veio. Acho que deve ser fácil perceber que o nome Graphol vem de graph (grafo). No meu curso de faculdade eu fui ‘poluído’ pela ideia de grafo de várias maneiras. Minha iniciação científica estava relacionada ao emprego de grafos para determinar regras de negócio em sistemas munidos com IA. No meu projeto final eu criei um CMS onde os conteúdos, os relacionamentos entre os conteúdos, e o relacionamento entre usuários, permissões e conteúdos eram representados por grafos. Pessoas e conteúdos eram nodos e seus relacionamentos eram arestas. Se um usuário altera um conteúdo, significa a criação de uma aresta com a tag ‘alteração’ ligando o nodo daquela pessoa ao nodo daquele conteúdo. Para ver todos os documentos alterados por uma pessoa, bastava perguntar ao CMS por todos os nodos ligados àquela pessoa por nós ‘alteração’. E não muito tempo depois, comecei a pensar que, a exemplo do CMS, como seria legal implementar uma linguagem que, nativamente, atuasse sobre grafos. Uma linguagem orientada a grafos. “Graph Oriented Language”, Linguagem Orientada a Grafos. Um novo paradigma? Talvez. Fato é que eu estou incubando esta ideia e vontade de realização a quase uma década debatendo sobre o como seria esta linguagem com pouquíssimas pessoas. Acho que com umas 5. Entre elas @Chavao e @LucasZeta que estão comigo no projeto. Ainda não tenho nada de fato. Nem uma especificação formal. Mas acredito que tornar pública a ideia e convocar pessoas interessadas pode ser a única forma de fazer algo acontecer. Mas antes de dizer sobre Graphol, segue alguns problemas que Graphol terá que se preocupar em solucionar para ser uma linguagem respeitada: Composição Vs HerançaLogo quando foi lançada por Simula 67 e redescoberta por Smalltalk-80, a ideia de herança entre classes sempre foi considerada um dos principais recursos para reuso de código e uma das grandes justificativas para a própria orientação a objetos. Mas, com o tempo, percebemos que a ideia de composição/agregação entre objetos é superior em vários aspectos à ideia de herança. Vários programadores passam a preferir a ideia de composição/agregação entre objetos. A maioria dos Designer Partners dão preferência a ‘cooperação’ entre objetos e mecanismos para ‘delegação de trabalho’ entre os mesmos do que uma relação ‘cristalizada’ em tempo de definição de classes que é dado pelo mecanismo herança. Mas é interessante perceber que a ideia focal na maioria das linguagens orientadas a objetos é a herança e não a composição. Para isso basta perceber no esforço envolvido para o programador em implementar uma herança entre classes e uma composição entre elas. Imaginemos um caso hipotético onde queremos que uma classe B reuse as funcionalidades da classe A. Na grande maioria das linguagens, quando tratamos de herança, significa colocar um simples complemento na definição de B como, por exemplo, ‘Class B extends A’. Pronto! B passará a ter acesso a todas as funcionalidades da Classe A. Já, para implementar uma composição, salvo honrosas exceções como o Ruby, normalmente precisamos: Dado as vantagens da composição sobre a herança, a implementação do primeiro deveria no mínimo ser tão fácil de implementar quanto o segundo. Graphol deveria privilegiar a cooperação entre objetos e delegação de responsabilidade ao invés da implementação estrutural de relações de herança. Ruby achou um caminho com o ‘Forwardable’. Creio realmente que este seja um caminho. Mas ainda podemos fazer ainda melhor. Orientação a AspectosA orientação a objetos é ótima para definir comportamentos análogos verticalmente, isto é, comportamentos herdados via estrutura de herança. Mas, sozinha, não apresenta uma boa solução para tratamento de funcionalidades secundárias que devem se repetir ‘horizontalmente’ por esta estrutura. E, ao encontro desta questão, surgiu a orientação a aspectos. Acredito que seria ótimo se Graphol, por estrutura, pudesse nativamente, suportar a orientação a aspecto, sem necessitar destas extensões a linguagem raiz. Algumas linguagens, com bons recursos de metaprogramação, são capazes disso. Mas estou falando de algo ainda mais natural para a linguagem. Programação Concorrente em GeralAcho que não há dúvidas que uma nova linguagem deve se preocupar com concorrência. Ela deve facilitar ao máximo a vida do programador neste aspecto. Podemos pensar em forks, threads, corrotinas, semáforos, memória compartilhada. Programar de forma concorrente não é fácil. Não costuma ser natural ao programador. Mas, por outro lado nunca foi tão necessário. A forma usual de aumentar a capacidade computacional tem sido multiplicar núcleos, processadores, nós de uma nuvem etc. Graphol precisa ajudar o programador a tirar proveito disso. E, finalmente, o que é Graphol?Introdução Inicialmente podemos entender os nós como os velhos objetos OO. Não criamos classes, criamos diretamente estes nodos. O function em Javascript é uma boa aproximação do que é um nodo. Uma característica que acho importante é que um nodo possa receber tags. Tags tem várias utilidades. Ajudarão em buscas globais a estes objetos [Para todos os nós com a tag 'documento' faça], assim como fazer as vezes de uma interface: O objeto x tem a tag ‘pessoa’? Arestas relacionam estes nodos. Alguns também carregarão uma semântica especial, conforme veremos. Arestas também poderiam ter tipos e/ou nomes. Então, poderíamos fazer facilmente a construção: Composição Vs Herança Orientação a Aspectos Programação Concorrente em Geral Padrão Observer (Coração do MVC Clássico) Metaprogramação ConclusãoMeu objetivo não é esgotar o assunto aqui, até porque Graphol é uma linguagem que ainda será inventada! Este post é para abrir possibilidades e gerar discussão. Entendam o post como quase um início de bainstorming. Abraços e, por favor, já que você leu tudo e chegou até aqui: opine! Deixe um Comentário
|
Posts (RSS)