HTMCは、HTMLページにCコードを簡単に統合できるツールです。その逆も同様です。 .htmcで終了するファイルは、PHPなどの他のハイパーテックス前処理装置と同様に、HTMLのページの構造と動的にCで動的に記述するために使用できます。通常のCソースファイルは、HTMCでコンパイルされ、完全に動的なWebページを生成するために使用することもできます。
HTMCは、GCCとGNUリンカーを使用して、HTMCを介してキャッシュしてオンデマンドで実行できる高度に最適化されたネイティブバイナリを生成します。理論的には、これにより、PHP、Python、JavaScriptなどの多くの一般的な解釈言語と比較して、はるかに高速な実行*が可能になります。
CでWebコードを書くことは、楽しい挑戦や学術演習でもあります。十分ないじくり回しを考えると、Dynamic WebページまたはHTTP APIエンドポイントで必要なすべてを実行できるようにHTMCを取得できます。
* HTMCを介して実行されたコードのパフォーマンスはまだテストされていません。また、最も重要な最適化は、独自のWebサーバーを統合するためにHTMCを厳しく必要とするため、まだ実装されていません。
HTMCは、複数のユーザーケースをサポートするために構築されています。現在のところ、HTMCを使用できます。
include Directoryとlibhtmc.aのヘッダーを使用)Webコンテンツを提供するための推奨モードは、既存のWebソフトウェアと簡単に統合できるため、CGIです。
CGIは古くて遅いことが知られているため、HTMCがある時点で独自のWebサーバーを取得する理由です。統合されたWebサーバーは、事前に配置されたアリーナ、メモリ、ネットワークの最適化を使用して、実行速度を最大化し、オーバーヘッドを最小化することを願っています。
注:現在、GCCまたはGNUリンカーを他のソフトウェアに置き換えることは奨励されていません。 HTMCによって指定された一部のコマンドラインオプションは、他のコンパイラ/リンカーで異なる場合があります。
LIBHTMCには、すべてのHTMC関数が含まれています。ライブラリは、HTMCを統合するために他のネイティブプログラムで使用できますが、HTMCランタイムと対話してHTMLコードを操作するためのインターフェイスも含まれています
| 関数インターフェイス | 説明 |
|---|---|
void htmc_bind(htmc_handover_t *handover) | 現在のHTMC実行ユニットにhtmc_handover_tポインターをバインドします |
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クエリ引数の値を読み取ります |
int htmc_query_vscanf(const char *fmt, va_list args) | HTTPクエリ引数の値を読み取ります |
int htmc_form_scanf(const char *fmt, ...) | POSTリクエストでHTTPボディの引数の値を読み取ります |
int htmc_form_vscanf(const char *fmt, va_list args) | POSTリクエストでHTTPボディの引数の値を読み取ります |
int htmc_error(const char *fmt, ...) | フォーマットされたエラーメッセージをスローします |
void *htmc_alloc(size_t size) | void *要求されたサイズのメモリバッファーに返しますNULL |
void htmc_free(void *ptr) | htmc_allocで割り当てられたメモリバッファーを解放します |
HTMCを使用する最も簡単な方法は、高レベルの言語でシンプルなCGI Webサーバーを作成し、リクエストを処理するときにHTMCを呼び出すことです。この例では、Golangは、これらの機能を箱から出してサポートする最も単純な母国語の1つであるため、使用されています。 Golang Webサーバーはこのリポジトリに含まれています。
htmc-cgi-wshtmc-cgi-ws ITに移動しますhtmc-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に触発されました。