O HTMC é uma ferramenta que permite integrar facilmente o código C em suas páginas HTML e vice -versa. Os arquivos que terminam em .htmc podem ser usados para descrever a estrutura de uma página estaticamente em HTML e dinamicamente em C, assim como outros pré -processadores Hypertex, como o PHP. Os arquivos de origem C regulares também podem ser compilados com HTMC e usados para gerar páginas da Web totalmente dinâmicas.
O HTMC usa o GCC e o ligante GNU para gerar binários nativos altamente otimizados que podem ser armazenados em cache e executar sob demanda via HTMC. Em teoria , isso permite uma execução muito mais rápida* em comparação com muitos idiomas interpretados comuns, como PHP, Python e JavaScript.
Escrever código da Web em C também pode ser um desafio divertido ou exercício acadêmico. Dado a ajuste suficiente, você pode fazer com que o HTMC faça tudo o que precisa em uma página da Web dinâmica ou endpoint da API HTTP.
* O desempenho do código executado através do HTMC ainda não foi testado. Além disso, as otimizações mais importantes ainda precisam ser implementadas, pois exigem estriamente o HTMC para integrar um servidor da Web próprio.
O HTMC é construído para suportar várias redes de usos. A partir de agora, o HTMC pode ser usado:
include e libhtmc.a )O modo recomendado para servir o conteúdo da Web é o CGI, pois permite fácil integração com o software da Web existente.
Sabe -se que o CGI é velho e lento, portanto, por que o HTMC receberá seu próprio servidor da Web em algum momento. O servidor Web integrado usará arenas pré -alocadas, otimizações de memória e rede para maximizar a velocidade de execução e minimizar a sobrecarga, esperançosamente.
Nota: A partir de agora, a substituição do Linker GCC ou GNU por outro software não é incentivada. Algumas opções de linha de comando especificadas pelo HTMC podem ser diferentes em outros compiladores/ligantes.
LIBHTMC contém todas as funções HTMC. A biblioteca pode ser usada em outros programas nativos para integrar o HTMC, mas também inclui uma interface para interagir com o tempo de execução do HTMC e manipular o código HTML
| Interface da função | Descrição |
|---|---|
void htmc_bind(htmc_handover_t *handover) | Ligna um ponteiro htmc_handover_t para a atual Unidade de Execução HTMC |
int htmc_printf(const char *fmt, ...) | Escreve uma sequência formatada na página HTML |
int htmc_vpprintf(const char *fmt, va_list args) | Escreve uma sequência formatada na página HTML |
int htmc_puts(const cahr *s) | Escreva uma string de texto simples na página HTML (mais rápida que htmc_printf ) |
int htmc_query_scanf(const char *fmt, ...) | Lê valores de argumentos de consulta HTTP |
int htmc_query_vscanf(const char *fmt, va_list args) | Lê valores de argumentos de consulta HTTP |
int htmc_form_scanf(const char *fmt, ...) | Lê valores de argumentos do corpo HTTP em solicitações de postagem |
int htmc_form_vscanf(const char *fmt, va_list args) | Lê valores de argumentos do corpo HTTP em solicitações de postagem |
int htmc_error(const char *fmt, ...) | Joga uma mensagem de erro formatada |
void *htmc_alloc(size_t size) | Retorna um void * para um buffer de memória do tamanho solicitado ou NULL se ele falhar |
void htmc_free(void *ptr) | Libera um buffer de memória alocado com htmc_alloc |
A maneira mais fácil de usar o HTMC é criar um servidor Web CGI simples em um idioma de alto nível e chamar o HTMC ao manusear solicitações. Neste exemplo, o Golang é usado, pois é um dos idiomas nativos mais simples que suporta esses recursos prontos para a caixa. Um servidor da Web de Golang está incluído neste repositório.
htmc-cgi-ws para Linux daquihtmc-cgi-ws para elehtmc-cgi-ws seja reconhecido como um executável chmod +x ./htmc-cgi-ws
htmc-cgi-ws como super usuário (se necessário) e siga as instruções na tela [alevm@alevm ws]$ sudo ./htmc-cgi-ws
You're missing some important htmc files, proceed with the download? [Y/n]: Y
Downloading <https://alessandro-salerno.github.io/htmc/bin/htmc> to ./bin/htmc ... Done!
Downloading <https://alessandro-salerno.github.io/htmc/bin/libhtmc.a> to ./bin/libhtmc.a ... Done!
Downloading <https://alessandro-salerno.github.io/htmc/include/libhtmc/libhtmc.h> to ./include/libhtmc/libhtmc.h ... Done!
Downloading <https://alessandro-salerno.github.io/htmc/examples/index.htmc> to ./index.htmc ... Done!
Listening on localhost:80
localhost/index.htmc Compiling for linux
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/cli.c -o obj/common/cli.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/compile.c -o obj/common/compile.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/emit.c -o obj/common/emit.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/libhtmc/impl/base-impl.c -o obj/common/libhtmc/impl/base-impl.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/libhtmc/impl/debug-impl.c -o obj/common/libhtmc/impl/debug-impl.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/libhtmc/libhtmc.c -o obj/common/libhtmc/libhtmc.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/load.c -o obj/common/load.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/log.c -o obj/common/log.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/main.c -o obj/common/main.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/parse.c -o obj/common/parse.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -flto -c src/common/util.c -o obj/common/util.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/cli.c -o lib/common/cli.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/compile.c -o lib/common/compile.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/emit.c -o lib/common/emit.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/libhtmc/impl/base-impl.c -o lib/common/libhtmc/impl/base-impl.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/libhtmc/impl/debug-impl.c -o lib/common/libhtmc/impl/debug-impl.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/libhtmc/libhtmc.c -o lib/common/libhtmc/libhtmc.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/load.c -o lib/common/load.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/log.c -o lib/common/log.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/main.c -o lib/common/main.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/parse.c -o lib/common/parse.o
gcc -O2 -std=c2x -Wno-unused-parameter -Iinclude/ -DEXT_HTMC_BUILD=""24.10.09"" -fPIC -g -w -c src/common/util.c -o lib/common/util.o
gcc -flto obj/common/cli.o obj/common/compile.o obj/common/emit.o obj/common/libhtmc/impl/base-impl.o obj/common/libhtmc/impl/debug-impl.o obj/common/libhtmc/libhtmc.o obj/common/load.o obj/common/log.o obj/common/main.o obj/common/parse.o obj/common/util.o -o bin/htmc
ar rcs bin/libhtmc.a lib/common/cli.o lib/common/compile.o lib/common/emit.o lib/common/libhtmc/impl/base-impl.o lib/common/libhtmc/impl/debug-impl.o lib/common/libhtmc/libhtmc.o lib/common/load.o lib/common/log.o lib/common/main.o lib/common/parse.o lib/common/util.o
cd cgi-ws && go build -o ../bin/htmc-cgi-ws
Finished!
alessandrosalerno@MacBook-Pro-di-Alessandro-3 htmc %
git clone https://github.com/Alessandro-Salerno/htmc
cd htmc/
make
NOTA: O padrão padrão é all . Alvos alternativos são:
make htmc # Build ONLY the executable
make libhtmc # Build ONLY the library
make htmc-cgi-ws # Build ONLY the CGI Web Server
O HTMC é distribuído nos termos da licença do MIT. Consulte a licença para obter mais informações.
Este projeto foi inicialmente inspirado no PKD667/CWeb.