Bibliotecas C e estruturas de dados independentes e portáteis. (C99)
Cada pasta é independente com um único par cabeçalho/fonte. Não há
build para bibliotecas, basta copiar os arquivos desejados.
por exemplo, se você deseja o registrador, copie sc_log.h e sc_log.c para o seu projeto.
Há 100% de cobertura de filiais no Linux e o CI é executado em
SO: Linux, MacOS, FreeBSD e Windows Compiladores: GCC, Clang, MSVC Arco: x64, aarch64, armv6 (32 bits), armv7 (32 bits), ppc64le, s390x (big endian), riscv64 Sanitizadores: sanitizadores valgrind e clang/gcc (endereço, indefinido, thread)
Biblioteca | Descrição |
---|---|
variedade | Matriz/vetor genérico |
buffer | Buffer para codificação/decodificação de variáveis, mais adequado para implementações de protocolo/serialização |
doença | Wrapper de condição para Posix e Windows |
crc32 | Crc32c, usa instrução de CPU crc32c, se disponível |
amontoar | Heap mínimo que também pode ser usado como heap máximo/fila de prioridade |
ini | Analisador inicial |
lista vinculada | Lista vinculada intrusiva |
registrador | Registrador |
mapa | Um hashmap de endereçamento aberto de alto desempenho |
mapa de memória | Wrapper Mmap para Posix e Windows |
mutex | Wrapper Mutex para Posix e Windows |
opção | Analisador de argumento cmdline. Muito básico |
desempenho | Utilitário de benchmark para obter informações de contadores de desempenho via perf_event_open() |
fila | Fila genérica que também pode ser usada como desenfileirar/pilha/lista |
sc | Funções utilitárias |
sinal | Sprintf seguro de sinal e manipulador de sinal (manipulação de CTRL + C, impressão de backtrace em caso de falha, etc.) |
soquete | Soquetes Pipe / tcp (também soquetes de domínio unix) /Epoll/Kqueue/WSAPoll para Posix e Windows |
corda | Strings C com prefixo de comprimento e terminação nula. |
fio | Wrapper de thread para Posix e Windows. |
tempo | Funções de tempo e suspensão para Posix e Windows |
temporizador | Implementação de roda de tempo com hash com operações rápidas de pesquisa/cancelamento |
uri | Um analisador uri básico |
É melhor que a biblioteca X?
Costumo usar essas bibliotecas para aplicativos de servidor de alto desempenho. Também,
Eu me preocupo com código legível e fácil de depurar. Em resumo, essas bibliotecas mostram
meu gosto (compensações) sobre desempenho/design de API/legibilidade. Você pode ou pode
não gosto disso.
Por que você não muda a API aqui no X, para ficar mais fácil de usar?
Envie uma solicitação pull, mas certifique-se de não introduzir um indefinido
comportamento. É possível fornecer APIs melhores, especialmente para bibliotecas genéricas,
se você não se importa com comportamentos indefinidos. Eu tento evitar isso.
Qual é a maneira mais eficiente de usar essas bibliotecas?
Assim como qualquer outro código. Adicione ao seu projeto como arquivos de origem e, de preferência, use
-O3 -flto + PGO. No entanto, pode não fazer nenhuma diferença para o seu caso de uso.
A biblioteca X está sendo usada em algum produto?
Algumas bibliotecas são usadas na produção, mas sempre teste você mesmo.
Existe algum lançamento?
Por favor, use o branch master. É considerado estável.
Você manterá a API estável?
Por favor, não espere uma API estável. Essas bibliotecas são bastante
pequeno (a maioria deles tem menos de algumas centenas de linhas de código) e, idealmente, você
devem ler o código e entender o que ele faz e adaptá-lo ao seu
precisa. Portanto, você não deve atualizar bibliotecas cegamente. Eu espero que você lide com
quaisquer possíveis diferenças de API facilmente. Dito isto, farei o meu melhor para manter
API estável.