ScriptsReferência

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.

7 min de leituraAntes: Escrevendo códigoAbrir no Waiso
O que você vai aprender
  • 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.

O editor é o mesmo para todas as linguagens: código no meio, entradas à esquerda, saída embaixo.

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.

count_words.py
def main(text: str = "the quick brown fox"):
    words = text.split()
    print(f"{len(words)} words")
    return {"words": len(words), "chars": len(text)}
Saída esperadaSucessoO resultado de cada variante com a entrada padrão
{
  "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

LinguagemRoda emPonto de entradaEntradasResultadoPacotes
PythonCPython 3.15 (com o 3.14 ao lado)def main(...)Parâmetros com type hintsValor devolvidoDo PyPI, detectados pelos imports
TypeScriptBun 1.4 (com o 1.3 ao lado)export async function main(...)Parâmetros tipadosValor devolvidoDo npm, detectados pelos imports
JavaScriptBun 1.4 (com o 1.3 ao lado)export async function main(...)Parâmetros e seus padrõesValor devolvidoDo npm, detectados pelos imports
Cgcc 14int 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++ 14int 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.