Categorias

Judoscript: Linguagem interpretada pelo java

Este artigo descreve a linguagem de programação de scripts [lurl=https://www.judoscript.com]Judoscript[/url], uma linguagem interpretada que roda sobre a JVM (Java Virtual Machine).
Judoscript é uma linguagem de script poderosa, fácil, eficiente, elegante e moderna, projetada e implementada em Java puro.

Judoscript nasceu da necessidade de usar diretamente os recursos da plataforma Java de modo mais fácil e intuitivo. Seu propósito é ser uma linguagem de script mais simples e fácil de usar. As principais vantagens em usar uma outra linguagem sobre a JVM (além do Java, é claro), é ganhar em produtividade e poder de abstração.

A produtividade decorre da facilidade e poder de expressão próprios das linguagens de script e a abstração decorre de comandos, funções e bibliotecas pré-definidas implementadas nesta linguagem, permitindo escrever um código muito menor para as mesmas tarefas do que o código original em Java puro. O desempenho, no entanto, será em geral menor do que o mesmo código implementado em Java puro. Deve-se portanto pesar os prós e contras do uso dessas linguagens e utilizá-las para tarefas próprias de linguagens de script, como administração de sistemas, robôs para efetuar tarefas automáticas de administração e coleta de informações e frameworks de testes de aplicações, para citar alguns exemplos.

A linguagem sustenta-se em três pilares básicos, um “parser” ou “script-engine” poderoso, acesso ilimitado aos recursos da plataforma Java e características “WYSIWYG” (“What-You-See-Is-What-You-Get”, própria de linguagens 4-GL, onde os comandos são facilmente entendidos por humanos – “legíveis”).

Judoscript combina simplicidade e poder de expressão em um ambiente homogêneo que se destina à qualquer uso prático, como por exemplo combinar dados de diferentes fontes e formatos (para processamento e relatórios), ou implementar um ambiente de testes para a plataforma Java. Judoscript também é projetado para ser uma linguagem de scripts divertida e fácil para programação gráfica e multimídia e por isso seu desenvolvimento está sendo orientado para áreas como música, gerenciamento e manipulação de arquivos de som e java 2D/3D. Uma IDE baseada em JavaBeans para facilitar ainda mais o desenvolvimento de scripts também está sendo desenvolvida.

A linguagem segue a licensa LGPL, o que significa que tem o código fonte aberto e pode ser utilizada livremente tanto para fins pessoais ou comerciais. A filosofia da linguagem é seguir as últimas tendências da plataforma Java (por isso exige um sdk atualizado) e assim pretende se integrar de maneira fácil a qualquer projeto atual desenvolvido em Java. O princípio é simples: se algo é útil e está disponível, Judoscript o tornará mais fácil de usar.

Hoje, Java é muito mais do que uma linguagem de programação. A riqueza de sua API e os inúmeros projetos (muitos deles Open Source) tornam a linguagem repleta de funcionalidades que abrangem desde computação básica até a mais complexa necessidade de uma organização. Java tornou-se rapidamente um vasto e crescente campo de recursos prontamente disponíveis em múltiplas (senão todas) as plataformas.

Escrever código em Java de modo natural e fluente, no entanto, requer um conhecimento avançado da linguagem.

Frequentemente precisamos ajustar algo em nossos projetos, como efetuar alguma operação em todos os fontes em uma certa árvore de diretórios (package), ou limpar cestas de compras de um banco de dados de testes, ou ler um documento XML para criar um relatório em PDF.

Para tarefas que exigem ação rápida, é muito trabalhoso escrever código Java bem projetado. Ao invés, escrevemos scripts em Judoscript para tarefas repetitivas, os quais podem rodar manual ou automaticamente. Tais scripts podem ser atualizados com frequência e mais facilidade, e a performance não é um ponto crítico. O processo de escrever um script (editar e rodar) pode fazer muita diferença na produtividade porque um simples comando do script “abstrai” ou representa muitos comandos na linguagem Java.

Imagine que você necessita criar um ZIP com alguns arquivos usando Java, mas você nunca usou o package java.util.zip. A documentação Java lista muitas classes e você precisa entender seus significados e relacionamentos antes de usá-las. É preciso um bom mecanismo de script que permita usar de maneira fácil os muitos recursos da plataforma Java, standard ou open source, com o máximo de praticidade, flexibilidade e extensibilidade. Você verá pelos exemplos abaixo que Judoscript é uma linguagem 3-GL/4-GL que visa efetivamente satisfazer estas necessidades.

Para instalar o Judoscript, basta extrair o pacote de instalação e incluir o arquivo judo.jar no classpath.
O script a seguir faz o backup dos meus programas em um arquivo zip estruturado em diretórios com o nome indicando a data e hora da gravação.

const #System = javaclass java.lang.System; 

filename = 'marcio_' @ date().fmtDate('yyyyMMdd_HHmm') @ '.zip'; 
zip = createZip(filename); 

$start = #System.currentTimeMillis(); 

println 'Copiando arquivos...'; 

copy 'marcio/java/*.java' in 'c:/' 

except '*/judo/examples, */jython, */eclipse-SDK-2.0.1-win32, */fesi' 
recursive noHidden echo 
into zip; 

copy 'marcio/jython/*.py' in 'c:/' 

except '*/demo, */org' 
echo 
into zip; 

zip.close(); 

$end = #System.currentTimeMillis(); 

$total = ($end - $start)/1000; 

println 'Backup concluido em '@$total@' segundos.'; 

O script a seguir criptografa um arquivo usando a API JCE

if #args.length > 0 { 
    infile = #args[0]; 
    tempfile = #args[0]@'.enc'; 

    encryptFile #args[1], infile, tempfile; 
}

