Lançamento do CajuScript!

27 respostas
eduveks

: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.

27 Respostas

kicolobo

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.

Rodrigo.Lima

Parabéns, belo nome.

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!

davidbuzatto

Parabéns!

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

Até mais!

louds

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?

eduveks

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!

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.

S

legal, parabens !!!

hoje atarde vou fazer algo com ele…

eduveks

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:

T

Gostei da iniciativa!!! parabéns

louds

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:

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.

eduveks

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:

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.

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.

dlt

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

jjose

Que nomico
pior soh jBanana

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!

eduveks

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!

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

peczenyj

A sintaxe é realmente diferente.

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

Parabéns!

eduveks

peczenyj:
A sintaxe é realmente diferente.

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

Parabéns!

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:

O

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

eduveks

Vai haver documentaçao em portugues tb, brevemente…

furutani

Olá

eduveks:

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:


Interessante essa sintaxe do IF. Você que criou ou viu em outra linguagem?

Parabéns pelo projeto.

eduveks

furutani:
Olá

eduveks:

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:


Interessante essa sintaxe do IF. Você que criou ou viu em outra linguagem?

Parabéns pelo projeto.

Fui eu q criei mesmo, conforme fui fazendo foi surgindo as idéias, mas talvez tenha me baseado em algo q entrou no meu subconciente :stuck_out_tongue:

A ideia quando resolvi “desenhar” a sintax seria criar uma linguagem sem keywords, apenas usando caracteres que não usamos normalmente nas linguagens, e fui buscar os caracteres que achei mais intuitivos para:

If = ?
While = @
Fuction = #
Return/Break = ~
Include/Import/Null = $

E usar estes caracteres para substituir os { }, estando com um codigo longo de whiles com ifs, da para ver logo onde termina cada um vendo os @ e ? mesmo sem ver a linha onde começa, acaba por ser intuitivo, com uma boa tabulação, além de poupar os dedos digitando menos, como tenho problemas de tendinite, odeio ter que ficar digitando caracteres a mais e repetitivos.

Em linguagem de script ficar usando == também acho sem noção se esta dentro de um if deveria ser apenas o = e o != apenas !, e foi o q fiz também, é muito raro as vezes que se usa o = dentro de um if, por isso não faz sentido ficar usando == e !=.

O que tentei foi simplificar ao máximo tudo, e facilitar o trabalho do dia-a-dia.

C

eduveks

Parabéns, muito jóia o seu projeto. Já baixei os fontes e estou dando uma olhada.

Show de bola!

jopss

parabens!!!

Nao li todo o site… mas… do geito que está hoje, oq se pode fazer com o CajuScript ??

jopss :stuck_out_tongue:

eduveks

jopss:
parabens!!!

Nao li todo o site… mas… do geito que está hoje, oq se pode fazer com o CajuScript ??

jopss :stuck_out_tongue:

Bem o q se faz com uma linguagem de script?

Muita gente nem sabe pra que serve, e não sabe bem em que situações usar, é uma pena, mas com o CajuScript vc pode fazer tudo que vc faz com outra linguagem de script, de uma maneira ou de outra.

Linguagem de Script é mais uma questão de gosto e facilidades que cada uma oferece, o CajuScript é mais uma opção, com alguns pontos positivos e outros negativos, assim como qualquer outra linguagem de script.

A escolha em se adotar uma linguagem ou outra varia com o gosto e necessidade de cada um.

Alexandre_Gazola

Cara, muito massa! Parabéns pelo projeto!

PS.: Gostei do nome da linguagem! :wink:

O

Vai haver documentaçao em portugues tb, brevemente…

O que eu quiz dizer foi que a sintaxe deveria ser em português, ao invés de if um se, else um senao e por aí vai…

Javabuntu

muito bom cara, parabéns!

Criado 17 de janeiro de 2008
Ultima resposta 28 de mar. de 2008
Respostas 27
Participantes 18