Faz tempo que estou querendo inventar uma linguagem de programação. Isso aqui é um rascunho de algumas características fundamentais que ela vai ter.
Ela brota da forma como eu vejo qualquer programa: sempre apontando exatamente onde ocorrem os desvios e testes de quebra de laço... Podemos dizer que ela nasce como uma apologia ao goto! Mas não do jeito "tabu" que a instrução existe no FORTRAN e C, etc. A idéia é tornar natural escrever um "laço infinito" que possui pontos de interrupção.
Eu não gosto da forma as linguagens estruturadas fazem a gente considerar os diferentes tipos de laços como coisas muito distantes entre si, quero evidenciar as semelhanças, e como as diferenças são sutis.
E o mais importante: quantas e quantas vezes não vemos blocos do tipo "for(;;)" e "while True:" por aí? Isto não é natural. Digo, não é natural essa forma de representar isso, porque fazer esses laços é algo bem natural. Na minha linguagem o "laço infinito" será algo natural.
Um único goto no fim de um bloco pega mal porque não existe aquela sintaxe bonita marcando o ponto pra onde esse goto aponta... Eu não quaro ter "gotos selvagens", eu quero ter blocos sim.
Quero algo assim:
[
print x++
break if x>10
]
O que está dentro desses colchetes é um laço "infinito", "incondicional"... Se você não botar esse "break", não vai ter fim, e pronto.
Aquilo é um "do..while". Um "while.. do" é obtido simplesmente colocando esse teste no início...
[
break if x>10
print x++
]
Agora, podemos fazer coisas intermediárias tb.
[
x=x+y
break if x>10
y+=1
print y
]
Não sei dar agora um bom exemplo de quando isso é útil, mas já aconteceu mais de uma vez na minha vida deu ver laços com pedaços de programa repetido pra cima ou pra baixo dele, só porque o ponto de quebra do laço não podia ser no meio do bloco. Mas nessa minha linguagem isso pode acontecer naturalmente.
Em C dá pra programar assim, mas os "for(;;)" pra todo lado ficariam feio pra burro não?...
É muito comum também ver programas por aí com blocos que possuem "múltiplas terminações"... Um goto que aponta pra terminar a função de um jeito ou de outro. Isso economiza o trabalho de escrever uma funçãozinha adhoc. Quero achar um jeito bom de escrever isso tb...
2009/04/07
Rascunho da minha linguagem
Marcadores:
linguagens de programação
Subscribe to:
Posts (Atom)