decriptografa:

if #args.length > 0 { 

    infile = #args[0]; 
    tempfile = #args[0]@'.dec'; 

    decryptFile #args[1], infile, tempfile; 
} 

O script a seguir é um mini robot que se executado com uma conexão disponível, busca e mostra a grade de programação do dia do canal AXN

// Mini robot que mostra a grade de programação do dia do canal AXN 
// baseado no conhecimento prévio da estrutura html da página     

url = 'https://brasil.canalaxn.com/programacion.asp'; 

do url as html 
{ 

BEFORE: 
    flag_horario = false; 
    flag_programa = false; 
: 
    // uma tag td com a class especificada abaixo 
    // indica o horario do programa 
    if $_.class.equalsIgnoreCase("txt201i7") { flag_horario=true; } 
: 
    // uma tag a com o link especificado abaixo 
    // indica o nome do programa 
    if $_.href.startsWith("grade_pop.asp") { flag_programa=true; } 
TEXT: 
    if flag_horario { flush $_@' '; flag_horario=false; } 
    if flag_programa { flush $_;.; flag_programa=false; } 

} 

Resultado do script para o dia 15/11/2002:

07:00 Radical Sports 
08:00 Water Rats 
09:00 Cold Squad 
10:00 Wiseguy 
11:00 Water Rats 
12:00 Radical Sports 
13:00 V.I.P 
14:00 Alias 
15:00 Destinos Cruzados 
15:00 Criminal Desire 
18:00 Wiseguy 
19:00 Cold Squad 
20:00 Andromeda 
21:00 Enterprise 
00:00 sáb Water Rats 
01:00 sáb Cold Squad 
02:00 sáb Andromeda 
03:00 sáb Enterprise 
04:00 sáb Criminal Desire 

O script a seguir imprime todas as descrições da tabela produtos em uma base MySQL

const #dbUrl = 'jdbc:mysql://localhost/loja'; 
const #dbUser = 'MONONO'; 
const #dbPass = 'MOMONOMO'; 

connect to #dbUrl, #dbUser, #dbPass; 

executeQuery a: 
    select * from produtos; 

while a.next() { 
    . a.descricao; 
} 

disconnect(); 

Assim como Jython, Judoscript também funciona como um interpretador de comandos:

C:\marcio\judo>java judo 
=========================================================== 
JudoScript Language v0.7 2002-10-3 (JDK1.3+) 
Copyright 2001-2002 James Huang, https://www.judoscript.com 
Tell your friends. Join the fun of open source development. 
Java Runtime Version: 1.4.0_01-b03 

Type in JudoScript code, finish by the 'end' command. 
=========================================================== 

list '*.judo' in 'a:/'; 
for $x in $$fs_result { .$x; } 
end 
........................................................... 
A:/lxcrypt.judo 
A:/teste_mysql.judo 
A:/backup.judo 
A:/axn.judo 

C:\marcio\judo> 

O interpretador pode ser chamado com java vjudo, o que inicia um ambiente visual de trabalho para editar e rodar scripts.

Linguagens de script trouxeram muitos benefícios para o desenvolvimento de software, entre eles: