Linguagens
Todo script no Waiso é escrito em uma de cinco linguagens, e as cinco rodam no mesmo worker, no mesmo sandbox, com o mesmo cartão Entradas, a mesma aba de saída e os mesmos gatilhos. O que muda entre elas é como se escreve o ponto de entrada, como se declara um parâmetro e como o resultado é devolvido. Esta página coloca as cinco lado a lado.
- Escrever o ponto de entrada que cada linguagem espera
- Declarar entradas e devolver um resultado em Python, TypeScript, JavaScript, C e C++
- Saber quais linguagens instalam pacotes e quais não
- Saber onde o SQL entra
Cinco linguagens, um worker
Python roda no CPython, TypeScript e JavaScript rodam no Bun (o TypeScript não precisa de etapa de build), e C e C++ são compilados com gcc / g++ logo antes da execução — o binário fica em cache, então uma segunda execução do mesmo código pula o compilador. Todas rodam dentro do mesmo sandbox isolado, que não tem acesso à rede: um script chega aos dados pelas entradas, pelas integrações do projeto, pelas variáveis e pelo estado.
A linguagem é escolhida na criação do script e não muda depois — ela define a extensão do arquivo, o runtime e o servidor de linguagem. Um script novo começa de um pequeno modelo Hello na linguagem dele, o jeito mais rápido de ver na prática as convenções abaixo.
O mesmo script em todas as linguagens
Um contador de palavras com uma entrada de texto. Cole qualquer variante num script novo daquela linguagem e clique em Rodar: o cartão Entradas mostra um campo text preenchido com o padrão, o log imprime a contagem e a aba de saída mostra o resultado.
def main(text: str = "the quick brown fox"):
words = text.split()
print(f"{len(words)} words")
return {"words": len(words), "chars": len(text)}{
"words": 4,
"chars": 19
}Python
Defina def main(...). Cada parâmetro vira uma entrada, tipada pela anotação (str, int, float, bool, listas, dicts, Literal…); o valor que main devolve é o resultado, convertido em JSON. Tudo que é impresso vai para os logs. main é chamada como uma função comum, então mantenha-a síncrona — chame asyncio.run(...) dentro dela se precisar de código assíncrono.
TypeScript e JavaScript
Exporte uma função chamada main — export async function main(...) é a forma do modelo, e uma função síncrona comum também funciona; uma promise devolvida é aguardada. Os parâmetros são ligados pelo nome, então main(text) recebe a entrada text, e uma entrada opcional ausente chega como undefined, deixando valer o padrão do JavaScript. Os tipos do TypeScript (e os padrões do JavaScript) tipam as entradas. Não devolver nada resulta em null.
C e C++
Um script C ou C++ é um programa comum com int main(int argc, char *argv[]). As entradas são declaradas com linhas de comentário no topo — // @param nome tipo = padrão, com os tipos string, int, float, bool, json ou list — e lidas pelo SDK: waiso_arg_str, waiso_arg_int, waiso_arg_double, waiso_arg_bool e waiso_arg_json em C (#include "waiso.h"), waiso::argStr, argInt, argDouble, argBool em C++ (#include "waiso.hpp"). Os mesmos valores também chegam em argv, na ordem da declaração. Devolva o resultado como texto JSON com waiso_set_result(json) / waiso::setResult(json); stdout e stderr são os logs, e um código de saída diferente de zero faz a execução falhar.
Lado a lado
| Linguagem | Roda em | Ponto de entrada | Entradas | Resultado | Pacotes |
|---|---|---|---|---|---|
| Python | CPython 3.15 (com o 3.14 ao lado) | def main(...) | Parâmetros com type hints | Valor devolvido | Do PyPI, detectados pelos imports |
| TypeScript | Bun 1.4 (com o 1.3 ao lado) | export async function main(...) | Parâmetros tipados | Valor devolvido | Do npm, detectados pelos imports |
| JavaScript | Bun 1.4 (com o 1.3 ao lado) | export async function main(...) | Parâmetros e seus padrões | Valor devolvido | Do npm, detectados pelos imports |
| C | gcc 14 | int main(int argc, char *argv[]) | Linhas // @param + waiso_arg_* | waiso_set_result(json) | Nenhum — a biblioteca do C, math.h e waiso.h |
| C++ | g++ 14 | int main(int argc, char *argv[]) | Linhas // @param + waiso::arg* | waiso::setResult(json) | Nenhum — a biblioteca padrão e waiso.hpp |
As versões exatas, e como um script passa para uma mais nova, estão em Versões das linguagens. Como os pacotes são encontrados, fixados e congelados na publicação está em Dependências. Qualquer uma das cinco também importa outro script da mesma linguagem no mesmo projeto — veja Reutilizando código: imports.
E o SQL?
Um script também pode ser PostgreSQL ou MySQL. Ele roda numa das conexões de banco do projeto, escolhida no menu Conexão do editor (Escolha uma conexão pra executar essa query. até haver uma). As entradas são marcadores :nome, que podem ser declarados com -- @param nome tipo = padrão. Como criar conexões, e o Workbench para explorar um banco, estão em Integrações e SQL Workbench.
Limites que valem para todas as linguagens
- Uma execução pode levar 5 minutos por padrão. Mude por script no menu do editor → Configurações do script → Tempo limite, até o teto da instalação (1 hora, a menos que o administrador tenha aumentado). Uma execução que passa do tempo falha com o código
timeout. - Sem rede no código do usuário, em nenhuma linguagem. Os dados entram pelas entradas e pelo SDK.
- C e C++ não instalam bibliotecas: são compilados com os padrões do gcc e ligados só à biblioteca de matemática e ao SDK do Waiso.
- Uma biblioteca C ou C++ importada por outro script não pode definir
main.