Pas2JS: Codificando em Pascal, Executando em JavaScript


A equipe do Free Pascal e Lazarus nos deram um grande presente de Final de Ano: Um Transpiler de Pascal para JavaScript.

Unsplash image Photo by Greg Rakozy on Unsplash

Introdução

O uso do JavaScript é necessário para qualquer aplicação Web. Somos obrigados a utilizá-lo por quê (por enquanto) é a única linguagem que os browsers entendem.

Mas JavaScript não é fortemente tipado como Pascal e isso pode ser um grande problema quando codificamos aplicações maiores utilizando somente JavaScript.

JavaScript pode ser confuso e ambíguo. Por isso muitos desenvolvedores devem utilizar frameworks que facilitam o desenvolvimento e padronizam a codificação.

Codificar utilizando JavaScript puro não é uma tarefa fácil.

Então surgiram os Transpilers.

Um Transpiler é um compilador que, a partir de um código-fonte escrito em uma linguagem de programação como sua entrada, produz um código-fonte equivalente em outra linguagem de programação.

Existem vários Transpilers para JavaScript a partir de várias linguagens de programação. O mais famoso deles, eu acredito, é a linguagem TypeScript da Microsoft.

A linguagem Pascal está incluída nesse pacote de Transpilers, no entanto, além de existir poucos, eles são comerciais.

Felizmente, agora temos uma opção gratuita e Open Source chamada Pas2JS.

Pas2JS

Michael Van Canneyt (Free Pascal Team), Mattias Gaertner (Lazarus Team), e colaboradores, lançaram oficialmente o compilador utilitário chamado Pas2JS, em 16 de Dezembro de 2017, na lista oficial do Free Pascal.

O JavaScript gerado a partir de um código-fonte Pascal é utilizável no browser ou até mesmo no Node.js.

Ao invés de gerar um executável com seu código Pascal, um arquivo .js será gerado, compatível com seu browser, sem a necessidade de haver um servidor de aplicação (CGI, FastCGI, ISAPI, etc) se o aplicativo não necessitar de dados externos.

Como disse Michael no seu email de lançamento (tradução livre):

“Isso torna o Free Pascal um ambiente de desenvolvimento completo para o desenvolvimento Web”.

Na verdade, o desenvolvimento ainda não está (totalmente) completo. Funciona muito bem, porém ainda há melhorias a serem feitas, como pode ser visto aqui.

A sintaxe básica é a mesma do Delphi 7, porém ainda não temos o suporte a Interfaces. Acredito que teremos isso em breve, no entanto.

A RTL teve que ser reescrita, gerando novas versões das Unidades padrão para que pudessem ser utilizadas perfeitamente na conversão de Pascal para JavaScript. A lista das unidades você pode ver aqui.

O debugging pode ser feito diretamente no código Object Pascal, dentro do browser. Isso é possível por quê o Pas2JS emite um “source map” para que o browser exiba o código original em vez do código JavaScript, o que é muito útil para encontrar bugs no código original Pascal.

Lazarus já tem suporte para a sintaxe do Pas2JS, então o code completion irá funcionar (versão trunk).

A integração completa do Pas2JS está sendo codificada no Lazarus e, futuramente, eles já falam em desenvolver pacotes de componentes para execução no browser.

TMS Web componentes vai chegar no início de 2018. São componentes visuais no bom estilo RAD para desenvolver aplicações Web utilizando TForm.

Cito a TMS aqui por quê, no email do Michael, ele diz (tradução livre):

“Em um futuro muito próximo, um importante fornecedor de componentes da Delphi anunciará um pacote completo para desenvolvimento web RAD no Delphi IDE.”

Eu acredito que ele estava falando da TMS, empresa conceituada que se dedica à fabricação de componentes e frameworks para Delphi e Lazarus.

Há alguns dias os desenvolvedores do Brasil tiveram a chance de ver algumas palestras sobre Delphi e uma delas foi o anúncio da nova tecnologia da TMS para desenvolvimento Web, por Wagner Landgraf.

Para quem acompanha os pré-anúncios do Pas2JS já algum tempo — pois ele está sendo desenvolvido ao longo de 10 anos — basta “ligar os pontos” para ter quase certeza que os componentes TMS Web utiliza a tecnologia Pas2JS ou, no mínimo, se inspirou nela.

No entanto, na palestra do Wagner não há nenhuma menção ao Pas2JS.

Se eu estou certo, ou seja, se a TMS Web realmente utiliza o Pas2JS no seu novo produto, eu considero uma falha não mencionar quem criou o Transpiler.

Não há nenhum problema em criar componentes para comercialização, no entanto é necessário dar o crédito a quem é devido.

Entretanto, isso é apenas uma suposição pessoal. Se a TMS não utiliza/utilizou o Pas2JS, acredito que saberemos disso em breve.

Mas, independentemente da TMS utilizar ou não o Pas2JS, fico ansioso para ver o lançamento oficial do novo framework, visto que tais componentes irão funcionar também no Lazarus.

Sendo a TMS referência em componentes desde a primeira versão do Delphi, é de se esperar que esse será mais um grande sucesso.

O preview da tecnologia exposto na palestra foi excelente e motivador.

Conclusão

Para uma linguagem que muitos consideram “morta”, ter um Transpiler de Object Pascal para JavaScript é um grande impulso para por a linguagem (novamente) nos “trilhos do mercado”.

Sabemos que hoje em dia muitas empresas optam por desenvolver soluções 100% online, via browser, ao invés de aplicações Desktop.

Com o Pas2JS será possível termos uma única base de código Object Pascal — uma linguagem fortemente tipada, limpa e de fácil aprendizagem — onde poderemos utilizar todo o nosso conhecimento da linguagem, da RTL e componentes, para provermos aplicações 100% Web. Confiáveis, rápidas e de fácil manutenção.

É esperar, pra ver.

Até logo.

Posts Relacionados

  • Memória Segura Utilizando Instâncias de Interfaces

  • Classes Mutáveis vs Objetos Imutáveis

  • Implementando Interfaces Utilizando Diferente Assinaturas de Métodos

  • Usando Paths ao invés de Diretivas de Compilação

  • Trabalhando com Exceções em Requisições HTTP

  • Tipo object Continua Vivo

  • Array de Objetos

  • Variáveis Locais Deveriam ter Nomes Curtos

  • Como Dividir e Organizar o Código em Formulários com Muitos Widgets

  • Pascal Deveria ser Modernizado?