Criando Linguagens de Programação (Declarativas)

December 4th, 2003 § 7 comments

Criar uma linguagem de programação não é uma tarefa fácil. Para os interessados no assunto, uma discussão na lista ll1 rendeu uma lista de questões a se fazer quando da criação de uma linguagem de programação. Obviamente, é uma lista genérica, mas dá uma idéia muito boa do que está envolvido no processo.

§ 7 Responses to Criando Linguagens de Programação (Declarativas)"

  • A lista de questões do OP é bem extensa para ser toda comentada mas….

    Não é uma tarefa fácil, mas acho que em muitos casos, é uma terefa sem um significado maior. Acho que não basta apenas ‘criar’ uma nova linguagem incluindo meia dúzia de facilidades novas e tracar alguns simbolos. Continuando assim, vamos chegar em 3018 ainda podendo escolher entre SNOBOL, Pascal, Basic, C, Ada, Java, etc, cada uma com suas vantagens e desvantagens. Para mim, isto não é muita evolução.

    Ok. Criticar é fácil. Mas e dai? Bem, ai que acho sempre que o mais importante deve vir primeiro. Mesmo que seja mais difícil. A primeira pergunta deveria ser:

    Como o ser humano (programador) irá se sentir diante da linguagem? Ele deverá se adaptar para utilizar a linguagem ou a linguagem será algo natural para ele? Não natural no sentido de ele ‘se acostumar’ com o tempo, mas de ele fazer as coisas naturalmente sem precisar pensar como máquina, sem precisar mudar o seu modo de pensar entre a resolução do problema e a implementação da mesma.

    Não considero uma armadilha pensar em linguagem script pois se tonará em uma linguagem de propósito geral. Acho que para as linguagens servirem a um propósito específico, primeiro deveriam existir meios de integrar facilmente as diversas linguagens. Alguma coisa com o inline do Perl ou Ruby (não sei se existem outras), onde é possível escrever rotinas em C sem sair do ambiente. Alguém vai falar do Jython, JRuby, J….; OK. Não trabalho com Java, mas acho que são apenas interpretadores feitos em Java ficando assim restritos ao ambiente Java.

    Quanto aos paradigmas aceitos pela linguagem, acho que deveriam ser todos ou, o máximo possível. Os problemas que surgem são os mais diversos e cada vez mais complexos. Para cada um existem os melhores métodos para a resolução.

    Portabilidade deve ser um fator importante assim como programação distribuída, concorrência etc.

    Compilada, interpretada, bytecode? Ué. As três opções. :) (OCaml não é assim?)

    Qualquer programinha mais sério necessita gerenciar dados. Ou existe uma facilidade para a integração com os SGBDs existentes ou a linguagem pode vir com um gerenciador próprio para as pequenas tarefas (SQlite?). Lembre-se que deve ser multiplataforma.

    Sendo uma linguagem de uso geral, uma integração com os ambientes gráficos é necessária (wxWindows, GTK, XUL, sei lá). Bem como algo para facilitar a geração da GUI (e que seja relativamente integrado)

    Uma IDE para o desenvolvimento pode ser interessante já que nem todos gostam do Emacs ou Vim (descontando a briga entre os dois).

    Utopia? Certamente. Mas veja que a palavra significa ‘algo que não existe’ e não ‘algo impossível’.

    Favor não considerar como ‘flame-bait’. Foi o Ronaldo que começou.

  • Criar uma linguagem de programação?

    Depois eu que sou nerd. 😛

  • Ronaldo says:

    Cris,

    Eu duvido que você não tenha escrito pelo menos um protótipo de linguagem de programação alguma vez na vida. :-)

    Aliás, o Philip Greenspun disse uma vez que qualquer sistema mais complexo contém uma sub-implementação de Lisp mal feita. Acho que isso conta também. 😛

  • Bom, eu não criei a linguagem, mas já fiz compiladores Forth para Apple CP/M e MSX. Forth pode ser interpretado por bytecode ou compilado “on the fly” (ou seja, é um compilador interativo que pega a linha de comando, monta em linguagem de máquina e executa, retornando à linha de comando). Além disso, permite que você crie sua própria sintaxe (post fixed ou infixed). Aos comandos básicos (dicionário) da linguagem, a gente vai criando outros. Em outras palavras, permite que cada um crie sua própria linguagem. Hoje, Forth está nos Mac e placas PCI (OpenFirmware), além de ter originado a mais importante linguagem para a humanidade, que é PostScript.

    Essa facilidade eu encontrei depois em Logo e, hoje, na linguagem Rebol (www.rebol.com). Tudo isto sem os odiosos e desnecessários “$”, ponto-e-vírgulas, parênteses e outros arcaísmos de linguagens dos anos 50, que só atrasam a interpretação.

    Resumindo: fazer uma linguagem é a maior moleza. Já o IDE e integração com outras bibliotecas, dá um trabalhinho extra… :)

  • Ronaldo says:

    Eu venho criando minha própria linguagem há anos, mas, como sou muito chato, nunca cheguei a implementar porque não resolvi algumas coisas que quero colocar. Fico sempre adicionando coisas novas que encontro. Eu tenho é que parar de pensar no téorico e partir para a implementação.

    Implementação de pequenas linguagens que só imitam outros eu fiz aos montes. Essa é uma área muito fascinante. Pena que não estou tendo muito tempo para mexer atualmente.

    E, realmente, criar o ambiente acessório é a parte mais trabalhosa. Integração com o sistema operacional e o ambiente gráfico, então… Mas é uma coisa que vale a pena. Nada como ver seu próprio ambiente funcionando.

  • Já pensaste em compartilhar o desenvolvimento desta linguagem? Acho muito difícil, atualmente, o desenvolvimento de algo sozinho. Pelo menos é muito mais demorado.

    Outro aspecto seria o ‘algo mais’ para que a linguagem venha a ser adotada e/ou outras pessoas auxliem no desenvolvimento.

    Que tal abrir um wiki e disponibilizar publicamente a idéia? Utiliza o swiki (tem um free em http://www.swiki.net). Podes proteger as páginas com senha (fica diferente de um wiki normal) e permitir a inclusão de comentários (+ no final da página).

  • Ronaldo says:

    É uma idéia a ser considerada. Além das vantagens que você citou, teria uma outra que é me forçar a pensar mais claramente sobre ela, em termos de desenvolvimento concreto, ao invés de ficar somente em planos. Vou dar uma pensada e decidir o que fazer.

What's this?

You are currently reading Criando Linguagens de Programação (Declarativas) at Superfície Reflexiva.

meta