• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrotuga

uma linguagem de programação em XML ou similar... é possivel?

33 mensagens neste tópico

As linguagens actuais debatem-se todas com um problema comum: não têm suporte para integração com código externo por si só. Para contornar isso os programadores costumam escrever eles manualmetne o seu proprio sistema de code templating, na esmagadora maioria das vezes é um sistema incompleto.

Isto é uma ideia que me surgiu há uns tempos e que tem cozinhado na minha cabeça mas gostava de ouvir pensamentos de mais pessoas. Não tenho ideia de implementar isto nos proximos anos, mais tarde quem sabe. Mas nem sei bem se é realmente possivel.

A ideia é a seguinte: criar uma linguagem de programação que ficasse por cima de uma estrutura de dados que fosse facilmente manipulavel. Ok, é um pouco esquisita esta definição. Ilustrando com um exemplo: seria por exemplo uma especificação XML que fosse interpretada de forma a suportar testes condicionais, loops, variaveis, funcoes, scopes e outras coisas que sei ou nao me lembro agora.

O XML é muito popular hoje em dia, mas podia ser por exemplo em YAML que é bem mais simples, ou noutro formato qq, numa base de dados por exemplo... qq coisa que guarde uma estrutura de dados teoricamente devia servir.

A grande vantagem é que, qualquer aplicação escrita nesta hipotetica linguagem, seria por si só expansivel, bastando para isso que a lingaugem tivesse o seu proprio sistema de overlays.

Que acham disto?

