HTMC adalah alat yang memungkinkan Anda untuk dengan mudah mengintegrasikan kode C di halaman HTML Anda dan sebaliknya. File yang diakhiri dengan .htmc dapat digunakan untuk menggambarkan struktur halaman secara statis dalam HTML dan secara dinamis di C, seperti preprosesor hypertex lainnya seperti PHP. File sumber C biasa juga dapat dikompilasi dengan HTMC dan digunakan untuk menghasilkan halaman web yang sepenuhnya dinamis.
HTMC menggunakan GCC dan Linker GNU untuk menghasilkan biner asli yang sangat dioptimalkan yang dapat di -cache dan dijalankan berdasarkan permintaan melalui HTMC. Secara teori , ini memungkinkan eksekusi yang jauh lebih cepat* dibandingkan dengan banyak bahasa yang ditafsirkan umum seperti PHP, Python, dan JavaScript.
Menulis kode web di C juga bisa menjadi tantangan yang menyenangkan atau latihan akademik. Diberi cukup mengutak -atik, Anda bisa mendapatkan HTMC untuk melakukan semua yang Anda butuhkan di halaman web dinamis atau titik akhir API HTTP.
* Kinerja kode yang dieksekusi melalui HTMC belum diuji. Juga, optimasi yang paling penting belum diimplementasikan karena mereka dengan keras mengharuskan HTMC untuk mengintegrasikan server web sendiri.
HTMC dibangun untuk mendukung beberapa usecases. Sampai sekarang, HTMC dapat digunakan:
include dan libhtmc.a )Mode yang disarankan untuk melayani konten web adalah CGI karena memungkinkan untuk integrasi yang mudah dengan perangkat lunak web yang ada.
CGI dikenal tua dan lambat, oleh karena itu mengapa HTMC akan mendapatkan server web sendiri di beberapa titik. Server web terintegrasi akan menggunakan arena yang telah ditentukan sebelumnya, memori dan optimisasi jaringan untuk memaksimalkan kecepatan eksekusi dan meminimalkan overhead, semoga.
CATATAN: Sampai sekarang menggantikan Linker GCC atau GNU dengan perangkat lunak lain tidak dianjurkan. Beberapa opsi Commandline yang ditentukan oleh HTMC mungkin berbeda di kompiler/penghubung lainnya.
libhtmc berisi semua fungsi HTMC. Perpustakaan dapat digunakan dalam program asli lainnya untuk mengintegrasikan HTMC, tetapi juga termasuk antarmuka untuk berinteraksi dengan runtime HTMC dan memanipulasi kode HTML
| Antarmuka fungsi | Keterangan |
|---|---|
void htmc_bind(htmc_handover_t *handover) | Mengikat pointer htmc_handover_t ke unit eksekusi htmc saat ini |
int htmc_printf(const char *fmt, ...) | Menulis string yang diformat ke halaman HTML |
int htmc_vpprintf(const char *fmt, va_list args) | Menulis string yang diformat ke halaman HTML |
int htmc_puts(const cahr *s) | Tulis string teks biasa ke halaman html (lebih cepat dari htmc_printf ) |
int htmc_query_scanf(const char *fmt, ...) | Membaca nilai dari argumen kueri HTTP |
int htmc_query_vscanf(const char *fmt, va_list args) | Membaca nilai dari argumen kueri HTTP |
int htmc_form_scanf(const char *fmt, ...) | Membaca nilai dari argumen bodi http dalam permintaan pos |
int htmc_form_vscanf(const char *fmt, va_list args) | Membaca nilai dari argumen bodi http dalam permintaan pos |
int htmc_error(const char *fmt, ...) | Melempar pesan kesalahan yang diformat |
void *htmc_alloc(size_t size) | Mengembalikan void * ke buffer memori dari ukuran yang diminta atau NULL jika gagal |
void htmc_free(void *ptr) | Membebaskan buffer memori yang dialokasikan dengan htmc_alloc |
Cara termudah untuk menggunakan HTMC adalah dengan membuat server web CGI sederhana dalam bahasa tingkat tinggi dan memohon HTMC saat menangani permintaan. Dalam contoh ini, Golang digunakan karena merupakan salah satu bahasa asli paling sederhana yang mendukung fitur -fitur ini di luar kotak. Server web Golang termasuk dalam repositori ini.
htmc-cgi-ws terbaru untuk Linux dari sinihtmc-cgi-ws ke dalamnyahtmc-cgi-ws diakui sebagai yang dapat dieksekusi chmod +x ./htmc-cgi-ws
htmc-cgi-ws sebagai pengguna super (jika diperlukan) dan ikuti instruksi di layar [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
Catatan: Target Make Default adalah all . Alternatif membuat target adalah:
make htmc # Build ONLY the executable
make libhtmc # Build ONLY the library
make htmc-cgi-ws # Build ONLY the CGI Web Server
HTMC didistribusikan berdasarkan ketentuan lisensi MIT. Lihat lisensi untuk informasi lebih lanjut.
Proyek ini awalnya terinspirasi oleh PKD667/CWEB.