Brick suporta hot reload nativo — troque código em tempo de execução sem reiniciar o programa. Usa dlopen+inotify (Linux) ou LoadLibrary+ReadDirectoryChangesW (Windows).
brick build --shared jogo.brc -o jogo.sojogo.so via dlopeninotify monitora o arquivo .so por modificações| Estado | Descrição |
|---|---|
HR_WAITING |
Monitorando mudanças no arquivo |
HR_LOADING |
Recarregando a biblioteca |
HR_OK |
Código atualizado |
HR_ERROR |
Recarga falhou (ex: erro de compilação) |
jogo.brc:
package JOGO
using IO
block jogo = 64MB
export fn atualizar(f32 dt) {
print("atualizando com dt={0}", dt)
}
// main.c
#include "runtime/hot_reload.h"
#include "runtime/block_memory.h"
int main() {
BlockCtx* jogo_mem = block_create(64 * 1024 * 1024);
HotReloadCtx* hr = hr_create("./jogo.so", jogo_mem);
while (rodando) {
hr_check(hr); // recarrega se mudou
void (*atualizar)(float) = hr_sym(hr, "atualizar");
if (atualizar) atualizar(0.016f);
}
hr_destroy(hr);
block_destroy(jogo_mem);
return 0;
}
# Compilar jogo como biblioteca compartilhada
brick build --shared jogo.brc -o jogo.so
gcc -O3 main.c runtime/hot_reload.c runtime/block_memory.c runtime/io.c \
-ldl -o jogo
# Executar
./jogo
# Em outro terminal, editar jogo.brc e recompilar:
brick build --shared jogo.brc -o jogo.so
# O programa em execução pega a mudança automaticamente!
export fn para serem visíveis ao host| Feature | Linux | Windows |
|---|---|---|
| Biblioteca dinâmica | .so |
.dll |
| Observação de arquivos | inotify |
ReadDirectoryChangesW |
| Carregamento | dlopen/dlsym |
LoadLibrary/GetProcAddress |
| Threading | pthreads |
CreateThread |
| Swap atômico | __sync_bool_compare_and_swap |
InterlockedExchange |