Compilador online

Compilador Zig online

Escreva seu código em Zig 0.17 abaixo e rode de graça, com entrada, num sandbox nos nossos servidores. Sem cadastro e sem anúncios.

Pela equipe do OnlineCompiler.io. Atualizado em .

Also in EnglishTambién en español

const std = @import("std");

pub fn main(init: std.process.Init) !void {
    var in_buf: [256]u8 = undefined;
    var stdin = std.Io.File.reader(.stdin(), init.io, &in_buf);
    var out_buf: [256]u8 = undefined;
    var stdout = std.Io.File.writer(.stdout(), init.io, &out_buf);

    // Lê o nome e um número da aba Entrada
    const nome = (try stdin.interface.takeDelimiter('\n')) orelse "";
    try stdout.interface.print("Olá, {s}!\n", .{nome});
    const linha = (try stdin.interface.takeDelimiter('\n')) orelse "";
    const n = try std.fmt.parseInt(usize, linha, 10);

    for (1..n + 1) |i| {
        try stdout.interface.print("{d} ao quadrado é {d}\n", .{ i, i * i });
    }
    try stdout.interface.flush();
}
Compartilhar gera um link, sem precisar de conta. Salvar guarda o código na sua conta.

Quer conferir uma solução contra várias entradas? O compilador Zig com casos de teste roda todas de uma vez e marca cada uma como aprovada ou reprovada.

Como dar entrada (stdin)

Antes de apertar Executar, digite na aba Entrada tudo o que o programa vai ler. Ele recebe esse texto pela entrada padrão (stdin). Em Zig, fica assim:

const linha = (try stdin.interface.takeDelimiter('\n')) orelse "";   // a próxima linha, sem o \n
const n = try std.fmt.parseInt(i64, linha, 10);                      // a linha como número
var partes = std.mem.tokenizeScalar(u8, linha, ' ');                 // ou dividida nos espaços,
const a = try std.fmt.parseInt(i64, partes.next().?, 10);            // um número de cada vez

A entrada inteira é enviada quando você aperta Executar, então o programa não pode pedir mais nada enquanto roda. Coloque cada valor numa linha, ou separe por espaços, conforme o programa lê.

Versão e limites

VersãoZig 0.17
Compilado comzig build-exe -j2 -target x86_64-linux code.zig -femit-bin=code.out
Executado com./code.out
Limites30 segundos, 512 MB de memória, 2 CPUs, 64 KB de saída por fluxo, sem rede
Execução típica3,99 s, e 4,45 s para a mais lenta em cada 20 (como medimos, em inglês)

Bom saber

  • Compila no modo Debug, então as verificações de segurança continuam ligadas: um índice fora dos limites ou um estouro de inteiro gera um panic com um stack trace que aponta a linha.
  • A E/S do Zig 0.17 é nova: main recebe init: std.process.Init, e stdin e stdout são std.Io.File.reader(.stdin(), init.io, &buf) e std.Io.File.writer(.stdout(), init.io, &buf). Chame o flush do writer antes de main retornar, senão a saída se perde.
  • Uma execução leva uns 4 segundos, a maior parte compilando, então até um programa curto demora isso.

Rodar Zig a partir do seu app

Para rodar Zig no seu próprio app, envie o código e a entrada para o endpoint síncrono com uma chave de API, e a saída volta na resposta. É grátis até 100.000 execuções por mês. Documentação da API (em inglês).

O editor acima é um widget que você pode colocar no seu site, blog ou curso. Com o atributo data-locale="pt", os botões aparecem em português. Como incorporar o editor (em inglês).

Outras páginas

Perguntas frequentes

O compilador Zig online é grátis?

Sim. Rodar Zig nesta página não exige conta e não tem anúncios. Para rodar Zig no seu próprio app ou site, a API e o widget são grátis até 100.000 execuções por mês, uso comercial incluído.

Meu programa em Zig pode ler entrada?

Sim. Digite a entrada na aba Entrada antes de executar, e o programa a lê pela entrada padrão (stdin). A entrada inteira é enviada quando você aperta Executar, então o programa não pode pedir mais nada enquanto roda.

Posso usar bibliotecas em Zig?

A biblioteca padrão do Zig; aloque memória com init.gpa ou init.arena. O Zig 0.17 não tem @cImport, então não dá para usar bibliotecas C. Não há gerenciador de pacotes, e os programas não têm acesso à rede.

Quanto tempo um programa pode rodar?

Até 30 segundos, com 512 MB de memória e 2 CPUs. Um programa que ainda estiver rodando aos 30 segundos é interrompido com o código de saída 124, e a saída acima de 64 KB por fluxo é cortada.

Onde meu código roda?

Nos nossos servidores, num sandbox gVisor novo e sem acesso à rede, que é apagado quando a execução termina. Cada execução fica guardada no histórico com a saída; a página de segurança (em inglês) explica o que é armazenado.

Existe uma API para Zig?

Sim. Envie o código, o id do compilador zig-0.17 e a entrada para https://api.onlinecompiler.io/api/run-code-sync/ com uma chave de API, e a resposta traz a saída, os erros, o código de saída, o tempo e a memória. É grátis até 100.000 execuções por mês, e a mesma chave serve para as outras 45 linguagens. A documentação está em inglês.