digam aí os vossos pensamentos que isto precisa de muuuuuuuuuuuuita discussao, nem sei se é viável sequer...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu posso ter conhecimentos nas mais diversas linguagens e programar aplicações pelas quais as pessoas me felicitam pelo trabalho bem feito e que está uma aplicação muito boa. Mas são posts como este que me reduzem à minha insignificância e me fazem ver que ainda sou um noob na programação, porque eu li com atenção e não percebi rigorosamente nada!  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que percebi a palavra "linguagem"... E parece-me que também havia um "ok". Mas não percebi mais nada  :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu posso ter conhecimentos nas mais diversas linguagens e programar aplicações pelas quais as pessoas me felicitam pelo trabalho bem feito e que está uma aplicação muito boa. Mas são posts como este que me reduzem à minha insignificância e me fazem ver que ainda sou um noob na programação, porque eu li com atenção e não percebi rigorosamente nada!  :-[

Já somos dois  :-[ isto tá 'muito à frente' para eu entender...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que percebi o que queres dizer e onde queres chegar, mas não faço ideia se isso é possível.

Tentando reformular e para ver se percebi bem: o grande problema dos programadores de hoje em dia é criar a sua aplicação suficientemente modular para qualquer outra pessoa poder fazer um "mod" que actue numa área qualquer do programa.

Nessa linguagem, seria possível criar-se um mod para resolver um problema na linha x sem ter que reescrever e distribuir o código por exemplo. Ou adicionar uma nova função entre as linhas y e z.

Diz-me se é esta a ideia ou não.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As linguagens actuais debatem-se todas com um problema comum: não têm suporte para integração com código externo por si só.

se tivesse lido apenas esta frase, diria que uma possível solução para isso era a Programação Orientada a Aspectos. mas depois de ler o resto do post também fiquei sem perceber a que te referias.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele queria fazer uma linguagem em que o source era isto:

<programa id="LOLADAS">
<main><i>do input</i>
<i>put "O seu nome ->" and nome</i>
<i>quit sucess</i>
</main>
<input><i>get "Nome" as nome</i></input>
</programa>

Fazias xml-compile source.xml -o programar e depois ./programar

Uma coisa deste género right pedrotuga?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, o warrior e o djthyrax apanharam a ideia, é mesmo essa a ideia, em xml, sim seria qq coisa assim como a que acabaste de escrever.

Rui carlos, POO não permite overlay de código. Isto é um conceito diferente, mais relacionado com a linguagem em si do que propriamente com desenho das aplicações que possam ser escritas na linguagem. POO podia perfeitamente ser suportado.

O exemplo do djthyrax é mesmo o que disse.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pode fazer isso em Java ou pelo menos algo parecido :(

Não sei detalhes porque já vi isso à algum tempo e não prestei muita atenção mas vi um exemplo na net de Java Swing em que as configurações das componentes era feita em XML por exemplo tinhas os botão jb1 e tinhas fora um ficheiro xml com todas as configurações para esse botão numa estrutura.

A propósito fiz uma pesquisa e encontrei isto http://cookxml.yuanheng.org/cookswing/index.html.

Eu sei que querias fazer isso mesmo com código na totalidade, métodos variáveis etc.. mas para isso terias de criar mesmo um lib de forma a ler o xml e a criar o respectivo código na linguagem usada, que no fundo é o que a lib cookswing faz.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando li o post inicial fiquei com uma ideia diferente da que quiseste passar, no entanto achei excelente a tua ideia :(

No entanto, aqui fica a minha interpretação:

um xslt "central" que soubesse interpretar comandos deste género:

<program>
  <begin>Inicio</begin>
  <for>
    <name="Para" />
    <limite="ate" />
    <step="anda" />
  </for>
  ...
  <end>Fim</end>
</program>

Ou seja, a linguagem seria declarada assim, o utilizador programava na linguagem declarada "dentro" das tags XML, mas a execução seria de acordo com o XML.

Basicamente, seria uma forma trivial de criar parsers sem se ter de preocupar com ambientes e afins, só dizer como se queria a linguagem que o XML faria o resto :D

O funcionamento seria igual para qualquer linguagem, mesma forma de tratar os ambientes e respectivas variáveis, só mudava a sintaxe.

Qualquer pessoa poderia criar a sua linguagem de programação sem ter de perceber absolutamente nada de parsers e afins ;)

HecKel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para isso:

<program name="Hello Nome" id="djthyraxHelloNome" author="djthyrax[at]gmail.com">
<function init="true" name="main">
	<do>output "Introduza o seu nome: "</do>
	<do>get nome</do>
	<for start="i=0" loop="i++" end="i=20">
		<do>output "Olá " AND nome AND "!" AND NEWLINE</do>
	</for>
	<do>linkar "P@P" AND "http://portugal-a-programar.org/"</do>
	<exit status="sucess" />
</function>
<function name="linkar" args="name, link">
	<do>output "Visite " AND name AND " no endereço " AND link AND NEWLINE AND NEWLINE AND "Obrigado!" AND NEWLINE</do>
	<return value="void" />
</function>
</program>

O resultado no ecrã seria algo do género:

Introduza o seu nome: djthyrax

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Olá djthyrax!

Visite P@P no endereço http://portugal-a-programar.org/

Obrigado!

Entrevistas é favor pedir por PM.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me parece que o código do djthyrax funcionasse nesta linguagem por causa do "loop="i++"".

i++ é uma instrução e como tal teria que estar ela dentro de xml.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu devo ser muito burro, ou então não estou a perceber a ideia...

Ok percebi os exemplos mas... eu faço aquilo em C# ou em Java e até com código mais fácil (pelo menos para mim) e mais legível...

Na prática qual é a vantagem do exemplo do djthyrax em relação a algo em C#, ou Java que faça a mesma coisa? Dêem-me um exemplo do que uma linguagem deste género permitia fazer e que C# ou Java não permitem.

Não me falem em overlays porque isso é um bocado abstracto e eu não percebi bem o que entendem por overlays...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu devo ser muito burro, ou então não estou a perceber a ideia...

Ok percebi os exemplos mas... eu faço aquilo em C# ou em Java e até com código mais fácil (pelo menos para mim) e mais legível...

Na prática qual é a vantagem do exemplo do djthyrax em relação a algo em C#, ou Java que faça a mesma coisa? Dêem-me um exemplo do que uma linguagem deste género permitia fazer e que C# ou Java não permitem.

Não me falem em overlays porque isso é um bocado abstracto e eu não percebi bem o que entendem por overlays...

Realmente, depois dos exemplos fiquei com a mesma ideia que tu, o C# é suficiente para fazer qualquer coisa assim, a menos que esteja a perceber mal a ideia  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya, como o warrior disse as intruções teria que ser dadas pelo proprio XML.

Saco, os overlays seriam a joia da coroa de uma linguagem deste tipo. Overlay é, como o nome indica sobreposição de código presente em dois ou mais ficheiros. Ou seja... escreves uma apliacação, se amanha um amigo teu quiser extende-la basta escrever o código dele e atravez do XML dizer: "este bocado de código entra a seguir a esta tag", "este bocado do código orginal salta fora", "este substitui aquele.... e por aí fora.

Essa é uma das grandes vantagens. Outra vantagem é que se usarmos um ML ou qualquer outra estrutura devidamente especificada com rigor, a implementação torana-se quase trivial, o que permite o uso de uma tecnologia destas em tudo quanto é suporte.

O exemplo do XML foi mesmo para ser mais simples para toda a gente perceber, mas há outras hipóteses.

Agora, eu gostava que o pessoal mais velho que já tem alguma experiencia me dissesse se me está a falhar alguma coisa. Tipo, conceptualmente isto pode trazer limitações, assim à primeira nao me estou a lembrar de nenhuma, mas não sei.

Basicamente a ideia é, uma linguagem que permita que um programa seja visto como uma estrutura de dados.

Às tantas até já existe uma linguagem assim, o xml é usado para tanta coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Saco, os overlays seriam a joia da coroa de uma linguagem deste tipo. Overlay é, como o nome indica sobreposição de código presente em dois ou mais ficheiros. Ou seja... escreves uma apliacação, se amanha um amigo teu quiser extende-la basta escrever o código dele e atravez do XML dizer: "este bocado de código entra a seguir a esta tag", "este bocado do código orginal salta fora", "este substitui aquele.... e por aí fora.

pelo menos isto consegues fazer com Programação Orientada a Aspectos.

quanto ao fazer um linguagem exetensível baseada em XML, como é que fazias os compiladores? sempre que extendias a linguagem tinhas que extender o compilador.

e o XML é muito bom quando é gerado automaticamente por programas, agora para uma pessoas o escrever não me parece.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Saco, os overlays seriam a joia da coroa de uma linguagem deste tipo. Overlay é, como o nome indica sobreposição de código presente em dois ou mais ficheiros. Ou seja... escreves uma apliacação, se amanha um amigo teu quiser extende-la basta escrever o código dele e atravez do XML dizer: "este bocado de código entra a seguir a esta tag", "este bocado do código orginal salta fora", "este substitui aquele.... e por aí fora.

pelo menos isto consegues fazer com Programação Orientada a Aspectos.

quanto ao fazer um linguagem exetensível baseada em XML, como é que fazias os compiladores? sempre que extendias a linguagem tinhas que extender o compilador.

e o XML é muito bom quando é gerado automaticamente por programas, agora para uma pessoas o escrever não me parece.

Ok, se calhar expliquei-me mal. A linguagem não seria supostamente extensivel, as aplicações é que o seriam.

É gajo para ser possivel com programação orientada a aspectos, é coisa que nunca ouvi falar, talvez esta ideia seja esse paradigma levado ao extremo.

Eu tambem não acho XML a melhor solução, foi só um exemplo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me parece que o código do djthyrax funcionasse nesta linguagem por causa do "loop="i++"".

i++ é uma instrução e como tal teria que estar ela dentro de xml.

A ideia era aquela, agora, como é para ser feita, isso já se pode alterar. :(

pedrotuga, já saiu um artigo na revista PROGRAMAR sobre POA (programação orientada ao aspecto)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya, como o warrior disse as intruções teria que ser dadas pelo proprio XML.

Saco, os overlays seriam a joia da coroa de uma linguagem deste tipo. Overlay é, como o nome indica sobreposição de código presente em dois ou mais ficheiros. Ou seja... escreves uma apliacação, se amanha um amigo teu quiser extende-la basta escrever o código dele e atravez do XML dizer: "este bocado de código entra a seguir a esta tag", "este bocado do código orginal salta fora", "este substitui aquele.... e por aí fora.

Essa é uma das grandes vantagens. Outra vantagem é que se usarmos um ML ou qualquer outra estrutura devidamente especificada com rigor, a implementação torana-se quase trivial, o que permite o uso de uma tecnologia destas em tudo quanto é suporte.

Ah, acho que já estou mais ou menos a perceber, a ideia.

Não sei até que ponto isso não será já mais ou menos possível fazer mesmo com as POO - nomeadamente Java e as .Net. Já existem alguns projectos que tentam fazer isto, até com migração/alteração de código em run-time sobre os quais ouvi falar nas aulas de Computação Móvel.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

esta discussão parece-me muito saudavél e é sempre bom discutir ideias inovadoras. Mas temos de ter em atenção alguns aspectos que me parecem importantes:

- Num projecto de software de grande dimensão, parece-me que seria complicado de manter um grande conjunto de ficheiros XML cheios de regras, ciclos, validações, and so on.. ficheiros XML grandes não são muito fáceis de "ler" / "alterar" / "manter" por pessoas. (metes um programador a editar ficheiros XML durante uma semana.. ele começa a bater com a cabeça na parede!)  ;)

- As alterações/implementações de novas features seriam penosas

- O parse de todo esse XML seria muito complexo, e provavelmente lento

- como ías compilar.. detectar erros, fazer debug?

- tratamento de excepções.. try..catch .. thows ..

... and do on.. and so on...

mas, como disse.. acho estas discussões muito saudáveis.

it's complicated! almost everything is! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

- como ías compilar.. detectar erros, fazer debug?

Tudo a ser escrito. A parte do "debugar", "debugava-se" da mesma forma que se faz em PHP. ;)

- tratamento de excepções.. try..catch .. thows ..

<try><if><condition><do>isto</do></condition><throw exception>IndexError</throw></if><catch exception="IndexError"><do>aquilo</do></catch></try>

it's complicated! almost everything is! :P

Exacto, o que interessa é sonhar. :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tá giro.. mas repara.. para mim, que não sou um computador..  leio, compreendo e altero muito mais facilmente esse mesmo código em C++ ou C#.

.. agora imagina.. tás tu a alterar esse "programa" e falhas uma barra "/" .. o XML, fica inválido.. andas à nora a olhar para possivelmente muitos milhares de linhas de código.. mais parsers XML pelo meio.. e tal... xxiiii.. chegas a um ponto.. parece que as letras no ecran já se movem sozinhas!! LOL

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tipo assembly? ;) Nada que indentação não ajude a resolver. E, o parser ia diferenciar self closing tags com as tags "normais". Ou seja, se fizesses <do /> ou <program />, ele ia dar erro. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya, como o warrior disse as intruções teria que ser dadas pelo proprio XML.

Saco, os overlays seriam a joia da coroa de uma linguagem deste tipo. Overlay é, como o nome indica sobreposição de código presente em dois ou mais ficheiros. Ou seja... escreves uma apliacação, se amanha um amigo teu quiser extende-la basta escrever o código dele e atravez do XML dizer: "este bocado de código entra a seguir a esta tag", "este bocado do código orginal salta fora", "este substitui aquele.... e por aí fora.

Essa é uma das grandes vantagens. Outra vantagem é que se usarmos um ML ou qualquer outra estrutura devidamente especificada com rigor, a implementação torana-se quase trivial, o que permite o uso de uma tecnologia destas em tudo quanto é suporte.

O exemplo do XML foi mesmo para ser mais simples para toda a gente perceber, mas há outras hipóteses.

Agora, eu gostava que o pessoal mais velho que já tem alguma experiencia me dissesse se me está a falhar alguma coisa. Tipo, conceptualmente isto pode trazer limitações, assim à primeira nao me estou a lembrar de nenhuma, mas não sei.

Basicamente a ideia é, uma linguagem que permita que um programa seja visto como uma estrutura de dados.

Às tantas até já existe uma linguagem assim, o xml é usado para tanta coisa.

Isso já foi inventado há 50 anos. Tem como nome Lisp: http://en.wikipedia.org/wiki/Lisp_programming_language

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora