Lançamento do CajuScript!

:arrow: http://www.cajuscript.org

Ou:

:arrow: http://code.google.com/p/cajuscript/

Finalmente esta oficialmente lançado, e anuncio aqui no GUJ em primeira mão, mais uma linguagem de script para o Java :stuck_out_tongue:

As principais vantagens do CajuScript é:

:arrow: Fácil aprendizagem.

:arrow: Jar com menos de 60k.

:arrow: Muito fácil de usar com Java e implementa as interfaces de Script do Java 6.

:arrow: Sintax inovadora.

A sintax poderá ser um choque a primeira vista, mas reparem bem e verão que faz todo sentido. Menos teclas para declarar um if, while, funções e imports.

O CajuScript nasceu agora, ainda tem muito o que amadurecer, mas para começar já vem com tudo o que é mais necessário, está bem completo para o início.

Conto com a ajuda de todos, críticas e sugestoes sempre serão bem vindas.

Abraço.

Parabéns!

Que bacana cara, sabe: de uns tempos pra cá tenho me dedicado a escrever código com o menor footprint possível (por diversão).
Bacana ver uma linguagem com 60 Kb.

Parabéns, belo nome.

Que doideira! Quer dizer que agora qualquer um pode fazer o sua própria linguagem de script compatível com o Java?

Dei uma ollhada nos fontes. Parece que vc faz o parser na unha. Até outro dia isso era uma coisa bastante não-trivial (consulte um livro de compiladores e parsers). E agora? Ficou mais acessível? Como vc aprendeu isso?

Parabéns pela iniciativa!

Parabéns!

Só não gostei de uma coisa… CAJU (odeio para ser sincero, mas gosto muito da castanha hehehe).

Até mais!

Pelos exemplos notei que instanciação usa a mesma notação que ativação. Isso é problemático se existir contexto implícito como toda linguagem OO possui. Como fica isso no CAJU?

[quote=saoj]Que doideira! Quer dizer que agora qualquer um pode fazer o sua própria linguagem de script compatível com o Java?

Dei uma ollhada nos fontes. Parece que vc faz o parser na unha. Até outro dia isso era uma coisa bastante não-trivial (consulte um livro de compiladores e parsers). E agora? Ficou mais acessível? Como vc aprendeu isso?

Parabéns pela iniciativa![/quote]

Pois é, acho qualquer um pode fazer qualquer coisa :roll:

As vezes pode não fica perfeito mas que chega lá, chega :stuck_out_tongue:

Bem eu tenho noção disto que disseste, que existe melhores maneiras de fazer a interpretação, mas primeiramente resolvi fazer um interpretador que funcionasse, agora começa a faze de otimizações, trabalhar em cima de um bom parser, mas primeiro queria algo que funcionasse e que servisse de base para o aperfeiçoamento, uma idéia por onde começar.

legal, parabens !!!

hoje atarde vou fazer algo com ele…

Bem sinceramente não entendi bem a tua pergunta, mas se for no sentido de como diferenciar uma nova instância da classe de apenas uma chamada a uma class estática é assim:

java.lang.String() -> Nova intância

java.lang.System -> Classe estática

A difernaça é nos ( )…

Depois para chamar por exemplo o String.replaceAll(CharSequence, CharSequence) em vez do String.replaceAll(String, String):

$java.lang
str = String("...teste123").replaceAll(caju.cast("teste", "java.lang.CharSequence"), caju.cast("testando", "java.lang.CharSequence"))

Usando o caju.cast( OBJECT, "CLASS" ) para chamar um método ou contrutor especifico que tenha múltiplas definições.

Não sei se isto responte a tua pergunta, mas se tiver um exemplozinho da situação específica agradecia :roll:

Gostei da iniciativa!!! parabéns

Bem sinceramente não entendi bem a tua pergunta, mas se for no sentido de como diferenciar uma nova instância da classe de apenas uma chamada a uma class estática é assim:

java.lang.String() -> Nova intância

java.lang.System -> Classe estática

A difernaça é nos ( )…

Depois para chamar por exemplo o String.replaceAll(CharSequence, CharSequence) em vez do String.replaceAll(String, String):

$java.lang
str = String("...teste123").replaceAll(caju.cast("teste", "java.lang.CharSequence"), caju.cast("testando", "java.lang.CharSequence"))

Usando o caju.cast( OBJECT, "CLASS" ) para chamar um método ou contrutor especifico que tenha múltiplas definições.

Não sei se isto responte a tua pergunta, mas se tiver um exemplozinho da situação específica agradecia :roll:
[/quote]

Ativação -> chamada de um método.
Instanciação -> criar um novo objeto.
Contexto implícito -> o this é métodos é um exemplo disso.

Queria saber se existe algum contexto implicito e, se existir, como diferencia String() ser ativação ou instanciação.

Bem sinceramente não entendi bem a tua pergunta, mas se for no sentido de como diferenciar uma nova instância da classe de apenas uma chamada a uma class estática é assim:

java.lang.String() -> Nova intância

java.lang.System -> Classe estática

A difernaça é nos ( )…

Depois para chamar por exemplo o String.replaceAll(CharSequence, CharSequence) em vez do String.replaceAll(String, String):

$java.lang
str = String("...teste123").replaceAll(caju.cast("teste", "java.lang.CharSequence"), caju.cast("testando", "java.lang.CharSequence"))

Usando o caju.cast( OBJECT, "CLASS" ) para chamar um método ou contrutor especifico que tenha múltiplas definições.

Não sei se isto responte a tua pergunta, mas se tiver um exemplozinho da situação específica agradecia :roll:
[/quote]

Ativação -> chamada de um método.
Instanciação -> criar um novo objeto.
Contexto implícito -> o this é métodos é um exemplo disso.

Queria saber se existe algum contexto implicito e, se existir, como diferencia String() ser ativação ou instanciação.[/quote]

Ok acho q agora chegamos lá :stuck_out_tongue:

Não há contexto implícito, há apenas um contexto q é o contexto global da execução do script, variáveis definidas dentro de funções como fora estão no mesmo contexto, ou seja dentro de uma função pode se usar uma variavel de fora e uma variavel criada dentro de uma função fica acessível para fora, ou sejá só existe o contexto global, por enquanto!

CajuScript não é orientado a objeto, por enquanto.

Ao criar uma String(" ") será feita uma nova instanciação e se for como valor de uma variável, esta nova instancia passa a ser o valor desta variável:
str = String(“xpto”)
Isto é equivalente em Java:
String str = new String(“xpto”)

Esta variável “str” estará disponível para ser usada no código que segue, podendo a seguir fazer:
str.replaceAll(“o”, “o…”)

Ser fizer:
str = String

Isto não faz nada! Classes estáticas teem que ser usadas assim:
System.out.println(“xpto…”)

Tem que executar alguma coisa, só System não faz nada, é preciso um caminho completo para uma variável publica, ou construtor ou método, para usar isto como valor de uma variável.

Claro que quero melhorar isto, passando a ser uma linguagem OO também, mas isto no momento não, isto esta pendente para as versões futuras.

O objetivo agora foi fazer uma linguagem simples para usar classes Javas e trocar Objetos entre Java e CajuScript, suportando tudo que é preciso para programar, ifs, while, arrays, funções, cast e variaveis, isto é o básico e tentei fazer da maneira mais simples e facíl de usar, agora o próximo passo é melhorar o que já existe e começar a evoluir a linguagem para o suporte de Classes e tudo mais.

Os objetivos do CajuScript é ter o core pequeno, ter fácil aprendizagem, e fácil de usar no dia-a-dia.

Se tem algo que não agrada e tem idéia de como melhorar, e se tem algum recurso que acha que faz falta e quer que seja implementado, é só dizer que vamos trabalhar para isto.

E quem quiser participar no desenvolvimento do projeto será bem vindo.

o contexto implícito é o contexto ‘dentro’ de um objeto instanciado? como se ele fosse um programa separado?

Que nomico
pior soh jBanana

Amigo, parabéns pela iniciativa! Só um toque: sintaxe em inglês é syntax e não sintax como está no site beleza?

Abração e novamente, parabéns!

[quote=fcoury]Amigo, parabéns pela iniciativa! Só um toque: sintaxe em inglês é syntax e não sintax como está no site beleza?

Abração e novamente, parabéns![/quote]

Oppsss, obrigado pela correção, nem demos por isso, valew mesmo :wink:

A sintaxe é realmente diferente.

Ainda não saquei como se faz um else … depois vou praticar com cuidado :slight_smile:

Parabéns!

[quote=peczenyj]A sintaxe é realmente diferente.

Ainda não saquei como se faz um else … depois vou praticar com cuidado :slight_smile:

Parabéns![/quote]

x = 1 // IF x = 1 ? System.out.println("X = 1") // ELSE IF ? x = 2 ? System.out.println("X = 2") // ELSE ?? System.out.println("X = "+ x) ?

If é quando tem o “?” no fim da linha:
… ?

Else If é quando tem “?” no começo e no fim da linha:
? … ?

Else é quando tem dois “?” numa linha:
??

E uma linha com apenas um “?”, fecha o If:
?

http://code.google.com/p/cajuscript/wiki/tutorialIf

:wink:

Acho que tinha que ser em portugues, afinal linguagem de script em ingles tem aos montes…

Vai haver documentaçao em portugues tb, brevemente…