HTMC - это инструмент, который позволяет легко интегрировать C -код в ваши HTML -страницы и наоборот. Файлы, заканчивающиеся .htmc могут использоваться для описания структуры страницы, статически в HTML и динамически в C, так же, как и другие препроцессоры гипертекса, такие как PHP. Регулярные исходные файлы C также могут быть скомпилированы с HTMC и используются для создания полностью динамических веб -страниц.
HTMC использует GCC и линкеров GNU для генерации высоко оптимизированных нативных двоичных файлов, которые можно кэшировать и работать по требованию через HTMC. Теоретически , это обеспечивает гораздо более быстрое исполнение* по сравнению со многими общими интерпретируемыми языками, такими как PHP, Python и JavaScript.
Написание веб -кода в C также может быть забавным вызовом или академическими упражнениями. Учитывая достаточное количество разжигания, вы можете получить HTMC, чтобы сделать все необходимое в динамической веб -странице или в конечной точке API HTTP.
* Производительность кода, выполненная через HTMC, еще не была проверена. Кроме того, наиболее важные оптимизации еще предстоит реализованы, поскольку они строго требуют HTMC для интеграции собственного веб -сервера.
HTMC создан для поддержки нескольких пользователей. На данный момент можно использовать HTMC:
include и libhtmc.a )Рекомендуемый режим для обслуживания веб -контента является CGI, поскольку он позволяет легко интегрировать существующее веб -программное обеспечение.
Известно, что CGI является старым и медленным, поэтому HTMC в какой -то момент получит свой собственный веб -сервер. Интегрированный веб -сервер будет использовать предварительную арену, оптимизации памяти и сети, чтобы максимизировать скорость выполнения и минимизировать накладные расходы, мы надеемся.
Примечание. На данный момент замена GCC или GNU Linker на другое программное обеспечение не поощряется. Некоторые параметры командной линии, указанные HTMC, могут отличаться в других компиляторах/линкетерах.
LIBHTMC содержит все функции HTMC. Библиотека может использоваться в других нативных программах для интеграции HTMC, но также включает интерфейс для взаимодействия со временем выполнения HTMC и манипулирования HTML -кодом
| Функциональный интерфейс | Описание |
|---|---|
void htmc_bind(htmc_handover_t *handover) | Привязывает указатель htmc_handover_t к текущему блок выполнения HTMC |
int htmc_printf(const char *fmt, ...) | Пишет форматированную строку на HTML -странице |
int htmc_vpprintf(const char *fmt, va_list args) | Пишет форматированную строку на HTML -странице |
int htmc_puts(const cahr *s) | Напишите просто текстовую строку на странице HTML (быстрее, чем htmc_printf ) |
int htmc_query_scanf(const char *fmt, ...) | Читает значения из аргументов http Query |
int htmc_query_vscanf(const char *fmt, va_list args) | Читает значения из аргументов http Query |
int htmc_form_scanf(const char *fmt, ...) | Считает значения из аргументов HTTP Body в запросах Post |
int htmc_form_vscanf(const char *fmt, va_list args) | Считает значения из аргументов HTTP Body в запросах Post |
int htmc_error(const char *fmt, ...) | Бросает отформатированное сообщение об ошибке |
void *htmc_alloc(size_t size) | Возвращает void * в буфер памяти запрашиваемого размера или NULL если он не удается |
void htmc_free(void *ptr) | Освобождает буфер памяти, выделенный с помощью htmc_alloc |
Самый простой способ использования HTMC - это создать простой веб -сервер CGI на языке высокого уровня и вызов HTMC при обработке запросов. В этом примере Golang используется в качестве одного из самых простых местных языков, которые поддерживают эти функции из коробки. Веб -сервер Golang включен в этот репозиторий.
htmc-cgi-ws для Linux отсюдаhtmc-cgi-wshtmc-cgi-ws распознается как исполняемый chmod +x ./htmc-cgi-ws
htmc-cgi-ws как суперпользователь (при необходимости) и следуйте инструкциям на экране [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
Примечание: целевая цель по умолчанию - all . Альтернатива сделать цели:
make htmc # Build ONLY the executable
make libhtmc # Build ONLY the library
make htmc-cgi-ws # Build ONLY the CGI Web Server
HTMC распределяется в соответствии с условиями лицензии MIT. Смотрите лицензию для получения дополнительной информации.
Этот проект был изначально вдохновлен PKD667/CWEB.